import { describe, it, expect, vi, beforeEach } from "vitest"; import { render, screen, waitFor } from "@testing-library/react"; import DashboardPage from "./page"; import { fetchDashboardSummary } from "@/lib/api/dashboard"; // Mock Phase 3 dashboard widgets vi.mock("@/components/dashboard/DashboardMetrics", () => ({ DashboardMetrics: (): React.JSX.Element => (
Dashboard Metrics
), })); vi.mock("@/components/dashboard/OrchestratorSessions", () => ({ OrchestratorSessions: (): React.JSX.Element => (
Orchestrator Sessions
), })); vi.mock("@/components/dashboard/QuickActions", () => ({ QuickActions: (): React.JSX.Element =>
Quick Actions
, })); vi.mock("@/components/dashboard/ActivityFeed", () => ({ ActivityFeed: (): React.JSX.Element =>
Activity Feed
, })); vi.mock("@/components/dashboard/TokenBudget", () => ({ TokenBudget: (): React.JSX.Element =>
Token Budget
, })); // Mock hooks and API calls vi.mock("@/lib/hooks", () => ({ useWorkspaceId: (): string | null => "ws-test-123", })); vi.mock("@/lib/api/dashboard", () => ({ fetchDashboardSummary: vi.fn().mockResolvedValue({ metrics: { activeAgents: 5, tasksCompleted: 42, totalTasks: 100, tasksInProgress: 10, activeProjects: 3, errorRate: 0.5, }, recentActivity: [], activeJobs: [], tokenBudget: [], }), })); describe("DashboardPage", (): void => { beforeEach((): void => { vi.clearAllMocks(); vi.mocked(fetchDashboardSummary).mockResolvedValue({ metrics: { activeAgents: 5, tasksCompleted: 42, totalTasks: 100, tasksInProgress: 10, activeProjects: 3, errorRate: 0.5, }, recentActivity: [], activeJobs: [], tokenBudget: [], }); }); it("should render the DashboardMetrics widget", async (): Promise => { render(); await waitFor((): void => { expect(screen.getByTestId("dashboard-metrics")).toBeInTheDocument(); }); }); it("should render the OrchestratorSessions widget", async (): Promise => { render(); await waitFor((): void => { expect(screen.getByTestId("orchestrator-sessions")).toBeInTheDocument(); }); }); it("should render the QuickActions widget", async (): Promise => { render(); await waitFor((): void => { expect(screen.getByTestId("quick-actions")).toBeInTheDocument(); }); }); it("should render the ActivityFeed widget", async (): Promise => { render(); await waitFor((): void => { expect(screen.getByTestId("activity-feed")).toBeInTheDocument(); }); }); it("should render the TokenBudget widget", async (): Promise => { render(); await waitFor((): void => { expect(screen.getByTestId("token-budget")).toBeInTheDocument(); }); }); it("should render error state when API fails", async (): Promise => { vi.mocked(fetchDashboardSummary).mockRejectedValueOnce(new Error("Network error")); render(); await waitFor((): void => { expect(screen.getByText("Failed to load dashboard data")).toBeInTheDocument(); }); }); });