Fix OnlineBoardSearchPage tests for PageLayout restructuring
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:
@@ -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();
|
||||
|
||||
Reference in New Issue
Block a user