Files
stock-manager/tests/unit/schemas/asset.schema.test.ts
T

88 lines
2.5 KiB
TypeScript

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)
})
})