From f0c2c11f8e312b4b6ed31c3c1444a23397239036 Mon Sep 17 00:00:00 2001 From: Lena Deriso Date: Wed, 7 Oct 2026 16:43:52 -0400 Subject: [PATCH] refactor pending or processing --- apps/api/src/orders/order-status.test.ts | 26 ++++++++++++++++++++++++ apps/api/src/orders/order-status.ts | 8 ++++++-- 2 files changed, 32 insertions(+), 2 deletions(-) create mode 100644 apps/api/src/orders/order-status.test.ts diff --git a/apps/api/src/orders/order-status.test.ts b/apps/api/src/orders/order-status.test.ts new file mode 100644 index 0000000..ac4b605 --- /dev/null +++ b/apps/api/src/orders/order-status.test.ts @@ -0,0 +1,26 @@ +import { describe, expect, test } from "bun:test"; +import { canCancelOrder, canEditOrderItems, canEditShippingAddress } from "./order-status"; + +describe("order status rules", () => { + const cases = [ + { status: "pending", editItems: true, editShipping: true, cancel: true }, + { status: "processing", editItems: false, editShipping: true, cancel: true }, + { status: "shipped", editItems: false, editShipping: false, cancel: false }, + { status: "cancelled", editItems: false, editShipping: false, cancel: false }, + { status: "refunded", editItems: false, editShipping: false, cancel: false } + ] as const; + + for (const { status, editItems, editShipping, cancel } of cases) { + test(`item editing is ${editItems ? "allowed" : "denied"} for ${status} orders`, () => { + expect(canEditOrderItems(status)).toBe(editItems); + }); + + test(`shipping address editing is ${editShipping ? "allowed" : "denied"} for ${status} orders`, () => { + expect(canEditShippingAddress(status)).toBe(editShipping); + }); + + test(`cancellation is ${cancel ? "allowed" : "denied"} for ${status} orders`, () => { + expect(canCancelOrder(status)).toBe(cancel); + }); + } +}); diff --git a/apps/api/src/orders/order-status.ts b/apps/api/src/orders/order-status.ts index 2272249..a967dce 100644 --- a/apps/api/src/orders/order-status.ts +++ b/apps/api/src/orders/order-status.ts @@ -1,13 +1,17 @@ import type { OrderStatus } from "@orderops/shared/order-status"; +function isPendingOrProcessing(status: OrderStatus) { + return status === "pending" || status === "processing"; +} + export function canEditOrderItems(status: OrderStatus) { return status === "pending"; } export function canEditShippingAddress(status: OrderStatus) { - return status === "pending" || status === "processing"; + return isPendingOrProcessing(status); } export function canCancelOrder(status: OrderStatus) { - return status === "pending" || status === "processing"; + return isPendingOrProcessing(status); } -- 2.54.0