refactor: simplify errors and focus tests
This commit is contained in:
@@ -210,23 +210,9 @@ describe("useAccountPageViewModel", () => {
|
||||
expect(snapshot).toEqual(original);
|
||||
});
|
||||
|
||||
it("prepares grouped position sections with derived display data", async () => {
|
||||
configureTestAuth();
|
||||
mockLoadedAccountPage();
|
||||
|
||||
const { result } = renderHook(() => useAccountPageViewModel(), {
|
||||
wrapper: createWrapper(),
|
||||
});
|
||||
|
||||
await waitFor(() => expect(result.current.state).toBe("loaded"));
|
||||
|
||||
const loaded = result.current as Extract<
|
||||
typeof result.current,
|
||||
{ state: "loaded" }
|
||||
>;
|
||||
|
||||
it("prepares grouped position sections with derived display data", () => {
|
||||
expect(
|
||||
loaded.positionSections.map(({ groups, kind }) => ({
|
||||
toAccountPagePositionSections(portfolio).map(({ groups, kind }) => ({
|
||||
kind,
|
||||
positions: groups.flatMap(group => group.positions),
|
||||
})),
|
||||
|
||||
@@ -5,7 +5,7 @@ import { describe, expect, it } from "vitest";
|
||||
import { CurrencyCards } from "./CurrencyCards.view";
|
||||
|
||||
describe("CurrencyCards currency presentation", () => {
|
||||
it.each([0, 1, 3, 5])(
|
||||
it.each([0, 5])(
|
||||
"renders only the %i supplied totals in upstream order",
|
||||
(count) => {
|
||||
const totals = [
|
||||
@@ -74,20 +74,4 @@ describe("CurrencyCards currency presentation", () => {
|
||||
);
|
||||
},
|
||||
);
|
||||
|
||||
it("keeps USD and CAD as distinct supplied values", () => {
|
||||
render(
|
||||
<MantineProvider>
|
||||
<CurrencyCards
|
||||
amounts={[
|
||||
{ currency: "USD", value: "1.00" },
|
||||
{ currency: "CAD", value: "2.00" },
|
||||
]}
|
||||
/>
|
||||
</MantineProvider>,
|
||||
);
|
||||
expect(
|
||||
screen.getAllByRole("definition").map(node => node.textContent),
|
||||
).toEqual(["1,00 $", "2,00 CAD"]);
|
||||
});
|
||||
});
|
||||
|
||||
@@ -1,9 +1,9 @@
|
||||
import { MantineProvider } from "@mantine/core";
|
||||
import { QueryClientProvider } from "@tanstack/react-query";
|
||||
import { fireEvent, render, screen, waitFor } from "@testing-library/react";
|
||||
import { act, fireEvent, render, screen, waitFor } from "@testing-library/react";
|
||||
import { http, HttpResponse } from "msw";
|
||||
import { MemoryRouter } from "react-router";
|
||||
import { describe, expect, it, vi } from "vitest";
|
||||
import { afterEach, describe, expect, it, vi } from "vitest";
|
||||
|
||||
import { configureAuthClient } from "@/shared/api";
|
||||
import { createTestQueryClient } from "@/test/query";
|
||||
@@ -12,6 +12,8 @@ import { server } from "@/test/server";
|
||||
|
||||
import { BondsPage } from "./BondsPage";
|
||||
|
||||
afterEach(() => vi.useRealTimers());
|
||||
|
||||
describe("bond search", () => {
|
||||
it("waits for a meaningful query and uses the server-verified ticker link", async () => {
|
||||
const query = vi.fn();
|
||||
@@ -46,6 +48,7 @@ describe("bond search", () => {
|
||||
clear: vi.fn(),
|
||||
refresh: () => Promise.resolve(false),
|
||||
});
|
||||
vi.useFakeTimers();
|
||||
render(
|
||||
<QueryClientProvider client={createTestQueryClient()}>
|
||||
<MantineProvider>
|
||||
@@ -55,10 +58,16 @@ describe("bond search", () => {
|
||||
</MantineProvider>
|
||||
</QueryClientProvider>,
|
||||
);
|
||||
const input = screen.getByLabelText("Поиск облигаций");
|
||||
fireEvent.change(input, { target: { value: "S" } });
|
||||
await act(() => vi.advanceTimersByTimeAsync(300));
|
||||
expect(query).not.toHaveBeenCalled();
|
||||
fireEvent.change(screen.getByLabelText("Поиск облигаций"), {
|
||||
target: { value: "SU26238RMFS4" },
|
||||
});
|
||||
fireEvent.change(input, { target: { value: "SB" } });
|
||||
await act(() => vi.advanceTimersByTimeAsync(299));
|
||||
expect(query).not.toHaveBeenCalled();
|
||||
// The final input uses real timers for network and query notifications.
|
||||
vi.useRealTimers();
|
||||
fireEvent.change(input, { target: { value: "SU26238RMFS4" } });
|
||||
expect(await screen.findByRole("link", { name: /ОФЗ/ })).toHaveAttribute(
|
||||
"href",
|
||||
"/bonds/SU26238RMFS4",
|
||||
@@ -67,6 +76,6 @@ describe("bond search", () => {
|
||||
expect(screen.getByText("Режим: TQOB")).toBeVisible();
|
||||
expect(screen.getByText("ISIN: RU0009029540")).toBeVisible();
|
||||
expect(screen.getByText("Мосбиржа")).toBeVisible();
|
||||
await waitFor(() => expect(query).toHaveBeenCalledWith("SU26238RMFS4"));
|
||||
await waitFor(() => expect(query).toHaveBeenCalledExactlyOnceWith("SU26238RMFS4"));
|
||||
});
|
||||
});
|
||||
|
||||
@@ -1,9 +1,9 @@
|
||||
import { MantineProvider } from "@mantine/core";
|
||||
import { QueryClientProvider } from "@tanstack/react-query";
|
||||
import { fireEvent, render, screen, waitFor } from "@testing-library/react";
|
||||
import { act, fireEvent, render, screen, waitFor } from "@testing-library/react";
|
||||
import { http, HttpResponse } from "msw";
|
||||
import { MemoryRouter } from "react-router";
|
||||
import { describe, expect, it, vi } from "vitest";
|
||||
import { afterEach, describe, expect, it, vi } from "vitest";
|
||||
|
||||
import { configureAuthClient } from "@/shared/api";
|
||||
import { createTestQueryClient } from "@/test/query";
|
||||
@@ -12,6 +12,8 @@ import { server } from "@/test/server";
|
||||
|
||||
import { StocksPage } from "./StocksPage";
|
||||
|
||||
afterEach(() => vi.useRealTimers());
|
||||
|
||||
describe("stock search", () => {
|
||||
it("waits for a meaningful query and uses the server-verified ticker link", async () => {
|
||||
const query = vi.fn();
|
||||
@@ -44,6 +46,7 @@ describe("stock search", () => {
|
||||
clear: vi.fn(),
|
||||
refresh: () => Promise.resolve(false),
|
||||
});
|
||||
vi.useFakeTimers();
|
||||
render(
|
||||
<QueryClientProvider client={createTestQueryClient()}>
|
||||
<MantineProvider>
|
||||
@@ -53,10 +56,16 @@ describe("stock search", () => {
|
||||
</MantineProvider>
|
||||
</QueryClientProvider>,
|
||||
);
|
||||
const input = screen.getByLabelText("Поиск акций");
|
||||
fireEvent.change(input, { target: { value: "S" } });
|
||||
await act(() => vi.advanceTimersByTimeAsync(300));
|
||||
expect(query).not.toHaveBeenCalled();
|
||||
fireEvent.change(screen.getByLabelText("Поиск акций"), {
|
||||
target: { value: "SBER" },
|
||||
});
|
||||
fireEvent.change(input, { target: { value: "SB" } });
|
||||
await act(() => vi.advanceTimersByTimeAsync(299));
|
||||
expect(query).not.toHaveBeenCalled();
|
||||
// The final input uses real timers for network and query notifications.
|
||||
vi.useRealTimers();
|
||||
fireEvent.change(input, { target: { value: "SBER" } });
|
||||
expect(
|
||||
await screen.findByRole("link", { name: /Сбербанк/ }),
|
||||
).toHaveAttribute("href", "/stocks/SBER");
|
||||
@@ -64,6 +73,6 @@ describe("stock search", () => {
|
||||
expect(screen.getByText("Режим: TQBR")).toBeVisible();
|
||||
expect(screen.getByText("ISIN: RU0009029540")).toBeVisible();
|
||||
expect(screen.getByText("Мосбиржа")).toBeVisible();
|
||||
await waitFor(() => expect(query).toHaveBeenCalledWith("SBER"));
|
||||
await waitFor(() => expect(query).toHaveBeenCalledExactlyOnceWith("SBER"));
|
||||
});
|
||||
});
|
||||
|
||||
Reference in New Issue
Block a user