Compare commits
1
Commits
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
f0c2c11f8e |
@@ -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";
|
||||
|
||||
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);
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user