99097090e6
- Fix tool-workshop test selectors to match component labels - Fix API test mocks for axios client - Add htmlFor attributes to form labels in tool-workshop - Update type signatures to match API interfaces Quality gates: 43/43 tests pass, typecheck pass, lint pass
132 lines
3.7 KiB
TypeScript
132 lines
3.7 KiB
TypeScript
import { describe, expect, it, vi } from "vitest";
|
|
|
|
import {
|
|
createConfigFolder,
|
|
deleteConfigFolder,
|
|
listConfigFolders,
|
|
updateConfigFolder,
|
|
} from "../api/config_folders";
|
|
|
|
const mockGet = vi.fn();
|
|
const mockPost = vi.fn();
|
|
const mockPut = vi.fn();
|
|
const mockDelete = vi.fn();
|
|
|
|
vi.mock("../api/client", () => ({
|
|
apiClient: {
|
|
get: (...args: unknown[]) => mockGet(...args),
|
|
post: (...args: unknown[]) => mockPost(...args),
|
|
put: (...args: unknown[]) => mockPut(...args),
|
|
delete: (...args: unknown[]) => mockDelete(...args),
|
|
interceptors: {
|
|
response: {
|
|
use: vi.fn(),
|
|
},
|
|
},
|
|
},
|
|
shouldSkipAuthRedirect: vi.fn(() => false),
|
|
}));
|
|
|
|
describe("config_folders API", () => {
|
|
describe("listConfigFolders", () => {
|
|
it("returns folders with files and overrides", async () => {
|
|
const mockResponse = {
|
|
data: [
|
|
{
|
|
id: "folder-1",
|
|
name: "my-dotfiles",
|
|
description: "My personal config files",
|
|
mount_path: "/home/user",
|
|
files: { ".zshrc": "export ZSH=\"$HOME/.oh-my-zsh\"" },
|
|
project_overrides: {},
|
|
is_active: true,
|
|
user_id: "user-1",
|
|
created_at: "2024-01-01T00:00:00Z",
|
|
updated_at: "2024-01-01T00:00:00Z",
|
|
},
|
|
],
|
|
};
|
|
mockGet.mockResolvedValue(mockResponse);
|
|
|
|
const result = await listConfigFolders();
|
|
|
|
expect(result[0].name).toBe("my-dotfiles");
|
|
expect(result[0].files).toEqual({ ".zshrc": "export ZSH=\"$HOME/.oh-my-zsh\"" });
|
|
expect(mockGet).toHaveBeenCalledWith("/config-folders");
|
|
});
|
|
});
|
|
|
|
describe("createConfigFolder", () => {
|
|
it("creates folder with files", async () => {
|
|
const mockResponse = {
|
|
data: {
|
|
id: "folder-new",
|
|
name: "new-folder",
|
|
mount_path: "/workspace",
|
|
files: { ".env": "API_URL=http://localhost" },
|
|
is_active: true,
|
|
user_id: "user-1",
|
|
created_at: "2024-01-01T00:00:00Z",
|
|
updated_at: "2024-01-01T00:00:00Z",
|
|
},
|
|
};
|
|
mockPost.mockResolvedValue(mockResponse);
|
|
|
|
const result = await createConfigFolder({
|
|
name: "new-folder",
|
|
mount_path: "/workspace",
|
|
files: { ".env": "API_URL=http://localhost" },
|
|
});
|
|
|
|
expect(result.name).toBe("new-folder");
|
|
expect(mockPost).toHaveBeenCalledWith(
|
|
"/config-folders",
|
|
expect.objectContaining({
|
|
name: "new-folder",
|
|
mount_path: "/workspace",
|
|
})
|
|
);
|
|
});
|
|
});
|
|
|
|
describe("updateConfigFolder", () => {
|
|
it("updates folder files", async () => {
|
|
const mockResponse = {
|
|
data: {
|
|
id: "folder-1",
|
|
name: "updated-folder",
|
|
mount_path: "/home/user",
|
|
files: { ".bashrc": "alias ll='ls -la'" },
|
|
is_active: true,
|
|
user_id: "user-1",
|
|
created_at: "2024-01-01T00:00:00Z",
|
|
updated_at: "2024-01-01T00:00:00Z",
|
|
},
|
|
};
|
|
mockPut.mockResolvedValue(mockResponse);
|
|
|
|
const result = await updateConfigFolder("folder-1", {
|
|
files: { ".bashrc": "alias ll='ls -la'" },
|
|
});
|
|
|
|
expect(result.files).toEqual({ ".bashrc": "alias ll='ls -la'" });
|
|
expect(mockPut).toHaveBeenCalledWith(
|
|
"/config-folders/folder-1",
|
|
expect.objectContaining({
|
|
files: { ".bashrc": "alias ll='ls -la'" },
|
|
})
|
|
);
|
|
});
|
|
});
|
|
|
|
describe("deleteConfigFolder", () => {
|
|
it("deletes folder", async () => {
|
|
mockDelete.mockResolvedValue({ data: undefined });
|
|
|
|
await deleteConfigFolder("folder-1");
|
|
|
|
expect(mockDelete).toHaveBeenCalledWith("/config-folders/folder-1");
|
|
});
|
|
});
|
|
});
|