import { describe, expect, it, vi } from "vitest"; vi.mock("./client", () => ({ apiGet: vi.fn(), apiPost: vi.fn(), apiRequest: vi.fn(), })); import { apiGet, apiPost, apiRequest } from "./client"; import { approveProposal, getCurrentPersonality, listPersonalityVersions, proposeUpdate, rejectProposal, rollbackPersonality, } from "./personality"; describe("personality api", () => { it("getCurrentPersonality GET /personality/current", async () => { vi.mocked(apiGet).mockResolvedValue({ id: "pv_1" }); await getCurrentPersonality({ character_id: "char_1" }); expect(apiGet).toHaveBeenCalledWith("/personality/current", { character_id: "char_1", }); }); it("proposeUpdate POST /personality/propose-update", async () => { vi.mocked(apiPost).mockResolvedValue({ id: "prop_1" }); await proposeUpdate({ fields: { expression_style: "简洁清晰" }, reason: "优化表达", }); expect(apiPost).toHaveBeenCalledWith("/personality/propose-update", { fields: { expression_style: "简洁清晰" }, reason: "优化表达", }); }); it("listPersonalityVersions GET /personality/versions", async () => { vi.mocked(apiGet).mockResolvedValue({ items: [], total: 0 }); await listPersonalityVersions({ page: 1, page_size: 20 }); expect(apiGet).toHaveBeenCalledWith("/personality/versions", { page: 1, page_size: 20, }); }); it("approveProposal POST /personality/proposals/:id/approve", async () => { vi.mocked(apiPost).mockResolvedValue({ id: "prop_1" }); await approveProposal("prop_1"); expect(apiPost).toHaveBeenCalledWith( "/personality/proposals/prop_1/approve", ); }); it("rejectProposal POST /personality/proposals/:id/reject", async () => { vi.mocked(apiPost).mockResolvedValue({ id: "prop_1" }); await rejectProposal("prop_1"); expect(apiPost).toHaveBeenCalledWith( "/personality/proposals/prop_1/reject", ); }); it("rollbackPersonality POST 带 query 参数", async () => { vi.mocked(apiRequest).mockResolvedValue({ id: "pv_1" }); await rollbackPersonality("pv_1", "char_1"); expect(apiRequest).toHaveBeenCalledWith( "/personality/versions/pv_1/rollback", { method: "POST", query: { character_id: "char_1" } }, ); }); });