refactor pending or processing #23
@@ -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);
|
||||||
|
});
|
||||||
|
}
|
||||||
|
});
|
||||||
@@ -1,13 +1,17 @@
|
|||||||
import type { OrderStatus } from "@orderops/shared/order-status";
|
import type { OrderStatus } from "@orderops/shared/order-status";
|
||||||
|
|
||||||
|
function isPendingOrProcessing(status: OrderStatus) {
|
||||||
|
return status === "pending" || status === "processing";
|
||||||
|
}
|
||||||
|
|
||||||
export function canEditOrderItems(status: OrderStatus) {
|
export function canEditOrderItems(status: OrderStatus) {
|
||||||
return status === "pending";
|
return status === "pending";
|
||||||
}
|
}
|
||||||
|
|
||||||
export function canEditShippingAddress(status: OrderStatus) {
|
export function canEditShippingAddress(status: OrderStatus) {
|
||||||
return status === "pending" || status === "processing";
|
return isPendingOrProcessing(status);
|
||||||
}
|
}
|
||||||
|
|
||||||
export function canCancelOrder(status: OrderStatus) {
|
export function canCancelOrder(status: OrderStatus) {
|
||||||
return status === "pending" || status === "processing";
|
return isPendingOrProcessing(status);
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user