import { describe, expect, it } from "vitest" import { buildCreatePersonSchema, buildUpdatePersonSchema, } from "@/schemas/person.schema" const schemaCopy = { firstNameRequired: "El nombre es obligatorio", lastNameRequired: "El apellido es obligatorio", departmentRequired: "El departamento es obligatorio", emailInvalid: "El correo electrónico no es válido", idRequired: "El ID es obligatorio", userIdInvalid: "El ID de usuario debe ser un UUID válido", } describe("person schema validation", () => { it("uses localized required-field validation messages for create (no username)", () => { const result = buildCreatePersonSchema(schemaCopy).safeParse({ firstName: "", lastName: "", department: "", }) expect(result.success).toBe(false) if (!result.success) { const errors = result.error.flatten().fieldErrors expect(errors.firstName).toContain(schemaCopy.firstNameRequired) expect(errors.lastName).toContain(schemaCopy.lastNameRequired) expect(errors.department).toContain(schemaCopy.departmentRequired) } }) it("uses a localized invalid email message for create", () => { const result = buildCreatePersonSchema(schemaCopy).safeParse({ firstName: "Ada", lastName: "Lovelace", department: "ENGINEERING", email: "not-an-email", }) expect(result.success).toBe(false) if (!result.success) { expect(result.error.flatten().fieldErrors.email).toContain( schemaCopy.emailInvalid, ) } }) it("uses a localized invalid userId message for create with non-UUID", () => { const result = buildCreatePersonSchema(schemaCopy).safeParse({ firstName: "Ada", lastName: "Lovelace", department: "ENGINEERING", userId: "not-a-uuid", }) expect(result.success).toBe(false) if (!result.success) { expect(result.error.flatten().fieldErrors.userId).toContain( schemaCopy.userIdInvalid, ) } }) it("uses localized update identifier validation messages", () => { const result = buildUpdatePersonSchema(schemaCopy).safeParse({ id: "", firstName: "Ada", lastName: "Lovelace", department: "ENGINEERING", email: "ada@example.test", }) expect(result.success).toBe(false) if (!result.success) { expect(result.error.flatten().fieldErrors.id).toContain( schemaCopy.idRequired, ) } }) it("preserves canonical department values and accepts optional userId UUID", () => { const result = buildCreatePersonSchema(schemaCopy).safeParse({ firstName: "Ada", lastName: "Lovelace", department: "ENGINEERING", email: "", userId: "550e8400-e29b-41d4-a716-446655440000", }) expect(result.success).toBe(true) if (result.success) { expect(result.data.department).toBe("ENGINEERING") expect(result.data.email).toBe("") expect(result.data.userId).toBe("550e8400-e29b-41d4-a716-446655440000") } }) it("accepts create without username field (removed from schema)", () => { const result = buildCreatePersonSchema(schemaCopy).safeParse({ firstName: "Ada", lastName: "Lovelace", department: "ENGINEERING", }) expect(result.success).toBe(true) if (result.success) { expect("username" in result.data).toBe(false) } }) })