import { describe, it, expect, vi } from "vitest"; import { render, screen } from "@testing-library/react"; import { ErrorBoundary } from "../../src/components/ErrorBoundary"; import { CloseButton } from "../../src/components/CloseButton"; import i18n from "../../src/i18n"; function Boom({ message }: { message: string }): never { throw new Error(message); } describe("ErrorBoundary", () => { it("shows the English fallback", () => { vi.spyOn(console, "error").mockImplementation(() => {}); render(); expect(screen.getByText("Something went wrong rendering this view.")).toBeInTheDocument(); expect(screen.getByRole("button", { name: "try again" })).toBeInTheDocument(); }); it("translates the fallback into French", async () => { vi.spyOn(console, "error").mockImplementation(() => {}); await i18n.changeLanguage("fr"); render(); expect(screen.getByText("Une erreur est survenue lors de l’affichage de cette vue.")).toBeInTheDocument(); expect(screen.getByRole("button", { name: "recharger" })).toBeInTheDocument(); }); }); describe("ErrorBoundary recovery", () => { it("offers a reload for Safari's failed module import", async () => { vi.spyOn(console, "error").mockImplementation(() => {}); await i18n.changeLanguage("en"); render(); expect(screen.getByRole("button", { name: "reload" })).toBeInTheDocument(); }); it("clears the error when its reset key changes", async () => { vi.spyOn(console, "error").mockImplementation(() => {}); await i18n.changeLanguage("en"); const { rerender } = render(); rerender(

packets

); expect(screen.getByText("packets")).toBeInTheDocument(); }); }); describe("CloseButton", () => { it("defaults its label per language", async () => { const { unmount } = render( {}} />); expect(screen.getByRole("button", { name: "Close" })).toBeInTheDocument(); unmount(); await i18n.changeLanguage("fr"); render( {}} />); expect(screen.getByRole("button", { name: "Fermer" })).toBeInTheDocument(); }); });