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();
});
});