@payloadcms/plugin-ecommerce 4.0.0-canary.35 → 4.0.0-canary.37

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (46) hide show
  1. package/dist/collections/carts/beforeChange.d.ts.map +1 -1
  2. package/dist/collections/carts/beforeChange.js +2 -0
  3. package/dist/collections/carts/beforeChange.js.map +1 -1
  4. package/dist/collections/variants/createVariantsCollection/hooks/beforeChange.d.ts.map +1 -1
  5. package/dist/collections/variants/createVariantsCollection/hooks/beforeChange.js +2 -0
  6. package/dist/collections/variants/createVariantsCollection/hooks/beforeChange.js.map +1 -1
  7. package/dist/collections/variants/createVariantsCollection/hooks/validateOptions.d.ts.map +1 -1
  8. package/dist/collections/variants/createVariantsCollection/hooks/validateOptions.js +1 -0
  9. package/dist/collections/variants/createVariantsCollection/hooks/validateOptions.js.map +1 -1
  10. package/dist/endpoints/confirmOrder.js +7 -0
  11. package/dist/endpoints/confirmOrder.js.map +1 -1
  12. package/dist/endpoints/initiatePayment.d.ts.map +1 -1
  13. package/dist/endpoints/initiatePayment.js +2 -0
  14. package/dist/endpoints/initiatePayment.js.map +1 -1
  15. package/dist/payments/adapters/stripe/confirmOrder.js +1 -0
  16. package/dist/payments/adapters/stripe/confirmOrder.js.map +1 -1
  17. package/dist/payments/adapters/stripe/initiatePayment.d.ts.map +1 -1
  18. package/dist/payments/adapters/stripe/initiatePayment.js +1 -0
  19. package/dist/payments/adapters/stripe/initiatePayment.js.map +1 -1
  20. package/dist/react/provider/index.d.ts.map +1 -1
  21. package/dist/react/provider/index.js +75 -34
  22. package/dist/react/provider/index.js.map +1 -1
  23. package/dist/ui/VariantOptionsSelector/index.d.ts.map +1 -1
  24. package/dist/ui/VariantOptionsSelector/index.js +3 -1
  25. package/dist/ui/VariantOptionsSelector/index.js.map +1 -1
  26. package/package.json +8 -8
  27. package/dist/collections/carts/operations/defaultCartItemMatcher.spec.js +0 -358
  28. package/dist/collections/carts/operations/defaultCartItemMatcher.spec.js.map +0 -1
  29. package/dist/collections/orders/createOrdersCollection.spec.js +0 -20
  30. package/dist/collections/orders/createOrdersCollection.spec.js.map +0 -1
  31. package/dist/endpoints/confirmOrder.spec.js +0 -509
  32. package/dist/endpoints/confirmOrder.spec.js.map +0 -1
  33. package/dist/fields/statusField.spec.js +0 -9
  34. package/dist/fields/statusField.spec.js.map +0 -1
  35. package/dist/payments/adapters/stripe/confirmOrder.spec.js +0 -255
  36. package/dist/payments/adapters/stripe/confirmOrder.spec.js.map +0 -1
  37. package/dist/payments/adapters/stripe/validateSettlement.spec.js +0 -434
  38. package/dist/payments/adapters/stripe/validateSettlement.spec.js.map +0 -1
  39. package/dist/utilities/accessComposition.spec.js +0 -765
  40. package/dist/utilities/accessComposition.spec.js.map +0 -1
  41. package/dist/utilities/defaultProductsValidation.spec.js +0 -384
  42. package/dist/utilities/defaultProductsValidation.spec.js.map +0 -1
  43. package/dist/utilities/getCollectionSlugMap.spec.js +0 -254
  44. package/dist/utilities/getCollectionSlugMap.spec.js.map +0 -1
  45. package/dist/utilities/sanitizePluginConfig.spec.js +0 -516
  46. package/dist/utilities/sanitizePluginConfig.spec.js.map +0 -1
