3f5159fb8a
- Add docs/development/naming.md with complete naming convention reference - Add scripts/check-structure.js to verify file sizes (target: ≤300 lines) - Note: 9 files slightly exceed limit (form-heavy tabs, complex hooks, test files, utilities.css) — documented as acceptable deviations Quality gates: tsc (pass), eslint (pass) Refs: repo-restructure Task 5.2
63 lines
1.6 KiB
TypeScript
63 lines
1.6 KiB
TypeScript
import { render, screen, waitFor } from "@testing-library/react";
|
|
import { describe, it, expect, vi } from "vitest";
|
|
import { MemoryRouter } from "react-router-dom";
|
|
import { FileBrowser } from "./FileBrowser";
|
|
|
|
// Mock apiClient
|
|
vi.mock("../../../api/client", () => ({
|
|
apiClient: {
|
|
get: vi.fn(),
|
|
},
|
|
}));
|
|
|
|
import { apiClient } from "../../../api/client";
|
|
|
|
describe("FileBrowser", () => {
|
|
it("renders loading state initially", () => {
|
|
render(
|
|
<MemoryRouter>
|
|
<FileBrowser projectId="p1" repoId="r1" gitStatus={null} />
|
|
</MemoryRouter>,
|
|
);
|
|
expect(screen.getByText(/loading files/i)).toBeInTheDocument();
|
|
});
|
|
|
|
it("renders file entries after loading", async () => {
|
|
const mockedGet = apiClient.get as ReturnType<typeof vi.fn>;
|
|
mockedGet.mockResolvedValueOnce({
|
|
data: {
|
|
entries: [
|
|
{ name: "src", type: "directory", path: "src" },
|
|
{ name: "README.md", type: "file", path: "README.md" },
|
|
],
|
|
},
|
|
});
|
|
|
|
render(
|
|
<MemoryRouter>
|
|
<FileBrowser projectId="p1" repoId="r1" gitStatus={null} />
|
|
</MemoryRouter>,
|
|
);
|
|
|
|
await waitFor(() => {
|
|
expect(screen.getByText("src")).toBeInTheDocument();
|
|
});
|
|
expect(screen.getByText("README.md")).toBeInTheDocument();
|
|
});
|
|
|
|
it("renders error state on failure", async () => {
|
|
const mockedGet = apiClient.get as ReturnType<typeof vi.fn>;
|
|
mockedGet.mockRejectedValueOnce(new Error("Network error"));
|
|
|
|
render(
|
|
<MemoryRouter>
|
|
<FileBrowser projectId="p1" repoId="r1" gitStatus={null} />
|
|
</MemoryRouter>,
|
|
);
|
|
|
|
await waitFor(() => {
|
|
expect(screen.getByText(/failed to load files/i)).toBeInTheDocument();
|
|
});
|
|
});
|
|
});
|