import { describe, it, expect, vi } from "vitest"; import { render, screen, waitFor } from "@testing-library/react"; import TasksPage from "./page"; // Mock the TaskList component vi.mock("@/components/tasks/TaskList", () => ({ TaskList: ({ tasks, isLoading }: { tasks: unknown[]; isLoading: boolean }): React.JSX.Element => (
{isLoading ? "Loading" : `${String(tasks.length)} tasks`}
), })); describe("TasksPage", (): void => { it("should render the page title", (): void => { render(); expect(screen.getByRole("heading", { level: 1 })).toHaveTextContent("Tasks"); }); it("should show loading state initially", (): void => { render(); expect(screen.getByTestId("task-list")).toHaveTextContent("Loading"); }); it("should render the TaskList with tasks after loading", async (): Promise => { render(); await waitFor((): void => { expect(screen.getByTestId("task-list")).toHaveTextContent("4 tasks"); }); }); it("should have proper layout structure", (): void => { const { container } = render(); const main = container.querySelector("main"); expect(main).toBeInTheDocument(); }); it("should render the subtitle text", (): void => { render(); expect(screen.getByText("Organize your work at your own pace")).toBeInTheDocument(); }); });