import { MantineProvider } from "@mantine/core"; import { QueryClientProvider } from "@tanstack/react-query"; import { fireEvent, render, screen, waitFor } from "@testing-library/react"; import { HttpResponse, http } from "msw"; import { MemoryRouter } from "react-router"; import { describe, expect, it, vi } from "vitest"; import { configureAuthClient } from "@/shared/api"; import { createTestQueryClient } from "@/test/query"; import { server } from "@/test/server"; import { StocksPage } from "./StocksPage"; describe("stock search", () => { it("waits for a meaningful query and uses the server-verified ticker link", async () => { const query = vi.fn(); server.use( http.get("*/api/v1/stocks", ({ request }) => { query(new URL(request.url).searchParams.get("query")); return HttpResponse.json([ { name: "Сбербанк", ticker: "SBER", instrumentUid: "unique-stock", slug: "SBER", logoName: "sber.png", classCode: "TQBR", isin: "RU0009029540", realExchange: "REAL_EXCHANGE_MOEX", shareType: "SHARE_TYPE_COMMON", apiTradeAvailable: true, price: { currency: "RUB", value: "306.12" }, priceAt: "2026-09-10T10:00:00Z", }, ]); }), ); configureAuthClient({ accessToken: () => "synthetic", refresh: async () => false, clear: vi.fn(), }); render( , ); expect(query).not.toHaveBeenCalled(); fireEvent.change(screen.getByLabelText("Поиск акций"), { target: { value: "SBER" }, }); expect( await screen.findByRole("link", { name: /Сбербанк/ }), ).toHaveAttribute("href", "/stocks/SBER"); expect(screen.getByText("306,12 ₽")).toBeVisible(); expect(screen.getByText("Режим: TQBR")).toBeVisible(); expect(screen.getByText("ISIN: RU0009029540")).toBeVisible(); expect(screen.getByText("Мосбиржа")).toBeVisible(); await waitFor(() => expect(query).toHaveBeenCalledWith("SBER")); }); });