import { describe, it, expect } from "vitest"; import { CreateQuotationSchema } from "../schemas/offers.schema"; import { CreateInvoiceSchema } from "../schemas/invoices.schema"; /** * The per-item Sleva is a percentage: the offer- and invoice-item schemas must * accept 0–100, default to 0 when absent, and reject out-of-range values. */ describe("offer item discount schema", () => { it("accepts a 0–100 discount", () => { const r = CreateQuotationSchema.safeParse({ items: [{ description: "X", quantity: 1, unit_price: 100, discount: 15 }], }); expect(r.success).toBe(true); expect(r.success && r.data.items?.[0].discount).toBe(15); }); it("defaults discount to 0 when absent", () => { const r = CreateQuotationSchema.safeParse({ items: [{ description: "X", quantity: 1, unit_price: 100 }], }); expect(r.success && r.data.items?.[0].discount).toBe(0); }); it("rejects a discount above 100", () => { const r = CreateQuotationSchema.safeParse({ items: [ { description: "X", quantity: 1, unit_price: 100, discount: 150 }, ], }); expect(r.success).toBe(false); }); }); describe("invoice item discount schema", () => { it("accepts a 0–100 discount and defaults to 0", () => { const ok = CreateInvoiceSchema.safeParse({ items: [{ description: "X", quantity: 1, unit_price: 100, discount: 10 }], }); expect(ok.success && ok.data.items?.[0].discount).toBe(10); const def = CreateInvoiceSchema.safeParse({ items: [{ description: "X", quantity: 1, unit_price: 100 }], }); expect(def.success && def.data.items?.[0].discount).toBe(0); }); it("rejects a negative discount", () => { const r = CreateInvoiceSchema.safeParse({ items: [{ description: "X", quantity: 1, unit_price: 100, discount: -5 }], }); expect(r.success).toBe(false); }); });