Files
frontend/src/entities/brokerage-event/api/useBrokerageEvents.test.tsx
T
ksv741 4e5f564fa1 feat: show persisted investment data and sync state
Consume the provided resource-envelope API snapshot. Preserve financial snapshots during
refresh, observe synchronization without importing, and fence late responses across
account and connection changes.
2026-09-26 21:22:49 +03:00

77 lines
2.2 KiB
TypeScript

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" },
},
]);
});
});