85 lines
2.3 KiB
TypeScript
85 lines
2.3 KiB
TypeScript
|
|
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<OrderItem> & { 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);
|
||
|
|
});
|
||
|
|
});
|