import { describe, expect, it } from "vitest" import { buildCreateAssetSchema, buildUpdateAssetSchema, } from "@/schemas/asset.schema" const schemaCopy = { itemRequired: "El artículo es obligatorio", serialNumberRequired: "El número de serie es obligatorio", idRequired: "El activo es obligatorio", statusRequired: "El estado es obligatorio", invalidCreateStatus: "El estado inicial no es válido", invalidUpdateStatus: "El estado no es válido", } describe("asset schema localization", () => { it("uses localized create validation messages", () => { const result = buildCreateAssetSchema(schemaCopy).safeParse({ itemId: "", serialNumber: "", status: "BROKEN", }) expect(result.success).toBe(false) if (!result.success) { const errors = result.error.flatten().fieldErrors expect(errors.itemId).toContain(schemaCopy.itemRequired) expect(errors.serialNumber).toContain(schemaCopy.serialNumberRequired) expect(errors.status).toContain(schemaCopy.invalidCreateStatus) } }) it("uses localized update identifier and status validation messages", () => { const result = buildUpdateAssetSchema(schemaCopy).safeParse({ id: "", itemId: "item-1", serialNumber: "SERIAL-1", status: "UNSUPPORTED", }) expect(result.success).toBe(false) if (!result.success) { const errors = result.error.flatten().fieldErrors expect(errors.id).toContain(schemaCopy.idRequired) expect(errors.status).toContain(schemaCopy.invalidUpdateStatus) } }) it("preserves raw status values for accepted create and update payloads", () => { const createResult = buildCreateAssetSchema(schemaCopy).safeParse({ itemId: "item-1", serialNumber: "SERIAL-1", status: "ASSIGNED", recipientId: "recipient-1", }) expect(createResult.success).toBe(true) if (createResult.success) { expect(createResult.data.status).toBe("ASSIGNED") } const updateResult = buildUpdateAssetSchema(schemaCopy).safeParse({ id: "asset-1", itemId: "item-1", serialNumber: "SERIAL-1", status: "DISPOSED", }) expect(updateResult.success).toBe(true) if (updateResult.success) { expect(updateResult.data.status).toBe("DISPOSED") } }) it("keeps optional asset fields optional", () => { const result = buildCreateAssetSchema(schemaCopy).safeParse({ itemId: "item-1", serialNumber: "SERIAL-1", status: "AVAILABLE", }) expect(result.success).toBe(true) }) })