import "@testing-library/jest-dom/vitest"; import { cleanup, fireEvent, render, screen, waitFor, } from "@testing-library/react"; import { MemoryRouter, Routes, Route } from "react-router-dom"; import { afterEach, describe, expect, it, vi } from "vitest"; afterEach(() => { cleanup(); }); import { WorkspaceDetailPage } from "./WorkspaceDetailPage"; const mockWorkspaces = [ { id: "ws-1", name: "dev", repo_name: "my-repo", project_name: "My Project", branch: "main", path: "/data/ws/dev", status: "ready", instance_count: 0, }, ]; vi.mock("../hooks/use-workspaces", () => ({ useWorkspaces: () => ({ workspaces: mockWorkspaces, loading: false, error: null, refresh: vi.fn(), }), })); vi.mock("../hooks/use-workspace-files", () => ({ useWorkspaceFiles: () => ({ entries: [], content: null, currentPath: "", loading: false, error: null, loadFile: vi.fn(), saveFile: vi.fn(), navigateTo: vi.fn(), }), })); vi.mock("../hooks/use-workspace-git", () => ({ useWorkspaceGit: () => ({ status: { branch: "main", modified: [], added: [], deleted: [], untracked: [], ahead: 0, behind: 0, }, history: [], branches: ["main"], currentBranch: "main", loading: false, error: null, commit: vi.fn(), push: vi.fn(), pull: vi.fn(), fetch: vi.fn(), checkout: vi.fn(), }), })); vi.mock("../hooks/use-workspace-instances", () => ({ useWorkspaceInstances: () => ({ instances: [], loading: false, error: null, refresh: vi.fn(), }), })); vi.mock("../hooks/use-mobile-viewport", () => ({ useMobileViewport: () => false, })); describe("WorkspaceDetailPage", () => { it("renders workspace header and tabs", async () => { render( } /> , ); await waitFor(() => { expect(screen.getByText("dev")).toBeInTheDocument(); }); expect(screen.getByText(/my-repo/i)).toBeInTheDocument(); expect(screen.getByRole("tab", { name: /files/i })).toBeInTheDocument(); expect(screen.getByRole("tab", { name: /git/i })).toBeInTheDocument(); expect(screen.getByRole("tab", { name: /tools/i })).toBeInTheDocument(); expect(screen.getByRole("tab", { name: /settings/i })).toBeInTheDocument(); }); it("switches tabs", async () => { render( } /> , ); await waitFor(() => { expect( screen.getByRole("tab", { name: /settings/i }), ).toBeInTheDocument(); }); fireEvent.click(screen.getByRole("tab", { name: /settings/i })); expect(screen.getByText(/workspace info/i)).toBeInTheDocument(); }); });