import { describe, expect, it, vi, beforeEach } from "vitest" import { getProjects, createProject, getOrCreateDefaultProject } from "@/api/projects" const mockGet = vi.fn() const mockPost = vi.fn() const mockPut = vi.fn() const mockDelete = vi.fn() const mockPatch = vi.fn() vi.mock("@/api/client", () => ({ default: { get: (...args: unknown[]) => mockGet(...args), post: (...args: unknown[]) => mockPost(...args), put: (...args: unknown[]) => mockPut(...args), delete: (...args: unknown[]) => mockDelete(...args), patch: (...args: unknown[]) => mockPatch(...args), }, })) vi.mock("antd", () => ({ message: { error: vi.fn(), success: vi.fn() } })) vi.mock("@/store/authStore", () => ({ useAuthStore: { getState: vi.fn(() => ({})) } })) describe("projects API", () => { beforeEach(() => { vi.clearAllMocks() mockGet.mockResolvedValue({ data: { success: true, items: [] } }) mockPost.mockResolvedValue({ data: { success: true, items: [] } }) mockPut.mockResolvedValue({ data: { success: true, items: [] } }) mockDelete.mockResolvedValue({ data: { success: true, items: [] } }) mockPatch.mockResolvedValue({ data: { success: true, items: [] } }) }) describe("getProjects", () => { it("should resolve successfully", async () => { await expect(getProjects()).resolves.not.toThrow() }) it("should reject on API error", async () => { mockGet.mockRejectedValue(new Error("Network error")) mockPost.mockRejectedValue(new Error("Network error")) mockPut.mockRejectedValue(new Error("Network error")) mockDelete.mockRejectedValue(new Error("Network error")) mockPatch.mockRejectedValue(new Error("Network error")) await expect(getProjects()).rejects.toThrow() }) }) describe("createProject", () => { it("should resolve successfully", async () => { await expect(createProject({ name: "test-item" })).resolves.not.toThrow() }) it("should reject on API error", async () => { mockGet.mockRejectedValue(new Error("Network error")) mockPost.mockRejectedValue(new Error("Network error")) mockPut.mockRejectedValue(new Error("Network error")) mockDelete.mockRejectedValue(new Error("Network error")) mockPatch.mockRejectedValue(new Error("Network error")) await expect(createProject({ name: "test-item" })).rejects.toThrow() }) }) describe("getOrCreateDefaultProject", () => { it("should resolve successfully", async () => { await expect(getOrCreateDefaultProject()).resolves.not.toThrow() }) it("should reject on API error", async () => { mockGet.mockRejectedValue(new Error("Network error")) mockPost.mockRejectedValue(new Error("Network error")) mockPut.mockRejectedValue(new Error("Network error")) mockDelete.mockRejectedValue(new Error("Network error")) mockPatch.mockRejectedValue(new Error("Network error")) await expect(getOrCreateDefaultProject()).rejects.toThrow() }) }) })