feat(i18n): localize assignment validation messages

This commit is contained in:
2026-06-15 01:15:24 +02:00
parent bfea2b77ab
commit 349559f4e0
12 changed files with 446 additions and 67 deletions
@@ -0,0 +1,98 @@
import { describe, expect, it } from "vitest"
import {
buildCreateAssignmentSchema,
buildUpdateAssignmentSchema,
} from "@/schemas/assignment.schema"
const schemaCopy = {
recipientRequired: "El destinatario es obligatorio",
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({
recipientId: "",
quantity: 0,
})
expect(result.success).toBe(false)
if (!result.success) {
const errors = result.error.flatten().fieldErrors
expect(errors.recipientId).toContain(schemaCopy.recipientRequired)
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",
recipientId: "recipient-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({
recipientId: "recipient-1",
itemId: "item-1",
quantity: 2,
})
expect(createResult.success).toBe(true)
if (createResult.success) {
expect(createResult.data.recipientId).toBe("recipient-1")
expect(createResult.data.quantity).toBe(2)
}
const updateResult = buildUpdateAssignmentSchema(schemaCopy).safeParse({
id: "assignment-1",
recipientId: "recipient-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({
recipientId: "recipient-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",
recipientId: "recipient-1",
quantity: 1,
})
expect(result.success).toBe(true)
if (result.success) {
expect(result.data.id).toBe("assignment-1")
}
})
})