49 lines
1.8 KiB
TypeScript
49 lines
1.8 KiB
TypeScript
import "@testing-library/jest-dom";
|
|
import { render, screen } from "@testing-library/react";
|
|
import React from "react";
|
|
import { MemoryRouter } from "react-router";
|
|
import { describe, expect, it, vi } from "vitest";
|
|
import PageMaintenanceMode from "./PageMaintenanceMode";
|
|
|
|
vi.mock("react-i18next", () => ({
|
|
useTranslation: () => ({
|
|
t: (key: string) =>
|
|
({
|
|
"shared.maintenance.title": "Maintenance in progress",
|
|
"shared.maintenance.description": "We're doing scheduled maintenance.",
|
|
"shared.clickHereToTryAgain": "Try again",
|
|
"503.eyebrow": "503 error",
|
|
})[key] ?? key,
|
|
}),
|
|
}));
|
|
|
|
vi.mock("~/components/brand/Logo", () => ({ default: () => <div data-testid="logo">Logo</div> }));
|
|
vi.mock("~/components/public/PublicFooter", () => ({ default: () => <footer data-testid="public-footer">Footer</footer> }));
|
|
|
|
function renderPageMaintenanceMode() {
|
|
return render(
|
|
<MemoryRouter>
|
|
<PageMaintenanceMode />
|
|
</MemoryRouter>
|
|
);
|
|
}
|
|
|
|
describe("PageMaintenanceMode", () => {
|
|
it("renders the shared 503 error-page shell with translated copy", () => {
|
|
renderPageMaintenanceMode();
|
|
|
|
const page = screen.getByTestId("error-page");
|
|
expect(page).toHaveAttribute("data-error-status", "503");
|
|
expect(screen.getByText("503 error")).toBeInTheDocument();
|
|
expect(screen.getByRole("heading", { name: "Maintenance in progress" })).toBeInTheDocument();
|
|
expect(screen.getByText("We're doing scheduled maintenance.")).toBeInTheDocument();
|
|
});
|
|
|
|
it("renders a retry action without exposing diagnostics by default", () => {
|
|
renderPageMaintenanceMode();
|
|
|
|
expect(screen.getByRole("link", { name: "Try again" })).toHaveAttribute("href", "/");
|
|
expect(screen.queryByText("stack trace details")).not.toBeInTheDocument();
|
|
});
|
|
});
|