feat(drafts): DB drafts with deferred numbering — create-as-draft (no number), assign number on finalize (offers/invoices/issued-orders)
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
This commit is contained in:
@@ -120,7 +120,7 @@ describe("computeIssuedOrderTotals (NET + VAT-on-top)", () => {
|
||||
});
|
||||
|
||||
describe("createIssuedOrder", () => {
|
||||
it("assigns a PO number, defaults to draft, stores items", async () => {
|
||||
it("defaults to draft with NO PO number, stores items", async () => {
|
||||
const c = await makeCustomer();
|
||||
const order = await createIssuedOrder({
|
||||
customer_id: c.id,
|
||||
@@ -129,7 +129,8 @@ describe("createIssuedOrder", () => {
|
||||
],
|
||||
});
|
||||
createdIds.push(order.id);
|
||||
expect(order.po_number).toBeTruthy();
|
||||
// Deferred numbering: a draft carries no number.
|
||||
expect(order.po_number).toBeNull();
|
||||
expect(order.status).toBe("draft");
|
||||
const items = await prisma.issued_order_items.findMany({
|
||||
where: { issued_order_id: order.id },
|
||||
@@ -137,6 +138,14 @@ describe("createIssuedOrder", () => {
|
||||
expect(items.length).toBe(1);
|
||||
expect(Number(items[0].unit_price)).toBe(100);
|
||||
});
|
||||
|
||||
it("numbers immediately when created already-finalized (status sent)", async () => {
|
||||
const before = (await previewIssuedOrderNumber()).number;
|
||||
const order = await createIssuedOrder({ status: "sent" });
|
||||
createdIds.push(order.id);
|
||||
expect(order.po_number).toBe(before);
|
||||
expect(order.status).toBe("sent");
|
||||
});
|
||||
});
|
||||
|
||||
describe("updateIssuedOrder status transitions", () => {
|
||||
@@ -183,7 +192,10 @@ describe("deleteIssuedOrder", () => {
|
||||
const order = await createIssuedOrder({
|
||||
items: [{ description: "X", quantity: 1, unit_price: 1 }],
|
||||
});
|
||||
const before = order.po_number;
|
||||
// Finalize so the order has a real (consumed) number to free on delete.
|
||||
const finalized = await updateIssuedOrder(order.id, { status: "sent" });
|
||||
const before = "po_number" in finalized ? finalized.po_number : null;
|
||||
expect(before).toBeTruthy();
|
||||
await deleteIssuedOrder(order.id);
|
||||
expect(
|
||||
await prisma.issued_orders.findUnique({ where: { id: order.id } }),
|
||||
|
||||
Reference in New Issue
Block a user