67 lines
1.7 KiB
TypeScript
67 lines
1.7 KiB
TypeScript
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");
|
|
});
|
|
});
|