import { render, screen } from "@testing-library/react"; import { MemoryRouter, Route, Routes } from "react-router-dom"; import { beforeEach, describe, expect, it } from "vitest"; import { mockUser } from "../../test/fixtures/user.fixture"; import { useAuthStore } from "../store/useAuthStore"; import { ProtectedRoute, PublicRoute } from "./RouteGuards"; function renderGuard(ui: React.ReactNode, mountPath: "/protected" | "/public") { return render( Login Page} /> Drawer Page} /> , ); } beforeEach(() => { useAuthStore.setState({ accessToken: null, user: null, isInitializing: true, }); }); describe("ProtectedRoute", () => { it("should show SplashScreen while auth is initializing", () => { useAuthStore.setState({ isInitializing: true, accessToken: null, user: null, }); renderGuard(
Secret
, "/protected", ); expect(screen.getByText(/Unsealing/i)).toBeInTheDocument(); expect(screen.queryByText("Secret")).not.toBeInTheDocument(); }); it("should redirect unauthenticated users to /login", () => { useAuthStore.setState({ isInitializing: false, accessToken: null, user: null, }); renderGuard(
Secret
, "/protected", ); expect(screen.getByText("Login Page")).toBeInTheDocument(); expect(screen.queryByText("Secret")).not.toBeInTheDocument(); }); it("should render page for authenticated users", () => { useAuthStore.setState({ isInitializing: false, accessToken: "token", user: mockUser, }); renderGuard(
Secret
, "/protected", ); expect(screen.getByText("Secret")).toBeInTheDocument(); }); }); describe("PublicRoute", () => { it("should show SplashScreen while auth is initializing", () => { useAuthStore.setState({ isInitializing: true, accessToken: null, user: null, }); renderGuard(
Login Page
, "/public", ); expect(screen.getByText(/Unsealing/i)).toBeInTheDocument(); expect(screen.queryByText("Login Page")).not.toBeInTheDocument(); }); it("should redirect authenticated users to /drawer", () => { useAuthStore.setState({ isInitializing: false, accessToken: "token", user: mockUser, }); renderGuard(
Login Form
, "/public", ); expect(screen.getByText("Drawer Page")).toBeInTheDocument(); expect(screen.queryByText("Login Form")).not.toBeInTheDocument(); }); it("should render page for unauthenticated users", () => { useAuthStore.setState({ isInitializing: false, accessToken: null, user: null, }); renderGuard(
Login Form
, "/public", ); expect(screen.getByText("Login Form")).toBeInTheDocument(); }); });