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.
77 lines
2.2 KiB
TypeScript
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" },
|
|
},
|
|
]);
|
|
});
|
|
});
|