feat(i18n): localize recipient validation messages

This commit is contained in:
2026-06-14 22:41:20 +02:00
parent c0ae7a034a
commit 9b713c42e2
13 changed files with 525 additions and 51 deletions
@@ -0,0 +1,87 @@
import { describe, expect, it } from "vitest"
import {
buildCreateRecipientSchema,
buildUpdateRecipientSchema,
} from "@/schemas/recipient.schema"
const schemaCopy = {
usernameRequired: "El usuario es obligatorio",
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",
}
describe("recipient schema localization", () => {
it("uses localized required-field validation messages for create", () => {
const result = buildCreateRecipientSchema(schemaCopy).safeParse({
username: "",
firstName: "",
lastName: "",
department: "",
})
expect(result.success).toBe(false)
if (!result.success) {
const errors = result.error.flatten().fieldErrors
expect(errors.username).toContain(schemaCopy.usernameRequired)
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 = buildCreateRecipientSchema(schemaCopy).safeParse({
username: "ada",
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 localized update identifier validation messages", () => {
const result = buildUpdateRecipientSchema(schemaCopy).safeParse({
id: "",
username: "ada",
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 optional empty email semantics", () => {
const result = buildCreateRecipientSchema(schemaCopy).safeParse({
username: "ada",
firstName: "Ada",
lastName: "Lovelace",
department: "ENGINEERING",
email: "",
})
expect(result.success).toBe(true)
if (result.success) {
expect(result.data.department).toBe("ENGINEERING")
expect(result.data.email).toBe("")
}
})
})