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