import { renderHook, waitFor } from "@testing-library/react"; import { HttpResponse, http } from "msw"; import { describe, expect, it, vi } from "vitest"; import { configureAuthClient } from "@/shared/api"; import { createQueryWrapper } from "@/test/query"; import { resource } from "@/test/resource"; import { server } from "@/test/server"; import { useBrokerageEvents } from "./useBrokerageEvents"; describe("useBrokerageEvents", () => { it("does not fetch events without an account ID", async () => { configureAuthClient({ accessToken: () => "token", refresh: async () => true, clear: vi.fn(), }); const requested = vi.fn(() => HttpResponse.json({ events: [] })); server.use( http.get("*/api/v1/brokerage-accounts/:accountId/events", requested), ); const { result } = renderHook(() => useBrokerageEvents(undefined), { wrapper: createQueryWrapper().wrapper, }); await waitFor(() => expect(result.current.fetchStatus).toBe("idle")); expect(requested).not.toHaveBeenCalled(); }); it("loads future cash events through the authenticated query seam", async () => { configureAuthClient({ accessToken: () => "token", refresh: async () => true, clear: vi.fn(), }); server.use( http.get("*/api/v1/brokerage-accounts/account-1/events", () => HttpResponse.json( resource({ accountId: "account-1", calculatedAt: "2026-08-14T00:00:00Z", events: [ { type: "dividend", date: "2026-09-01", dateKind: "registry", figi: "figi-1", instrumentUid: null, ticker: "SBER", displayName: "Сбер", logoName: "sber3.png", projectedAmount: { currency: "RUB", value: "12.34" }, }, ], }), ), ), ); const { result } = renderHook(() => useBrokerageEvents("account-1"), { wrapper: createQueryWrapper().wrapper, }); await waitFor(() => expect(result.current.isSuccess).toBe(true)); expect(result.current.data?.events).toEqual([ { type: "dividend", date: "2026-09-01", dateKind: "registry", figi: "figi-1", instrumentUid: null, ticker: "SBER", displayName: "Сбер", logoName: "sber3.png", projectedAmount: { currency: "RUB", value: "12.34" }, }, ]); }); });