JUNOHUB-test/src/lib/shopify/fulfillmentOrderHoldGraphql.test.ts
talatops 6d45f6ec66 feat(supplier): on-hold reasons, Shopify fulfillment holds, tag + metafield
- 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
2026-04-12 17:14:23 +05:00

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)
})
})