feat(items): adapt item flows to inventory schema defaults and SKU generation

This commit is contained in:
2026-06-19 17:14:22 +02:00
parent 7b8a415c6a
commit 965a04a468
7 changed files with 306 additions and 19 deletions
+69
View File
@@ -10,6 +10,10 @@ const schemaCopy = {
nameRequired: "El nombre es obligatorio",
categoryRequired: "La categoría es obligatoria",
stockRequired: "El stock es obligatorio",
trackingTypeRequired: "El tipo de seguimiento es obligatorio",
invalidTrackingType: "Tipo de seguimiento inválido",
statusRequired: "El estado es obligatorio",
invalidStatus: "Estado inválido",
itemRequired: "El artículo es obligatorio",
}
@@ -31,6 +35,47 @@ describe("item schema localization", () => {
}
})
it("supports operational item fields with default tracking metadata", () => {
const result = buildCreateItemSchema(schemaCopy).safeParse({
name: "Laptop",
categoryId: "category-1",
stock: "2",
})
expect(result.success).toBe(true)
if (result.success) {
expect(result.data).toMatchObject({
name: "Laptop",
categoryId: "category-1",
stock: 2,
trackingType: "QUANTITY",
status: "ACTIVE",
})
}
})
it("accepts explicit operational item fields", () => {
const result = buildCreateItemSchema(schemaCopy).safeParse({
name: "Laptop",
categoryId: "category-1",
stock: "2",
trackingType: "SERIALIZED",
status: "DISCONTINUED",
minStock: "1",
targetStock: "5",
})
expect(result.success).toBe(true)
if (result.success) {
expect(result.data).toMatchObject({
trackingType: "SERIALIZED",
status: "DISCONTINUED",
minStock: 1,
targetStock: 5,
})
}
})
it("uses localized update identifier validation messages", () => {
const result = buildUpdateItemSchema(schemaCopy).safeParse({
id: "",
@@ -47,6 +92,30 @@ describe("item schema localization", () => {
}
})
it("allows operational item fields in update payloads", () => {
const result = buildUpdateItemSchema(schemaCopy).safeParse({
id: "item-1",
name: "Laptop",
categoryId: "category-1",
stock: 3,
trackingType: "SERIALIZED",
status: "ARCHIVED",
minStock: "2",
targetStock: "6",
})
expect(result.success).toBe(true)
if (result.success) {
expect(result.data).toMatchObject({
id: "item-1",
trackingType: "SERIALIZED",
status: "ARCHIVED",
minStock: 2,
targetStock: 6,
})
}
})
it("uses localized get-by-id validation messages", () => {
const result = buildGetItemByIdSchema(schemaCopy).safeParse({ id: "" })