import { fireEvent, render, screen } from "@testing-library/react"; import { MemoryRouter } from "react-router-dom"; import { beforeEach, describe, expect, it, vi } from "vitest"; import { mockUser } from "../../test/fixtures/user.fixture"; import { useLetters } from "../hooks/useLetters"; import { useAuthStore } from "../store/useAuthStore"; import Drawer from "./Drawer"; vi.mock("../hooks/useLetters"); vi.mock("../components/drawer/WelcomeLetterOverlay", () => ({ WelcomeLetterOverlay: ({ onComplete }: any) => (
), })); describe("Drawer Page", () => { beforeEach(() => { // Setup authenticated state for the test useAuthStore.setState({ user: mockUser, accessToken: "fake-token", isInitializing: false, }); vi.mocked(useLetters).mockReturnValue({ drafts: [], kept: [], sent: [], vault: [], loading: false, isAuthRequired: false, }); }); it("renders the cabinet sections and empty state message", () => { render( , ); expect(screen.getByText(/Drafts/i)).toBeInTheDocument(); expect(screen.getAllByText(/Kept/i).length).toBeGreaterThanOrEqual(1); expect(screen.getByText(/Vault/i)).toBeInTheDocument(); expect(screen.getByText(/This drawer remains silent/i)).toBeInTheDocument(); }); it("renders the loading state", () => { vi.mocked(useLetters).mockReturnValue({ drafts: [], kept: [], sent: [], vault: [], loading: true, isAuthRequired: false, }); render( , ); expect(screen.getByText(/Opening your cabinet/i)).toBeInTheDocument(); }); it("renders the authentication required modal when api requires auth", () => { vi.mocked(useLetters).mockReturnValue({ drafts: [], kept: [], sent: [], vault: [], loading: false, isAuthRequired: true, }); render( , ); expect(screen.getByText(/You've been away a while./i)).toBeInTheDocument(); expect(screen.getByPlaceholderText(/password/i)).toBeInTheDocument(); }); it("renders the welcome letter when firstTime state is present", () => { render( , ); expect(screen.getByTestId("welcome-letter-overlay")).toBeInTheDocument(); }); it("renders the drawer content when the letter is closed", () => { render( , ); const completeButton = screen.getByTestId("overlay-exit-button"); fireEvent.click(completeButton); expect( screen.queryByTestId("welcome-letter-overlay"), ).not.toBeInTheDocument(); }); });