// 重构:DuplicationUpload 页面已拆分为子组件(UploadZone/InfoSidebar/UploadProgress等) import { describe, expect, it, vi, beforeEach } from "vitest" import { uploadForDuplication, getDuplicationRecords, getDuplicationDetail, deleteDuplicationRecord, retryDuplication, } from "@/api/duplication" 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("duplication 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("uploadForDuplication", () => { it("should resolve successfully", async () => { await expect(uploadForDuplication(new File(["test"], "test.txt"))).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(uploadForDuplication(new File(["test"], "test.txt"))).rejects.toThrow() }) }) describe("getDuplicationRecords", () => { it("should resolve successfully", async () => { await expect(getDuplicationRecords()).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(getDuplicationRecords()).rejects.toThrow() }) }) describe("getDuplicationDetail", () => { it("should resolve successfully", async () => { await expect(getDuplicationDetail("test-recordId")).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(getDuplicationDetail("test-recordId")).rejects.toThrow() }) }) describe("deleteDuplicationRecord", () => { it("should resolve successfully", async () => { await expect(deleteDuplicationRecord("test-recordId")).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(deleteDuplicationRecord("test-recordId")).rejects.toThrow() }) }) describe("retryDuplication", () => { it("should resolve successfully", async () => { await expect(retryDuplication("test-recordId")).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(retryDuplication("test-recordId")).rejects.toThrow() }) }) })