refactor: simplify errors and focus tests
Frontend verify / commits (pull_request) Successful in 30s
Frontend verify / security (pull_request) Successful in 11s
Frontend verify / verify (pull_request) Successful in 8m25s

This commit is contained in:
2026-09-28 21:25:28 +03:00
parent 320ea5922a
commit 7e976c330c
10 changed files with 70 additions and 232 deletions
@@ -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"));
});
});