import { describe, expect, it } from "vitest" import { buildCreateAssignmentSchema, buildUpdateAssignmentSchema, } from "@/schemas/assignment.schema" const schemaCopy = { personRequired: "La persona es obligatoria", itemIdRequired: "El artículo es obligatorio", quantityMinOne: "La cantidad debe ser al menos 1", assetIdRequired: "El activo es obligatorio cuando se especifica el artículo", idRequired: "El ID de asignación es obligatorio", } describe("assignment schema localization", () => { it("uses localized create validation messages for missing required fields", () => { const result = buildCreateAssignmentSchema(schemaCopy).safeParse({ personId: "", quantity: 0, }) expect(result.success).toBe(false) if (!result.success) { const errors = result.error.flatten().fieldErrors expect(errors.personId).toContain(schemaCopy.personRequired) expect(errors.quantity).toContain(schemaCopy.quantityMinOne) } }) it("uses localized update validation messages for missing identifier and invalid item-asset combination", () => { const result = buildUpdateAssignmentSchema(schemaCopy).safeParse({ id: "", itemId: "item-1", personId: "person-1", quantity: 1, assetId: "", }) expect(result.success).toBe(false) if (!result.success) { const errors = result.error.flatten().fieldErrors expect(errors.id).toContain(schemaCopy.idRequired) expect(errors.assetId).toContain(schemaCopy.assetIdRequired) } }) it("preserves valid create and update payloads without errors", () => { const createResult = buildCreateAssignmentSchema(schemaCopy).safeParse({ personId: "person-1", itemId: "item-1", quantity: 2, }) expect(createResult.success).toBe(true) if (createResult.success) { expect(createResult.data.personId).toBe("person-1") expect(createResult.data.quantity).toBe(2) } const updateResult = buildUpdateAssignmentSchema(schemaCopy).safeParse({ id: "assignment-1", personId: "person-1", itemId: "item-1", assetId: "asset-1", quantity: 1, }) expect(updateResult.success).toBe(true) if (updateResult.success) { expect(updateResult.data.id).toBe("assignment-1") } }) it("keeps optional assignment fields optional in create", () => { const result = buildCreateAssignmentSchema(schemaCopy).safeParse({ personId: "person-1", quantity: 1, }) expect(result.success).toBe(true) }) it("allows update without itemId when no assetId is required", () => { const result = buildUpdateAssignmentSchema(schemaCopy).safeParse({ id: "assignment-1", personId: "person-1", quantity: 1, }) expect(result.success).toBe(true) if (result.success) { expect(result.data.id).toBe("assignment-1") } }) })