WFDASH-WEBAPP/src/lib/server/order-completion.test.ts

85 lines
2.3 KiB
TypeScript
Raw Normal View History

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