import { describe, expect, it } from "vitest"; import { TagMaintenanceRequestSchema } from "./validations"; describe("TagMaintenanceRequestSchema", () => { const apiKey = "k".repeat(32); it("accepts empty updates and merges", () => { const result = TagMaintenanceRequestSchema.safeParse({ apiKey, updates: [], merges: [], }); expect(result.success).toBe(true); }); it("rejects duplicate update tag IDs", () => { const result = TagMaintenanceRequestSchema.safeParse({ apiKey, updates: [ { tagId: "tag-1", nameEn: "Tag 1" }, { tagId: "tag-1", nameEn: "Tag One" }, ], merges: [], }); expect(result.success).toBe(false); expect(result.error?.errors[0]?.message).toContain("Duplicate update tag ID"); }); it("rejects self merge", () => { const result = TagMaintenanceRequestSchema.safeParse({ apiKey, updates: [], merges: [ { target: { id: "tag-1" }, sourceTagIds: ["tag-1", "tag-2"], }, ], }); expect(result.success).toBe(false); expect(result.error?.errors[0]?.message).toContain("Self merge is not allowed"); }); it("rejects one source tag used in multiple merges", () => { const result = TagMaintenanceRequestSchema.safeParse({ apiKey, updates: [], merges: [ { target: { id: "target-1" }, sourceTagIds: ["source-1"], }, { target: { id: "target-2" }, sourceTagIds: ["source-1"], }, ], }); expect(result.success).toBe(false); expect(result.error?.errors[0]?.message).toContain("Source tag ID appears in multiple merges"); }); });