Files
frontend/src/test/storybook.test.tsx
T
ksv741 f9f0f6921e
Frontend verify / commits (pull_request) Failing after 1m19s
Frontend verify / security (pull_request) Skipped
Frontend verify / verify (pull_request) Skipped
refactor: clarify frontend module ownership
2026-09-29 07:07:36 +03:00

59 lines
2.9 KiB
TypeScript

import { composeStories } from "@storybook/react-vite";
// eslint-disable-next-line testing-library/no-manual-cleanup -- Vitest globals are disabled, so RTL cannot register its automatic afterEach cleanup.
import { cleanup, fireEvent, render, screen } from "@testing-library/react";
import { afterEach, describe, expect, it, vi } from "vitest";
import preview from "../../.storybook/preview";
import * as UiLoadingStories from "../../packages/ui/src/LoadingSkeleton/LoadingSkeleton.stories";
import * as StateStories from "../../packages/ui/src/StateView/StateView.stories";
import * as AccountStories from "../entities/brokerage-account/ui/BrokerageAccountList/BrokerageAccountList.stories";
import * as EventStories from "../entities/brokerage-event/ui/BrokerageEventsPreview/BrokerageEventsPreview.stories";
import * as RefreshStories from "../features/tbank-connection/ui/InvestmentRefreshState/InvestmentRefreshState.stories";
import * as IncomePeriodStories from "../pages/account-income/ui/AccountIncomePage/components/IncomePeriodForm/IncomePeriodForm.stories";
import * as LoadingStories from "../pages/account/ui/AccountPage/components/AccountPageLoading/AccountPageLoading.stories";
import * as PositionStories from "../pages/account/ui/AccountPage/components/PositionCard/PositionCard.stories";
import * as OperationStories from "../pages/card/ui/OperationForm/OperationForm.stories";
afterEach(() => vi.restoreAllMocks());
describe("Storybook isolated product examples", () => {
it("renders every fixture and runs callbacks without application network or browser data", () => {
const spies = [
vi.spyOn(globalThis, "fetch"),
vi.spyOn(XMLHttpRequest.prototype, "open"),
vi.spyOn(Storage.prototype, "getItem"),
vi.spyOn(Storage.prototype, "setItem"),
vi.spyOn(Storage.prototype, "removeItem"),
vi.spyOn(Document.prototype, "cookie", "get"),
vi.spyOn(Document.prototype, "cookie", "set"),
];
const stories = [
...Object.values(composeStories(AccountStories, preview)),
...Object.values(composeStories(LoadingStories, preview)),
...Object.values(composeStories(RefreshStories, preview)),
...Object.values(composeStories(PositionStories, preview)),
...Object.values(composeStories(EventStories, preview)),
...Object.values(composeStories(StateStories, preview)),
...Object.values(composeStories(UiLoadingStories, preview)),
...Object.values(composeStories(IncomePeriodStories, preview)),
...Object.values(composeStories(OperationStories, preview)),
];
for (const Story of stories) {
render(<Story />);
for (const button of screen.queryAllByRole("button"))
fireEvent.click(button);
for (const link of screen.queryAllByRole("link")) fireEvent.click(link);
for (const image of screen.queryAllByRole("img")) {
expect(image).not.toHaveAttribute("src");
}
cleanup();
}
for (const spy of spies) expect(spy).not.toHaveBeenCalled();
});
});