@@ -1,255 +0,0 @@
1
- import { beforeEach, describe, expect, it, vi } from 'vitest';
2
- const mockPaymentIntentsRetrieve = vi.fn();
3
- vi.mock('stripe', ()=>{
4
- const MockStripe = function() {
5
- return {
6
- paymentIntents: {
7
- retrieve: mockPaymentIntentsRetrieve
8
- }
9
- };
10
- };
11
- return {
12
- default: MockStripe
13
- };
14
- });
15
- import { confirmOrder } from './confirmOrder.js';
16
- const createTransaction = (overrides = {})=>({
17
- amount: 1000,
18
- cart: 'cart-123',
19
- currency: 'USD',
20
- customer: 'user-123',
21
- id: 'txn-123',
22
- items: [
23
- {
24
- id: 'item-1',
25
- product: 'product-123',
26
- quantity: 1
27
- }
28
- ],
29
- order: undefined,
30
- status: 'pending',
31
- stripe: {
32
- customerID: 'cus-123',
33
- paymentIntentID: 'pi_123'
34
- },
35
- ...overrides
36
- });
37
- const createPaymentIntent = (overrides = {})=>({
38
- amount: 1000,
39
- currency: 'usd',
40
- customer: 'cus-123',
41
- id: 'pi_123',
42
- metadata: {
43
- cartID: 'cart-123',
44
- cartItemsSnapshot: JSON.stringify([
45
- {
46
- id: 'item-1',
47
- product: 'product-123',
48
- quantity: 1
49
- }
50
- ]),
51
- shippingAddress: JSON.stringify({
52
- city: 'Test City'
53
- })
54
- },
55
- status: 'succeeded',
56
- ...overrides
57
- });
58
- const createHarness = ({ transaction = createTransaction(), transactionCopies = 1, user = {
59
- id: 'user-123'
60
- } } = {})=>{
61
- const find = vi.fn().mockResolvedValue({
62
- docs: Array.from({
63
- length: transactionCopies
64
- }, ()=>transaction),
65
- totalDocs: transactionCopies
66
- });
67
- const loggerError = vi.fn();
68
- const finalizeOrder = vi.fn().mockResolvedValue({
69
- accessToken: 'access-123',
70
- id: 'order-123'
71
- });
72
- const req = {
73
- payload: {
74
- find,
75
- logger: {
76
- error: loggerError
77
- }
78
- },
79
- user
80
- };
81
- return {
82
- finalizeOrder,
83
- find,
84
- loggerError,
85
- req
86
- };
87
- };
88
- const runConfirmation = ({ data = {}, harness })=>confirmOrder({
89
- secretKey: 'sk_test_123'
90
- })({
91
- data: {
92
- cartID: 'cart-123',
93
- customerEmail: 'buyer@example.com',
94
- paymentIntentID: 'pi_123',
95
- ...data
96
- },
97
- finalizeOrder: harness.finalizeOrder,
98
- req: harness.req
99
- });
100
- describe('confirmOrder', ()=>{
101
- beforeEach(()=>{
102
- vi.clearAllMocks();
103
- mockPaymentIntentsRetrieve.mockResolvedValue(createPaymentIntent());
104
- });
105
- it('should delegate provider-validated settlement data to the core finalizer', async ()=>{
106
- const harness = createHarness();
107
- const result = await runConfirmation({
108
- harness
109
- });
110
- expect(harness.finalizeOrder).toHaveBeenCalledWith({
111
- orderData: {
112
- amount: 1000,
113
- currency: 'USD',
114
- customer: 'user-123',
115
- items: [
116
- {
117
- id: 'item-1',
118
- product: 'product-123',
119
- quantity: 1
120
- }
121
- ],
122
- shippingAddress: {
123
- city: 'Test City'
124
- },
125
- status: 'processing'
126
- },
127
- transactionID: 'txn-123'
128
- });
129
- expect(result).toEqual({
130
- accessToken: 'access-123',
131
- message: 'Payment initiated successfully',
132
- orderID: 'order-123',
133
- transactionID: 'txn-123'
134
- });
135
- });
136
- it('should return the transaction ID again when the core finalizer returns an existing order', async ()=>{
137
- const harness = createHarness();
138
- harness.finalizeOrder.mockResolvedValue({
139
- accessToken: 'existing-access',
140
- id: 'existing-order'
141
- });
142
- const result = await runConfirmation({
143
- harness
144
- });
145
- expect(result).toEqual({
146
- accessToken: 'existing-access',
147
- message: 'Payment initiated successfully',
148
- orderID: 'existing-order',
149
- transactionID: 'txn-123'
150
- });
151
- });
152
- it('should delegate guest order ownership using the validated email', async ()=>{
153
- const harness = createHarness({
154
- transaction: createTransaction({
155
- customer: undefined,
156
- customerEmail: 'buyer@example.com',
157
- stripe: {
158
- customerID: 'cus-guest',
159
- paymentIntentID: 'pi_123'
160
- }
161
- }),
162
- user: null
163
- });
164
- mockPaymentIntentsRetrieve.mockResolvedValue(createPaymentIntent({
165
- customer: 'cus-guest'
166
- }));
167
- await runConfirmation({
168
- harness
169
- });
170
- expect(harness.finalizeOrder).toHaveBeenCalledWith({
171
- orderData: expect.objectContaining({
172
- customerEmail: 'buyer@example.com'
173
- }),
174
- transactionID: 'txn-123'
175
- });
176
- });
177
- it.each([
178
- 'requires_payment_method',
179
- 'canceled',
180
- 'processing'
181
- ])('should reject a PaymentIntent with %s status before finalization', async (status)=>{
182
- const harness = createHarness();
183
- mockPaymentIntentsRetrieve.mockResolvedValue(createPaymentIntent({
184
- status
185
- }));
186
- await expect(runConfirmation({
187
- harness
188
- })).rejects.toThrow('Payment not completed.');
189
- expect(harness.finalizeOrder).not.toHaveBeenCalled();
190
- });
191
- it('should reject multiple matching transactions before finalization', async ()=>{
192
- const harness = createHarness({
193
- transactionCopies: 2
194
- });
195
- await expect(runConfirmation({
196
- harness
197
- })).rejects.toThrow('exactly one transaction');
198
- expect(mockPaymentIntentsRetrieve).not.toHaveBeenCalled();
199
- expect(harness.finalizeOrder).not.toHaveBeenCalled();
200
- });
201
- it('should reject a transaction that does not belong to the canonical cart', async ()=>{
202
- const harness = createHarness({
203
- transaction: createTransaction({
204
- cart: 'cart-other'
205
- })
206
- });
207
- await expect(runConfirmation({
208
- harness
209
- })).rejects.toThrow('cart');
210
- expect(harness.finalizeOrder).not.toHaveBeenCalled();
211
- });
212
- it('should reject provider amount drift before finalization', async ()=>{
213
- const harness = createHarness();
214
- mockPaymentIntentsRetrieve.mockResolvedValue(createPaymentIntent({
215
- amount: 999
216
- }));
217
- await expect(runConfirmation({
218
- harness
219
- })).rejects.toThrow('amount');
220
- expect(harness.finalizeOrder).not.toHaveBeenCalled();
221
- });
222
- it('should reject provider item drift before finalization', async ()=>{
223
- const harness = createHarness();
224
- mockPaymentIntentsRetrieve.mockResolvedValue(createPaymentIntent({
225
- metadata: {
226
- ...createPaymentIntent().metadata,
227
- cartItemsSnapshot: JSON.stringify([
228
- {
229
- id: 'item-1',
230
- product: 'product-123',
231
- quantity: 2
232
- }
233
- ])
234
- }
235
- }));
236
- await expect(runConfirmation({
237
- harness
238
- })).rejects.toThrow('items');
239
- expect(harness.finalizeOrder).not.toHaveBeenCalled();
240
- });
241
- it('should log and propagate finalization failures', async ()=>{
242
- const harness = createHarness();
243
- const error = new Error('inventory update failed');
244
- harness.finalizeOrder.mockRejectedValue(error);
245
- await expect(runConfirmation({
246
- harness
247
- })).rejects.toThrow(error.message);
248
- expect(harness.loggerError).toHaveBeenCalledWith({
249
- err: error,
250
- msg: 'Error confirming order with Stripe'
251
- });
252
- });
253
- });
254
-
255
- //# sourceMappingURL=confirmOrder.spec.js.map
@@ -1 +0,0 @@
1
- {"version":3,"sources":["../../../../src/payments/adapters/stripe/confirmOrder.spec.ts"],"sourcesContent":["import { beforeEach, describe, expect, it, vi } from 'vitest'\n\nconst mockPaymentIntentsRetrieve = vi.fn()\n\nvi.mock('stripe', () => {\n const MockStripe = function () {\n return {\n paymentIntents: {\n retrieve: mockPaymentIntentsRetrieve,\n },\n }\n }\n\n return { default: MockStripe }\n})\n\nimport { confirmOrder } from './confirmOrder.js'\n\ntype ConfirmOrderArgs = Parameters<ReturnType<typeof confirmOrder>>[0]\n\nconst createTransaction = (overrides: Record<string, unknown> = {}) => ({\n amount: 1000,\n cart: 'cart-123',\n currency: 'USD',\n customer: 'user-123',\n id: 'txn-123',\n items: [{ id: 'item-1', product: 'product-123', quantity: 1 }],\n order: undefined,\n status: 'pending',\n stripe: {\n customerID: 'cus-123',\n paymentIntentID: 'pi_123',\n },\n ...overrides,\n})\n\nconst createPaymentIntent = (overrides: Record<string, unknown> = {}) => ({\n amount: 1000,\n currency: 'usd',\n customer: 'cus-123',\n id: 'pi_123',\n metadata: {\n cartID: 'cart-123',\n cartItemsSnapshot: JSON.stringify([{ id: 'item-1', product: 'product-123', quantity: 1 }]),\n shippingAddress: JSON.stringify({ city: 'Test City' }),\n },\n status: 'succeeded',\n ...overrides,\n})\n\nconst createHarness = ({\n transaction = createTransaction(),\n transactionCopies = 1,\n user = { id: 'user-123' } as null | Record<string, unknown>,\n}: {\n transaction?: Record<string, unknown>\n transactionCopies?: number\n user?: null | Record<string, unknown>\n} = {}) => {\n const find = vi.fn().mockResolvedValue({\n docs: Array.from({ length: transactionCopies }, () => transaction),\n totalDocs: transactionCopies,\n })\n const loggerError = vi.fn()\n const finalizeOrder = vi.fn().mockResolvedValue({ accessToken: 'access-123', id: 'order-123' })\n const req = {\n payload: {\n find,\n logger: { error: loggerError },\n },\n user,\n } as unknown as ConfirmOrderArgs['req']\n\n return { finalizeOrder, find, loggerError, req }\n}\n\nconst runConfirmation = ({\n data = {},\n harness,\n}: {\n data?: Record<string, unknown>\n harness: ReturnType<typeof createHarness>\n}) =>\n confirmOrder({ secretKey: 'sk_test_123' })({\n data: {\n cartID: 'cart-123',\n customerEmail: 'buyer@example.com',\n paymentIntentID: 'pi_123',\n ...data,\n },\n finalizeOrder: harness.finalizeOrder,\n req: harness.req,\n })\n\ndescribe('confirmOrder', () => {\n beforeEach(() => {\n vi.clearAllMocks()\n mockPaymentIntentsRetrieve.mockResolvedValue(createPaymentIntent())\n })\n\n it('should delegate provider-validated settlement data to the core finalizer', async () => {\n const harness = createHarness()\n\n const result = await runConfirmation({ harness })\n\n expect(harness.finalizeOrder).toHaveBeenCalledWith({\n orderData: {\n amount: 1000,\n currency: 'USD',\n customer: 'user-123',\n items: [{ id: 'item-1', product: 'product-123', quantity: 1 }],\n shippingAddress: { city: 'Test City' },\n status: 'processing',\n },\n transactionID: 'txn-123',\n })\n expect(result).toEqual({\n accessToken: 'access-123',\n message: 'Payment initiated successfully',\n orderID: 'order-123',\n transactionID: 'txn-123',\n })\n })\n\n it('should return the transaction ID again when the core finalizer returns an existing order', async () => {\n const harness = createHarness()\n harness.finalizeOrder.mockResolvedValue({\n accessToken: 'existing-access',\n id: 'existing-order',\n })\n\n const result = await runConfirmation({ harness })\n\n expect(result).toEqual({\n accessToken: 'existing-access',\n message: 'Payment initiated successfully',\n orderID: 'existing-order',\n transactionID: 'txn-123',\n })\n })\n\n it('should delegate guest order ownership using the validated email', async () => {\n const harness = createHarness({\n transaction: createTransaction({\n customer: undefined,\n customerEmail: 'buyer@example.com',\n stripe: {\n customerID: 'cus-guest',\n paymentIntentID: 'pi_123',\n },\n }),\n user: null,\n })\n mockPaymentIntentsRetrieve.mockResolvedValue(createPaymentIntent({ customer: 'cus-guest' }))\n\n await runConfirmation({ harness })\n\n expect(harness.finalizeOrder).toHaveBeenCalledWith({\n orderData: expect.objectContaining({ customerEmail: 'buyer@example.com' }),\n transactionID: 'txn-123',\n })\n })\n\n it.each(['requires_payment_method', 'canceled', 'processing'])(\n 'should reject a PaymentIntent with %s status before finalization',\n async (status) => {\n const harness = createHarness()\n mockPaymentIntentsRetrieve.mockResolvedValue(createPaymentIntent({ status }))\n\n await expect(runConfirmation({ harness })).rejects.toThrow('Payment not completed.')\n\n expect(harness.finalizeOrder).not.toHaveBeenCalled()\n },\n )\n\n it('should reject multiple matching transactions before finalization', async () => {\n const harness = createHarness({ transactionCopies: 2 })\n\n await expect(runConfirmation({ harness })).rejects.toThrow('exactly one transaction')\n\n expect(mockPaymentIntentsRetrieve).not.toHaveBeenCalled()\n expect(harness.finalizeOrder).not.toHaveBeenCalled()\n })\n\n it('should reject a transaction that does not belong to the canonical cart', async () => {\n const harness = createHarness({\n transaction: createTransaction({ cart: 'cart-other' }),\n })\n\n await expect(runConfirmation({ harness })).rejects.toThrow('cart')\n\n expect(harness.finalizeOrder).not.toHaveBeenCalled()\n })\n\n it('should reject provider amount drift before finalization', async () => {\n const harness = createHarness()\n mockPaymentIntentsRetrieve.mockResolvedValue(createPaymentIntent({ amount: 999 }))\n\n await expect(runConfirmation({ harness })).rejects.toThrow('amount')\n\n expect(harness.finalizeOrder).not.toHaveBeenCalled()\n })\n\n it('should reject provider item drift before finalization', async () => {\n const harness = createHarness()\n mockPaymentIntentsRetrieve.mockResolvedValue(\n createPaymentIntent({\n metadata: {\n ...createPaymentIntent().metadata,\n cartItemsSnapshot: JSON.stringify([\n { id: 'item-1', product: 'product-123', quantity: 2 },\n ]),\n },\n }),\n )\n\n await expect(runConfirmation({ harness })).rejects.toThrow('items')\n\n expect(harness.finalizeOrder).not.toHaveBeenCalled()\n })\n\n it('should log and propagate finalization failures', async () => {\n const harness = createHarness()\n const error = new Error('inventory update failed')\n harness.finalizeOrder.mockRejectedValue(error)\n\n await expect(runConfirmation({ harness })).rejects.toThrow(error.message)\n\n expect(harness.loggerError).toHaveBeenCalledWith({\n err: error,\n msg: 'Error confirming order with Stripe',\n })\n })\n})\n"],"names":["beforeEach","describe","expect","it","vi","mockPaymentIntentsRetrieve","fn","mock","MockStripe","paymentIntents","retrieve","default","confirmOrder","createTransaction","overrides","amount","cart","currency","customer","id","items","product","quantity","order","undefined","status","stripe","customerID","paymentIntentID","createPaymentIntent","metadata","cartID","cartItemsSnapshot","JSON","stringify","shippingAddress","city","createHarness","transaction","transactionCopies","user","find","mockResolvedValue","docs","Array","from","length","totalDocs","loggerError","finalizeOrder","accessToken","req","payload","logger","error","runConfirmation","data","harness","secretKey","customerEmail","clearAllMocks","result","toHaveBeenCalledWith","orderData","transactionID","toEqual","message","orderID","objectContaining","each","rejects","toThrow","not","toHaveBeenCalled","Error","mockRejectedValue","err","msg"],"mappings":"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"}