import { MantineProvider } from "@mantine/core"; import { cleanup, render, screen, waitFor } from "@testing-library/react"; import { MemoryRouter, useLocation, useNavigate } from "react-router"; import { afterEach, describe, expect, it, vi } from "vitest"; import { RouteErrorBoundary } from "./RouteErrorBoundary"; let authenticated = false; vi.mock("@/features/auth", () => ({ useAuth: () => ({ user: authenticated ? {} : null }), })); function ThrowingRoute(): never { throw new Error("test route failure"); } function HealthyRoute() { return (
{useLocation().pathname === "/healthy" ? ( "healthy route" ) : ( )}
); } function RouteHarness() { const navigate = useNavigate(); return ( <> ); } function renderBoundary(path: string) { return render( , ); } describe("RouteErrorBoundary", () => { afterEach(cleanup); it("offers login after a public route error without error details", () => { authenticated = false; renderBoundary("/login"); expect(screen.getByRole("link", { name: "Продолжить" })).toHaveAttribute( "href", "/login", ); expect(screen.queryByText("test route failure")).not.toBeInTheDocument(); }); it("offers accounts after a protected route error and resets on navigation", async () => { authenticated = true; renderBoundary("/accounts"); screen.getByRole("button", { name: "go healthy" }).click(); await waitFor(() => expect(screen.getByText("healthy route")).toBeInTheDocument(), ); }); });