- Add CachedOrder holdReasonCode/holdNote and ON_HOLD fulfillment status - Supplier UI: modal for hold reasons; vendor dashboard shows hold details - Sync to Shopify: native fulfillmentOrderHold (GraphQL) plus JUNO_ON_HOLD tag and juno.supplier_hold metafield; release holds when clearing - Preserve pending supplier fulfillment on webhook cache updates - Docker volume for gmail-reply-logos; settings note for API scopes Made-with: Cursor
27 lines
1.3 KiB
TypeScript
27 lines
1.3 KiB
TypeScript
import { describe, it, expect } from "vitest"
|
|
import {
|
|
shopifyFulfillmentHoldReason,
|
|
shopifyFulfillmentHoldNotes,
|
|
JUNO_FULFILLMENT_HOLD_HANDLE,
|
|
} from "@/lib/shopify/fulfillmentOrderHoldGraphql"
|
|
|
|
describe("fulfillmentOrderHoldGraphql", () => {
|
|
it("maps supplier codes to Shopify FulfillmentHoldReason", () => {
|
|
expect(shopifyFulfillmentHoldReason("inventory_out_of_stock")).toBe("INVENTORY_OUT_OF_STOCK")
|
|
expect(shopifyFulfillmentHoldReason("address_incorrect")).toBe("INCORRECT_ADDRESS")
|
|
expect(shopifyFulfillmentHoldReason("high_risk_fraud")).toBe("HIGH_RISK_OF_FRAUD")
|
|
expect(shopifyFulfillmentHoldReason("awaiting_payment")).toBe("AWAITING_PAYMENT")
|
|
expect(shopifyFulfillmentHoldReason("other")).toBe("OTHER")
|
|
})
|
|
|
|
it("builds reason notes for Shopify admin", () => {
|
|
expect(shopifyFulfillmentHoldNotes("inventory_out_of_stock", null)).toContain("Inventory out of stock")
|
|
expect(shopifyFulfillmentHoldNotes("other", " custom ")).toBe("custom")
|
|
expect(shopifyFulfillmentHoldNotes("awaiting_payment", "extra")).toContain("Awaiting payment")
|
|
})
|
|
|
|
it("uses stable hold handle for release targeting", () => {
|
|
expect(JUNO_FULFILLMENT_HOLD_HANDLE.length).toBeLessThanOrEqual(64)
|
|
})
|
|
})
|