import { describe, it, expect } from "vitest"; import { isOrderComplete } from "./order-completion"; import type { OrderItem } from "@/lib/types"; /** * Minimal OrderItem factory — only the field the helper reads * (`item_status`). Default `item_status = "pending"` so each test * only sets what it cares about. */ function item( partial: Partial & { item_status: OrderItem["item_status"] } ): OrderItem { return { id: "x", created: "", updated: "", collectionId: "", collectionName: "order_items", order: "o1", description: "d", po_description: "", quantity: 1, order_qty: 1, selling_price: 0, supplier: "", cost_price: 0, markup: 0, purchase_order: "", in_stock: false, notes: "", ...partial, }; } describe("isOrderComplete", () => { it("returns false for an empty items array (draft order)", () => { expect(isOrderComplete([])).toBe(false); }); it("returns false for null/undefined items", () => { expect(isOrderComplete(null as unknown as OrderItem[])).toBe(false); expect(isOrderComplete(undefined as unknown as OrderItem[])).toBe(false); }); it("returns false when any item is still pending", () => { expect( isOrderComplete([ item({ id: "a", item_status: "delivered" }), item({ id: "b", item_status: "pending" }), ]) ).toBe(false); }); it("returns false when items are mid-flow (collected, ready_delivery, etc.)", () => { expect( isOrderComplete([ item({ id: "a", item_status: "delivered" }), item({ id: "b", item_status: "ready_delivery" }), ]) ).toBe(false); }); it("returns false when an item is cancelled — even if the rest are delivered", () => { expect( isOrderComplete([ item({ id: "a", item_status: "delivered" }), item({ id: "b", item_status: "cancelled" }), ]) ).toBe(false); }); it("returns true when every item is delivered", () => { expect( isOrderComplete([ item({ id: "a", item_status: "delivered" }), item({ id: "b", item_status: "delivered" }), ]) ).toBe(true); }); it("returns true for a single delivered item", () => { expect(isOrderComplete([item({ item_status: "delivered" })])).toBe(true); }); });