/** * Workspaces Page Tests * Tests for page structure and component integration */ import { describe, it, expect, vi } from "vitest"; import { render, screen } from "@testing-library/react"; // Mock next/link vi.mock("next/link", () => ({ default: ({ children, href }: { children: React.ReactNode; href: string }): React.JSX.Element => ( {children} ), })); // Mock the WorkspaceCard component vi.mock("@/components/workspace/WorkspaceCard", () => ({ WorkspaceCard: (): React.JSX.Element =>
WorkspaceCard
, })); describe("WorkspacesPage", (): void => { // Note: NODE_ENV is "test" during test runs, which triggers the Coming Soon view // This tests the production-like behavior where mock data is hidden it("should render the Coming Soon view in non-development environments", async (): Promise => { const { default: WorkspacesPage } = await import("./page"); render(); // In test mode (non-development), should show Coming Soon expect(screen.getByText("Coming Soon")).toBeInTheDocument(); expect(screen.getByText("Workspace Management")).toBeInTheDocument(); }); it("should display appropriate description for workspace feature", async (): Promise => { const { default: WorkspacesPage } = await import("./page"); render(); expect( screen.getByText(/create and manage workspaces to organize your projects/i) ).toBeInTheDocument(); }); it("should not render mock workspace data in Coming Soon view", async (): Promise => { const { default: WorkspacesPage } = await import("./page"); render(); // Should not show workspace cards or create form in non-development mode expect(screen.queryByTestId("workspace-card")).not.toBeInTheDocument(); expect(screen.queryByText("Create New Workspace")).not.toBeInTheDocument(); }); it("should include link back to settings", async (): Promise => { const { default: WorkspacesPage } = await import("./page"); render(); const link = screen.getByRole("link", { name: /back to settings/i }); expect(link).toBeInTheDocument(); expect(link).toHaveAttribute("href", "/settings"); }); });