Fix OnlineBoardSearchPage tests for PageLayout restructuring
CI / ci (push) Failing after 36s
Deploy / build-and-deploy (push) Failing after 5s

Tests failed because PageTabs uses Link from @modern-js/runtime/router
which wasn't included in the router mock. Added Link to the router mock,
added mocks for PageTabs, OnlineBoardFilter, and other transitive deps,
and updated error text assertions to match the new Russian strings.
This commit is contained in:
2026-04-15 21:04:28 +03:00
parent 11026cd244
commit 8df20a9ed9
3 changed files with 64 additions and 3 deletions
@@ -11,10 +11,33 @@ import { render, screen } from "@testing-library/react";
import { OnlineBoardSearchPage } from "./OnlineBoardSearchPage.js";
import type { OnlineBoardSearchPageProps } from "./OnlineBoardSearchPage.js";
// Mock i18n
vi.mock("@/i18n/provider.js", () => ({
useTranslation: () => ({
t: (key: string) => key,
i18n: { language: "ru" },
}),
}));
// Mock all hooks and router
vi.mock("@modern-js/runtime/router", () => ({
useNavigate: () => vi.fn(),
useParams: () => ({ lang: "ru" }),
Link: ({ children, ...props }: Record<string, unknown>) =>
<a {...props}>{children as React.ReactNode}</a>,
}));
// Mock layout components that bring in extra transitive dependencies
vi.mock("@/ui/layout/PageTabs.js", () => ({
PageTabs: () => <div data-testid="page-tabs" />,
}));
vi.mock("./OnlineBoardFilter.js", () => ({
OnlineBoardFilter: () => <div data-testid="online-board-filter" />,
}));
vi.mock("@/features/flights-map/hooks/useFeatureFlag.js", () => ({
useFeatureFlag: () => false,
}));
vi.mock("../hooks/useOnlineBoard.js", () => ({
@@ -21,6 +21,21 @@ import type { IParsedFlightId } from "@/features/online-board/types.js";
vi.mock("@modern-js/runtime/router", () => ({
useNavigate: () => vi.fn(),
useParams: () => ({ lang: "ru" }),
Link: ({ children, ...props }: Record<string, unknown>) =>
<a {...props}>{children as React.ReactNode}</a>,
}));
// Mock layout components to avoid transitive dependency issues
vi.mock("@/ui/layout/PageTabs.js", () => ({
PageTabs: () => <div data-testid="page-tabs" />,
}));
vi.mock("@/features/online-board/components/OnlineBoardFilter.js", () => ({
OnlineBoardFilter: () => <div data-testid="online-board-filter" />,
}));
vi.mock("@/features/flights-map/hooks/useFeatureFlag.js", () => ({
useFeatureFlag: () => false,
}));
vi.mock("@/i18n/provider.js", () => ({
@@ -97,7 +112,7 @@ describe("Search page error handling", () => {
render(<OnlineBoardSearchPage params={DEPARTURE_PARAMS} />);
expect(screen.getByTestId("search-error")).toBeTruthy();
expect(screen.getByText(/Failed to load flights/)).toBeTruthy();
expect(screen.getByText(/Не удалось загрузить данные/)).toBeTruthy();
});
it("renders error UI for HTTP 404", () => {
@@ -133,7 +148,7 @@ describe("Search page error handling", () => {
});
render(<OnlineBoardSearchPage params={DEPARTURE_PARAMS} />);
expect(screen.getByText("Retry")).toBeTruthy();
expect(screen.getByText("Повторить")).toBeTruthy();
});
it("calls refresh when retry button is clicked", () => {
@@ -146,7 +161,7 @@ describe("Search page error handling", () => {
});
render(<OnlineBoardSearchPage params={DEPARTURE_PARAMS} />);
fireEvent.click(screen.getByText("Retry"));
fireEvent.click(screen.getByText("Повторить"));
expect(refreshSpy).toHaveBeenCalledTimes(1);
});
});
@@ -20,6 +20,29 @@ import { ALL_FLIGHTS, CALENDAR_DAYS } from "./fixtures.js";
vi.mock("@modern-js/runtime/router", () => ({
useNavigate: () => vi.fn(),
useParams: () => ({ lang: "ru" }),
Link: ({ children, ...props }: Record<string, unknown>) =>
<a {...props}>{children as React.ReactNode}</a>,
}));
// Mock i18n
vi.mock("@/i18n/provider.js", () => ({
useTranslation: () => ({
t: (key: string) => key,
i18n: { language: "ru" },
}),
}));
// Mock layout components to avoid transitive dependency issues
vi.mock("@/ui/layout/PageTabs.js", () => ({
PageTabs: () => <div data-testid="page-tabs" />,
}));
vi.mock("@/features/online-board/components/OnlineBoardFilter.js", () => ({
OnlineBoardFilter: () => <div data-testid="online-board-filter" />,
}));
vi.mock("@/features/flights-map/hooks/useFeatureFlag.js", () => ({
useFeatureFlag: () => false,
}));
const mockUseOnlineBoard = vi.fn();