@labdigital/commercetools-mock 2.65.1 → 3.0.0-beta.0
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.
- package/README.md +31 -8
- package/dist/abstract-BKFcva6S.mjs +1044 -0
- package/dist/abstract-BKFcva6S.mjs.map +1 -0
- package/dist/config-BcNSzPZz.d.mts +1718 -0
- package/dist/index.d.mts +50 -1633
- package/dist/index.mjs +3771 -2654
- package/dist/index.mjs.map +1 -1
- package/dist/storage/sqlite.d.mts +59 -0
- package/dist/storage/sqlite.mjs +234 -0
- package/dist/storage/sqlite.mjs.map +1 -0
- package/package.json +26 -29
- package/src/ctMock.ts +125 -136
- package/src/helpers.ts +14 -6
- package/src/index.ts +5 -0
- package/src/lib/masking.ts +4 -5
- package/src/lib/product-review-statistics.test.ts +257 -294
- package/src/lib/review-statistics.ts +17 -4
- package/src/oauth/helpers.ts +7 -4
- package/src/oauth/server.test.ts +102 -62
- package/src/oauth/server.ts +215 -213
- package/src/oauth/store.ts +20 -6
- package/src/orderSearch.ts +3 -3
- package/src/product-projection-search.ts +38 -20
- package/src/product-search-availability.test.ts +31 -52
- package/src/product-search.ts +19 -10
- package/src/projectAPI.ts +6 -22
- package/src/repositories/abstract.ts +182 -48
- package/src/repositories/as-associate.test.ts +19 -19
- package/src/repositories/associate-role.ts +12 -23
- package/src/repositories/attribute-group.test.ts +23 -23
- package/src/repositories/attribute-group.ts +6 -4
- package/src/repositories/business-unit.test.ts +63 -57
- package/src/repositories/business-unit.ts +107 -55
- package/src/repositories/cart/actions.ts +96 -65
- package/src/repositories/cart/helpers.ts +15 -11
- package/src/repositories/cart/index.test.ts +136 -30
- package/src/repositories/cart/index.ts +76 -59
- package/src/repositories/cart-discount/actions.ts +12 -44
- package/src/repositories/cart-discount/index.ts +20 -8
- package/src/repositories/category/actions.ts +27 -27
- package/src/repositories/category/index.test.ts +13 -9
- package/src/repositories/category/index.ts +40 -23
- package/src/repositories/channel.test.ts +53 -51
- package/src/repositories/channel.ts +12 -22
- package/src/repositories/custom-object.ts +34 -25
- package/src/repositories/customer/actions.ts +47 -25
- package/src/repositories/customer/index.test.ts +11 -11
- package/src/repositories/customer/index.ts +65 -35
- package/src/repositories/customer-group.test.ts +44 -42
- package/src/repositories/customer-group.ts +12 -22
- package/src/repositories/discount-code/actions.ts +3 -19
- package/src/repositories/discount-code/index.ts +9 -4
- package/src/repositories/discount-group/index.ts +8 -3
- package/src/repositories/extension.test.ts +27 -27
- package/src/repositories/extension.ts +10 -5
- package/src/repositories/helpers.ts +126 -47
- package/src/repositories/inventory-entry/actions.ts +3 -24
- package/src/repositories/inventory-entry/index.ts +19 -11
- package/src/repositories/my-customer.ts +13 -12
- package/src/repositories/my-order.ts +5 -2
- package/src/repositories/order/actions.ts +89 -56
- package/src/repositories/order/index.test.ts +36 -31
- package/src/repositories/order/index.ts +83 -49
- package/src/repositories/order-edit.ts +8 -3
- package/src/repositories/payment/actions.ts +64 -44
- package/src/repositories/payment/helpers.ts +3 -3
- package/src/repositories/payment/index.ts +28 -12
- package/src/repositories/product/actions.ts +133 -98
- package/src/repositories/product/helpers.ts +29 -16
- package/src/repositories/product/index.ts +42 -25
- package/src/repositories/product-discount.ts +6 -4
- package/src/repositories/product-projection.ts +41 -21
- package/src/repositories/product-selection.ts +8 -15
- package/src/repositories/product-tailoring.ts +22 -3
- package/src/repositories/product-type.ts +45 -4
- package/src/repositories/project.ts +57 -13
- package/src/repositories/quote/actions.ts +5 -28
- package/src/repositories/quote/index.ts +29 -6
- package/src/repositories/quote-request/actions.ts +5 -28
- package/src/repositories/quote-request/index.test.ts +3 -3
- package/src/repositories/quote-request/index.ts +31 -11
- package/src/repositories/quote-staged/actions.ts +5 -28
- package/src/repositories/quote-staged/index.ts +22 -8
- package/src/repositories/recurrence-policy/index.ts +6 -4
- package/src/repositories/recurring-order/actions.ts +7 -32
- package/src/repositories/recurring-order/index.ts +8 -6
- package/src/repositories/review.test.ts +147 -142
- package/src/repositories/review.ts +31 -37
- package/src/repositories/shipping-method/actions.ts +11 -28
- package/src/repositories/shipping-method/index.ts +26 -15
- package/src/repositories/shopping-list/actions.ts +21 -31
- package/src/repositories/shopping-list/index.ts +44 -22
- package/src/repositories/standalone-price.ts +6 -4
- package/src/repositories/state.ts +15 -9
- package/src/repositories/store.ts +21 -32
- package/src/repositories/subscription.test.ts +22 -22
- package/src/repositories/subscription.ts +8 -3
- package/src/repositories/tax-category/index.ts +8 -3
- package/src/repositories/type/actions.ts +21 -3
- package/src/repositories/type/index.ts +5 -3
- package/src/repositories/zone.test.ts +112 -77
- package/src/repositories/zone.ts +5 -3
- package/src/schemas/generated/associate-role.ts +13 -0
- package/src/schemas/generated/attribute-group.ts +12 -0
- package/src/schemas/generated/business-unit.ts +38 -0
- package/src/schemas/generated/cart-discount.ts +33 -0
- package/src/schemas/generated/cart.ts +61 -0
- package/src/schemas/generated/category.ts +25 -0
- package/src/schemas/generated/channel.ts +21 -0
- package/src/schemas/generated/common.ts +1372 -0
- package/src/schemas/generated/custom-object.ts +11 -0
- package/src/schemas/generated/customer-group.ts +11 -0
- package/src/schemas/generated/customer.ts +47 -0
- package/src/schemas/generated/discount-code.ts +25 -0
- package/src/schemas/generated/discount-group.ts +13 -0
- package/src/schemas/generated/extension.ts +15 -0
- package/src/schemas/generated/index.ts +42 -0
- package/src/schemas/generated/inventory-entry.ts +20 -0
- package/src/schemas/generated/my-quote-request.ts +10 -0
- package/src/schemas/generated/order-edit.ts +18 -0
- package/src/schemas/generated/order-from-cart.ts +25 -0
- package/src/schemas/generated/payment.ts +30 -0
- package/src/schemas/generated/product-discount.ts +20 -0
- package/src/schemas/generated/product-selection.ts +18 -0
- package/src/schemas/generated/product-tailoring.ts +26 -0
- package/src/schemas/generated/product-type.ts +12 -0
- package/src/schemas/generated/product.ts +37 -0
- package/src/schemas/generated/quote-request.ts +19 -0
- package/src/schemas/generated/quote.ts +18 -0
- package/src/schemas/generated/recurrence-policy.ts +15 -0
- package/src/schemas/generated/recurring-order.ts +19 -0
- package/src/schemas/generated/review.ts +24 -0
- package/src/schemas/generated/shipping-method.ts +24 -0
- package/src/schemas/generated/shopping-list.ts +28 -0
- package/src/schemas/generated/staged-quote.ts +18 -0
- package/src/schemas/generated/standalone-price.ts +32 -0
- package/src/schemas/generated/state.ts +20 -0
- package/src/schemas/generated/store.ts +23 -0
- package/src/schemas/generated/subscription.ts +20 -0
- package/src/schemas/generated/tax-category.ts +12 -0
- package/src/schemas/generated/type.ts +17 -0
- package/src/schemas/generated/zone.ts +12 -0
- package/src/schemas/update-request.ts +3 -5
- package/src/server.ts +32 -4
- package/src/services/abstract.ts +207 -101
- package/src/services/as-associate-cart.test.ts +28 -36
- package/src/services/as-associate-cart.ts +15 -12
- package/src/services/as-associate-order.test.ts +33 -40
- package/src/services/as-associate-order.ts +15 -12
- package/src/services/as-associate-quote-request.ts +15 -12
- package/src/services/as-associate-shopping-list.test.ts +25 -35
- package/src/services/as-associate-shopping-list.ts +15 -12
- package/src/services/as-associate.test.ts +21 -15
- package/src/services/as-associate.ts +23 -22
- package/src/services/associate-roles.test.ts +16 -22
- package/src/services/associate-roles.ts +2 -2
- package/src/services/attribute-group.test.ts +40 -44
- package/src/services/attribute-group.ts +2 -2
- package/src/services/business-units.test.ts +227 -163
- package/src/services/business-units.ts +2 -2
- package/src/services/cart-discount.test.ts +253 -187
- package/src/services/cart-discount.ts +2 -2
- package/src/services/cart.test.ts +833 -832
- package/src/services/cart.ts +31 -12
- package/src/services/category.test.ts +208 -130
- package/src/services/category.ts +2 -2
- package/src/services/channel.test.ts +39 -44
- package/src/services/channel.ts +2 -2
- package/src/services/custom-object.test.ts +103 -79
- package/src/services/custom-object.ts +106 -38
- package/src/services/customer-group.test.ts +39 -44
- package/src/services/customer-group.ts +2 -2
- package/src/services/customer.test.ts +357 -292
- package/src/services/customer.ts +70 -23
- package/src/services/discount-code.test.ts +57 -68
- package/src/services/discount-code.ts +2 -2
- package/src/services/discount-group.test.ts +111 -134
- package/src/services/discount-group.ts +2 -2
- package/src/services/draft-validation.test.ts +255 -0
- package/src/services/extension.test.ts +39 -44
- package/src/services/extension.ts +2 -2
- package/src/services/inventory-entry.test.ts +106 -87
- package/src/services/inventory-entry.ts +2 -2
- package/src/services/my-business-unit.test.ts +82 -112
- package/src/services/my-business-unit.ts +25 -19
- package/src/services/my-cart.test.ts +46 -41
- package/src/services/my-cart.ts +32 -28
- package/src/services/my-customer.test.ts +153 -88
- package/src/services/my-customer.ts +130 -61
- package/src/services/my-order.ts +15 -12
- package/src/services/my-payment.test.ts +30 -24
- package/src/services/my-payment.ts +2 -2
- package/src/services/my-shopping-list.ts +2 -2
- package/src/services/order.test.ts +332 -276
- package/src/services/order.ts +45 -27
- package/src/services/payment.test.ts +31 -29
- package/src/services/payment.ts +2 -2
- package/src/services/product-discount.test.ts +39 -46
- package/src/services/product-discount.ts +2 -2
- package/src/services/product-projection.test.ts +176 -166
- package/src/services/product-projection.ts +31 -15
- package/src/services/product-selection.test.ts +17 -9
- package/src/services/product-selection.ts +2 -2
- package/src/services/product-type.test.ts +80 -21
- package/src/services/product-type.ts +2 -2
- package/src/services/product.test.ts +569 -534
- package/src/services/product.ts +14 -7
- package/src/services/project.test.ts +22 -12
- package/src/services/project.ts +28 -13
- package/src/services/quote-request.test.ts +36 -39
- package/src/services/quote-request.ts +2 -2
- package/src/services/quote-staged.ts +2 -2
- package/src/services/quote.ts +2 -2
- package/src/services/recurrence-policy.test.ts +114 -139
- package/src/services/recurrence-policy.ts +2 -2
- package/src/services/recurring-order.test.ts +149 -194
- package/src/services/recurring-order.ts +2 -2
- package/src/services/reviews.test.ts +127 -106
- package/src/services/reviews.ts +2 -2
- package/src/services/shipping-method.test.ts +96 -125
- package/src/services/shipping-method.ts +24 -12
- package/src/services/shopping-list.test.ts +183 -141
- package/src/services/shopping-list.ts +2 -2
- package/src/services/standalone-price.test.ts +60 -46
- package/src/services/standalone-price.ts +2 -2
- package/src/services/state.test.ts +20 -25
- package/src/services/state.ts +2 -2
- package/src/services/store.test.ts +26 -45
- package/src/services/store.ts +2 -2
- package/src/services/subscription.test.ts +39 -44
- package/src/services/subscription.ts +2 -2
- package/src/services/tax-category.test.ts +33 -36
- package/src/services/tax-category.ts +2 -2
- package/src/services/type.test.ts +45 -44
- package/src/services/type.ts +2 -2
- package/src/services/zone.test.ts +40 -44
- package/src/services/zone.ts +2 -2
- package/src/shipping.ts +41 -11
- package/src/storage/abstract.ts +248 -17
- package/src/storage/in-memory.ts +147 -290
- package/src/storage/sqlite.ts +429 -0
- package/src/storage/storage-map.ts +75 -0
- package/src/storage/storage.test-helpers.ts +97 -0
- package/src/storage/storage.test.ts +802 -0
- package/src/testing/associate-role.ts +28 -0
- package/src/testing/attribute-group.ts +27 -0
- package/src/testing/business-unit.ts +9 -8
- package/src/testing/cart-discount.ts +34 -0
- package/src/testing/cart.ts +20 -0
- package/src/testing/category.ts +25 -0
- package/src/testing/channel.ts +23 -0
- package/src/testing/custom-object.ts +27 -0
- package/src/testing/customer-group.ts +26 -0
- package/src/testing/customer.ts +36 -33
- package/src/testing/discount-code.ts +29 -0
- package/src/testing/discount-group.ts +27 -0
- package/src/testing/extension.ts +32 -0
- package/src/testing/index.ts +33 -0
- package/src/testing/inventory-entry.ts +26 -0
- package/src/testing/order.ts +27 -0
- package/src/testing/payment.ts +23 -0
- package/src/testing/product-discount.ts +33 -0
- package/src/testing/product-selection.ts +28 -0
- package/src/testing/product-type.ts +27 -0
- package/src/testing/product.ts +38 -0
- package/src/testing/quote-request.ts +29 -0
- package/src/testing/recurrence-policy.ts +33 -0
- package/src/testing/recurring-order.ts +32 -0
- package/src/testing/review.ts +24 -0
- package/src/testing/shipping-method.ts +31 -0
- package/src/testing/shopping-list.ts +25 -0
- package/src/testing/standalone-price.ts +31 -0
- package/src/testing/state.ts +21 -0
- package/src/testing/store.ts +26 -0
- package/src/testing/subscription.ts +38 -0
- package/src/testing/tax-category.ts +27 -0
- package/src/testing/type.ts +9 -6
- package/src/testing/zone.ts +22 -0
- package/src/validate.test.ts +122 -0
- package/src/validate.ts +78 -7
- package/src/.env +0 -0
|
@@ -1,81 +1,69 @@
|
|
|
1
|
-
import type {
|
|
2
|
-
CartDraft,
|
|
3
|
-
RecurringOrderDraft,
|
|
4
|
-
} from "@commercetools/platform-sdk";
|
|
5
|
-
import supertest from "supertest";
|
|
6
1
|
import { describe, expect, test } from "vitest";
|
|
2
|
+
import { cartDraftFactory } from "#src/testing/cart.ts";
|
|
3
|
+
import { productDraftFactory } from "#src/testing/product.ts";
|
|
4
|
+
import { productTypeDraftFactory } from "#src/testing/product-type.ts";
|
|
5
|
+
import { recurringOrderDraftFactory } from "#src/testing/recurring-order.ts";
|
|
7
6
|
import { CommercetoolsMock } from "../index.ts";
|
|
8
7
|
|
|
9
8
|
const ctMock = new CommercetoolsMock();
|
|
10
9
|
|
|
11
10
|
describe("RecurringOrder", () => {
|
|
12
11
|
const createTestCart = async () => {
|
|
13
|
-
await
|
|
14
|
-
key: "test-product-type",
|
|
15
|
-
name: "Test Product Type",
|
|
16
|
-
description: "A test product type",
|
|
17
|
-
});
|
|
12
|
+
const productType = await productTypeDraftFactory(ctMock).create();
|
|
18
13
|
|
|
19
|
-
const
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
prices: [
|
|
33
|
-
{
|
|
34
|
-
value: {
|
|
35
|
-
type: "centPrecision",
|
|
36
|
-
currencyCode: "EUR",
|
|
37
|
-
centAmount: 1000,
|
|
38
|
-
},
|
|
14
|
+
const product = await productDraftFactory(ctMock).create({
|
|
15
|
+
productType: {
|
|
16
|
+
typeId: "product-type",
|
|
17
|
+
id: productType.id,
|
|
18
|
+
},
|
|
19
|
+
masterVariant: {
|
|
20
|
+
sku: "test-sku",
|
|
21
|
+
prices: [
|
|
22
|
+
{
|
|
23
|
+
value: {
|
|
24
|
+
type: "centPrecision",
|
|
25
|
+
currencyCode: "EUR",
|
|
26
|
+
centAmount: 1000,
|
|
39
27
|
},
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
28
|
+
},
|
|
29
|
+
],
|
|
30
|
+
},
|
|
31
|
+
variants: [],
|
|
32
|
+
});
|
|
44
33
|
|
|
45
|
-
const
|
|
34
|
+
const cart = await cartDraftFactory(ctMock).create({
|
|
46
35
|
currency: "EUR",
|
|
47
36
|
country: "NL",
|
|
48
|
-
};
|
|
49
|
-
|
|
50
|
-
const cartResponse = await supertest(ctMock.app)
|
|
51
|
-
.post("/dummy/carts")
|
|
52
|
-
.send(cartDraft);
|
|
37
|
+
});
|
|
53
38
|
|
|
54
|
-
await
|
|
55
|
-
|
|
56
|
-
.
|
|
57
|
-
|
|
39
|
+
await ctMock.app.inject({
|
|
40
|
+
method: "POST",
|
|
41
|
+
url: `/dummy/carts/${cart.id}`,
|
|
42
|
+
payload: {
|
|
43
|
+
version: cart.version,
|
|
58
44
|
actions: [
|
|
59
45
|
{
|
|
60
46
|
action: "addLineItem",
|
|
61
|
-
productId:
|
|
47
|
+
productId: product.id,
|
|
62
48
|
variantId: 1,
|
|
63
49
|
quantity: 2,
|
|
64
50
|
},
|
|
65
51
|
],
|
|
66
|
-
}
|
|
52
|
+
},
|
|
53
|
+
});
|
|
67
54
|
|
|
68
|
-
const updatedCartResponse = await
|
|
69
|
-
|
|
70
|
-
|
|
55
|
+
const updatedCartResponse = await ctMock.app.inject({
|
|
56
|
+
method: "GET",
|
|
57
|
+
url: `/dummy/carts/${cart.id}`,
|
|
58
|
+
});
|
|
71
59
|
|
|
72
|
-
return updatedCartResponse.
|
|
60
|
+
return updatedCartResponse.json();
|
|
73
61
|
};
|
|
74
62
|
|
|
75
63
|
test("Create recurring order", async () => {
|
|
76
64
|
const cart = await createTestCart();
|
|
77
65
|
|
|
78
|
-
const draft
|
|
66
|
+
const draft = recurringOrderDraftFactory(ctMock).build({
|
|
79
67
|
key: "weekly-order",
|
|
80
68
|
cart: {
|
|
81
69
|
typeId: "cart",
|
|
@@ -84,19 +72,23 @@ describe("RecurringOrder", () => {
|
|
|
84
72
|
cartVersion: cart.version,
|
|
85
73
|
startsAt: "2025-01-01T10:00:00.000Z",
|
|
86
74
|
expiresAt: "2025-12-31T23:59:59.000Z",
|
|
87
|
-
};
|
|
75
|
+
});
|
|
88
76
|
|
|
89
|
-
const response = await
|
|
90
|
-
|
|
91
|
-
|
|
77
|
+
const response = await ctMock.app.inject({
|
|
78
|
+
method: "POST",
|
|
79
|
+
url: "/dummy/recurring-orders",
|
|
80
|
+
payload: draft,
|
|
81
|
+
});
|
|
92
82
|
|
|
93
|
-
expect(response.
|
|
83
|
+
expect(response.statusCode).toBe(201);
|
|
94
84
|
|
|
95
|
-
expect(response.
|
|
85
|
+
expect(response.json()).toEqual({
|
|
96
86
|
createdAt: expect.anything(),
|
|
87
|
+
createdBy: expect.anything(),
|
|
97
88
|
id: expect.anything(),
|
|
98
89
|
key: "weekly-order",
|
|
99
90
|
lastModifiedAt: expect.anything(),
|
|
91
|
+
lastModifiedBy: expect.anything(),
|
|
100
92
|
cart: {
|
|
101
93
|
typeId: "cart",
|
|
102
94
|
id: cart.id,
|
|
@@ -120,7 +112,7 @@ describe("RecurringOrder", () => {
|
|
|
120
112
|
test("Get recurring order", async () => {
|
|
121
113
|
const cart = await createTestCart();
|
|
122
114
|
|
|
123
|
-
const
|
|
115
|
+
const recurringOrder = await recurringOrderDraftFactory(ctMock).create({
|
|
124
116
|
key: "get-test-order",
|
|
125
117
|
cart: {
|
|
126
118
|
typeId: "cart",
|
|
@@ -128,26 +120,21 @@ describe("RecurringOrder", () => {
|
|
|
128
120
|
},
|
|
129
121
|
cartVersion: cart.version,
|
|
130
122
|
startsAt: "2025-01-01T10:00:00.000Z",
|
|
131
|
-
};
|
|
132
|
-
|
|
133
|
-
const createResponse = await supertest(ctMock.app)
|
|
134
|
-
.post("/dummy/recurring-orders")
|
|
135
|
-
.send(draft);
|
|
136
|
-
|
|
137
|
-
expect(createResponse.status).toBe(201);
|
|
123
|
+
});
|
|
138
124
|
|
|
139
|
-
const response = await
|
|
140
|
-
|
|
141
|
-
|
|
125
|
+
const response = await ctMock.app.inject({
|
|
126
|
+
method: "GET",
|
|
127
|
+
url: `/dummy/recurring-orders/${recurringOrder.id}`,
|
|
128
|
+
});
|
|
142
129
|
|
|
143
|
-
expect(response.
|
|
144
|
-
expect(response.
|
|
130
|
+
expect(response.statusCode).toBe(200);
|
|
131
|
+
expect(response.json()).toEqual(recurringOrder);
|
|
145
132
|
});
|
|
146
133
|
|
|
147
134
|
test("Get recurring order by key", async () => {
|
|
148
135
|
const cart = await createTestCart();
|
|
149
136
|
|
|
150
|
-
const
|
|
137
|
+
const recurringOrder = await recurringOrderDraftFactory(ctMock).create({
|
|
151
138
|
key: "key-test-order",
|
|
152
139
|
cart: {
|
|
153
140
|
typeId: "cart",
|
|
@@ -155,26 +142,21 @@ describe("RecurringOrder", () => {
|
|
|
155
142
|
},
|
|
156
143
|
cartVersion: cart.version,
|
|
157
144
|
startsAt: "2025-01-01T10:00:00.000Z",
|
|
158
|
-
};
|
|
159
|
-
|
|
160
|
-
const createResponse = await supertest(ctMock.app)
|
|
161
|
-
.post("/dummy/recurring-orders")
|
|
162
|
-
.send(draft);
|
|
163
|
-
|
|
164
|
-
expect(createResponse.status).toBe(201);
|
|
145
|
+
});
|
|
165
146
|
|
|
166
|
-
const response = await
|
|
167
|
-
"
|
|
168
|
-
|
|
147
|
+
const response = await ctMock.app.inject({
|
|
148
|
+
method: "GET",
|
|
149
|
+
url: "/dummy/recurring-orders/key=key-test-order",
|
|
150
|
+
});
|
|
169
151
|
|
|
170
|
-
expect(response.
|
|
171
|
-
expect(response.
|
|
152
|
+
expect(response.statusCode).toBe(200);
|
|
153
|
+
expect(response.json()).toEqual(recurringOrder);
|
|
172
154
|
});
|
|
173
155
|
|
|
174
156
|
test("Query recurring orders", async () => {
|
|
175
157
|
const cart = await createTestCart();
|
|
176
158
|
|
|
177
|
-
const
|
|
159
|
+
const recurringOrder = await recurringOrderDraftFactory(ctMock).create({
|
|
178
160
|
key: "query-test-order",
|
|
179
161
|
cart: {
|
|
180
162
|
typeId: "cart",
|
|
@@ -182,25 +164,22 @@ describe("RecurringOrder", () => {
|
|
|
182
164
|
},
|
|
183
165
|
cartVersion: cart.version,
|
|
184
166
|
startsAt: "2025-01-01T10:00:00.000Z",
|
|
185
|
-
};
|
|
186
|
-
|
|
187
|
-
const createResponse = await supertest(ctMock.app)
|
|
188
|
-
.post("/dummy/recurring-orders")
|
|
189
|
-
.send(draft);
|
|
190
|
-
|
|
191
|
-
expect(createResponse.status).toBe(201);
|
|
167
|
+
});
|
|
192
168
|
|
|
193
|
-
const response = await
|
|
169
|
+
const response = await ctMock.app.inject({
|
|
170
|
+
method: "GET",
|
|
171
|
+
url: "/dummy/recurring-orders",
|
|
172
|
+
});
|
|
194
173
|
|
|
195
|
-
expect(response.
|
|
196
|
-
expect(response.
|
|
197
|
-
expect(response.
|
|
174
|
+
expect(response.statusCode).toBe(200);
|
|
175
|
+
expect(response.json().count).toBeGreaterThan(0);
|
|
176
|
+
expect(response.json().results).toContainEqual(recurringOrder);
|
|
198
177
|
});
|
|
199
178
|
|
|
200
179
|
test("Update recurring order - setKey", async () => {
|
|
201
180
|
const cart = await createTestCart();
|
|
202
181
|
|
|
203
|
-
const
|
|
182
|
+
const recurringOrder = await recurringOrderDraftFactory(ctMock).create({
|
|
204
183
|
key: "original-key",
|
|
205
184
|
cart: {
|
|
206
185
|
typeId: "cart",
|
|
@@ -208,35 +187,31 @@ describe("RecurringOrder", () => {
|
|
|
208
187
|
},
|
|
209
188
|
cartVersion: cart.version,
|
|
210
189
|
startsAt: "2025-01-01T10:00:00.000Z",
|
|
211
|
-
};
|
|
212
|
-
|
|
213
|
-
const createResponse = await supertest(ctMock.app)
|
|
214
|
-
.post("/dummy/recurring-orders")
|
|
215
|
-
.send(draft);
|
|
216
|
-
|
|
217
|
-
expect(createResponse.status).toBe(201);
|
|
190
|
+
});
|
|
218
191
|
|
|
219
|
-
const updateResponse = await
|
|
220
|
-
|
|
221
|
-
.
|
|
222
|
-
|
|
192
|
+
const updateResponse = await ctMock.app.inject({
|
|
193
|
+
method: "POST",
|
|
194
|
+
url: `/dummy/recurring-orders/${recurringOrder.id}`,
|
|
195
|
+
payload: {
|
|
196
|
+
version: recurringOrder.version,
|
|
223
197
|
actions: [
|
|
224
198
|
{
|
|
225
199
|
action: "setKey",
|
|
226
200
|
key: "updated-key",
|
|
227
201
|
},
|
|
228
202
|
],
|
|
229
|
-
}
|
|
203
|
+
},
|
|
204
|
+
});
|
|
230
205
|
|
|
231
|
-
expect(updateResponse.
|
|
232
|
-
expect(updateResponse.
|
|
233
|
-
expect(updateResponse.
|
|
206
|
+
expect(updateResponse.statusCode).toBe(200);
|
|
207
|
+
expect(updateResponse.json().key).toBe("updated-key");
|
|
208
|
+
expect(updateResponse.json().version).toBe(2);
|
|
234
209
|
});
|
|
235
210
|
|
|
236
211
|
test("Update recurring order - setStartsAt", async () => {
|
|
237
212
|
const cart = await createTestCart();
|
|
238
213
|
|
|
239
|
-
const
|
|
214
|
+
const recurringOrder = await recurringOrderDraftFactory(ctMock).create({
|
|
240
215
|
key: "starts-at-test",
|
|
241
216
|
cart: {
|
|
242
217
|
typeId: "cart",
|
|
@@ -244,35 +219,31 @@ describe("RecurringOrder", () => {
|
|
|
244
219
|
},
|
|
245
220
|
cartVersion: cart.version,
|
|
246
221
|
startsAt: "2025-01-01T10:00:00.000Z",
|
|
247
|
-
};
|
|
248
|
-
|
|
249
|
-
const createResponse = await supertest(ctMock.app)
|
|
250
|
-
.post("/dummy/recurring-orders")
|
|
251
|
-
.send(draft);
|
|
252
|
-
|
|
253
|
-
expect(createResponse.status).toBe(201);
|
|
222
|
+
});
|
|
254
223
|
|
|
255
|
-
const updateResponse = await
|
|
256
|
-
|
|
257
|
-
.
|
|
258
|
-
|
|
224
|
+
const updateResponse = await ctMock.app.inject({
|
|
225
|
+
method: "POST",
|
|
226
|
+
url: `/dummy/recurring-orders/${recurringOrder.id}`,
|
|
227
|
+
payload: {
|
|
228
|
+
version: recurringOrder.version,
|
|
259
229
|
actions: [
|
|
260
230
|
{
|
|
261
231
|
action: "setStartsAt",
|
|
262
232
|
startsAt: "2025-02-01T10:00:00.000Z",
|
|
263
233
|
},
|
|
264
234
|
],
|
|
265
|
-
}
|
|
235
|
+
},
|
|
236
|
+
});
|
|
266
237
|
|
|
267
|
-
expect(updateResponse.
|
|
268
|
-
expect(updateResponse.
|
|
269
|
-
expect(updateResponse.
|
|
238
|
+
expect(updateResponse.statusCode).toBe(200);
|
|
239
|
+
expect(updateResponse.json().startsAt).toBe("2025-02-01T10:00:00.000Z");
|
|
240
|
+
expect(updateResponse.json().version).toBe(2);
|
|
270
241
|
});
|
|
271
242
|
|
|
272
243
|
test("Update recurring order - setExpiresAt", async () => {
|
|
273
244
|
const cart = await createTestCart();
|
|
274
245
|
|
|
275
|
-
const
|
|
246
|
+
const recurringOrder = await recurringOrderDraftFactory(ctMock).create({
|
|
276
247
|
key: "expires-at-test",
|
|
277
248
|
cart: {
|
|
278
249
|
typeId: "cart",
|
|
@@ -280,35 +251,31 @@ describe("RecurringOrder", () => {
|
|
|
280
251
|
},
|
|
281
252
|
cartVersion: cart.version,
|
|
282
253
|
startsAt: "2025-01-01T10:00:00.000Z",
|
|
283
|
-
};
|
|
284
|
-
|
|
285
|
-
const createResponse = await supertest(ctMock.app)
|
|
286
|
-
.post("/dummy/recurring-orders")
|
|
287
|
-
.send(draft);
|
|
288
|
-
|
|
289
|
-
expect(createResponse.status).toBe(201);
|
|
254
|
+
});
|
|
290
255
|
|
|
291
|
-
const updateResponse = await
|
|
292
|
-
|
|
293
|
-
.
|
|
294
|
-
|
|
256
|
+
const updateResponse = await ctMock.app.inject({
|
|
257
|
+
method: "POST",
|
|
258
|
+
url: `/dummy/recurring-orders/${recurringOrder.id}`,
|
|
259
|
+
payload: {
|
|
260
|
+
version: recurringOrder.version,
|
|
295
261
|
actions: [
|
|
296
262
|
{
|
|
297
263
|
action: "setExpiresAt",
|
|
298
264
|
expiresAt: "2026-01-01T00:00:00.000Z",
|
|
299
265
|
},
|
|
300
266
|
],
|
|
301
|
-
}
|
|
267
|
+
},
|
|
268
|
+
});
|
|
302
269
|
|
|
303
|
-
expect(updateResponse.
|
|
304
|
-
expect(updateResponse.
|
|
305
|
-
expect(updateResponse.
|
|
270
|
+
expect(updateResponse.statusCode).toBe(200);
|
|
271
|
+
expect(updateResponse.json().expiresAt).toBe("2026-01-01T00:00:00.000Z");
|
|
272
|
+
expect(updateResponse.json().version).toBe(2);
|
|
306
273
|
});
|
|
307
274
|
|
|
308
275
|
test("Update recurring order - setRecurringOrderState to paused", async () => {
|
|
309
276
|
const cart = await createTestCart();
|
|
310
277
|
|
|
311
|
-
const
|
|
278
|
+
const recurringOrder = await recurringOrderDraftFactory(ctMock).create({
|
|
312
279
|
key: "state-test",
|
|
313
280
|
cart: {
|
|
314
281
|
typeId: "cart",
|
|
@@ -316,18 +283,13 @@ describe("RecurringOrder", () => {
|
|
|
316
283
|
},
|
|
317
284
|
cartVersion: cart.version,
|
|
318
285
|
startsAt: "2025-01-01T10:00:00.000Z",
|
|
319
|
-
};
|
|
320
|
-
|
|
321
|
-
const createResponse = await supertest(ctMock.app)
|
|
322
|
-
.post("/dummy/recurring-orders")
|
|
323
|
-
.send(draft);
|
|
324
|
-
|
|
325
|
-
expect(createResponse.status).toBe(201);
|
|
286
|
+
});
|
|
326
287
|
|
|
327
|
-
const updateResponse = await
|
|
328
|
-
|
|
329
|
-
.
|
|
330
|
-
|
|
288
|
+
const updateResponse = await ctMock.app.inject({
|
|
289
|
+
method: "POST",
|
|
290
|
+
url: `/dummy/recurring-orders/${recurringOrder.id}`,
|
|
291
|
+
payload: {
|
|
292
|
+
version: recurringOrder.version,
|
|
331
293
|
actions: [
|
|
332
294
|
{
|
|
333
295
|
action: "setRecurringOrderState",
|
|
@@ -336,17 +298,18 @@ describe("RecurringOrder", () => {
|
|
|
336
298
|
},
|
|
337
299
|
},
|
|
338
300
|
],
|
|
339
|
-
}
|
|
301
|
+
},
|
|
302
|
+
});
|
|
340
303
|
|
|
341
|
-
expect(updateResponse.
|
|
342
|
-
expect(updateResponse.
|
|
343
|
-
expect(updateResponse.
|
|
304
|
+
expect(updateResponse.statusCode).toBe(200);
|
|
305
|
+
expect(updateResponse.json().recurringOrderState).toBe("Paused");
|
|
306
|
+
expect(updateResponse.json().version).toBe(2);
|
|
344
307
|
});
|
|
345
308
|
|
|
346
309
|
test("Update recurring order - setOrderSkipConfiguration", async () => {
|
|
347
310
|
const cart = await createTestCart();
|
|
348
311
|
|
|
349
|
-
const
|
|
312
|
+
const recurringOrder = await recurringOrderDraftFactory(ctMock).create({
|
|
350
313
|
key: "skip-test",
|
|
351
314
|
cart: {
|
|
352
315
|
typeId: "cart",
|
|
@@ -354,45 +317,41 @@ describe("RecurringOrder", () => {
|
|
|
354
317
|
},
|
|
355
318
|
cartVersion: cart.version,
|
|
356
319
|
startsAt: "2025-01-01T10:00:00.000Z",
|
|
357
|
-
};
|
|
358
|
-
|
|
359
|
-
const createResponse = await supertest(ctMock.app)
|
|
360
|
-
.post("/dummy/recurring-orders")
|
|
361
|
-
.send(draft);
|
|
362
|
-
|
|
363
|
-
expect(createResponse.status).toBe(201);
|
|
320
|
+
});
|
|
364
321
|
|
|
365
|
-
const updateResponse = await
|
|
366
|
-
|
|
367
|
-
.
|
|
368
|
-
|
|
322
|
+
const updateResponse = await ctMock.app.inject({
|
|
323
|
+
method: "POST",
|
|
324
|
+
url: `/dummy/recurring-orders/${recurringOrder.id}`,
|
|
325
|
+
payload: {
|
|
326
|
+
version: recurringOrder.version,
|
|
369
327
|
actions: [
|
|
370
328
|
{
|
|
371
329
|
action: "setOrderSkipConfiguration",
|
|
372
|
-
|
|
330
|
+
skipConfigurationInputDraft: {
|
|
373
331
|
type: "totalSkip",
|
|
374
332
|
totalToSkip: 2,
|
|
375
333
|
},
|
|
376
334
|
updatedExpiresAt: "2025-06-01T00:00:00.000Z",
|
|
377
335
|
},
|
|
378
336
|
],
|
|
379
|
-
}
|
|
337
|
+
},
|
|
338
|
+
});
|
|
380
339
|
|
|
381
|
-
expect(updateResponse.
|
|
382
|
-
expect(updateResponse.
|
|
340
|
+
expect(updateResponse.statusCode).toBe(200);
|
|
341
|
+
expect(updateResponse.json().skipConfiguration).toEqual({
|
|
383
342
|
type: "totalSkip",
|
|
384
343
|
totalToSkip: 2,
|
|
385
344
|
skipped: 0,
|
|
386
345
|
lastSkippedAt: undefined,
|
|
387
346
|
});
|
|
388
|
-
expect(updateResponse.
|
|
389
|
-
expect(updateResponse.
|
|
347
|
+
expect(updateResponse.json().expiresAt).toBe("2025-06-01T00:00:00.000Z");
|
|
348
|
+
expect(updateResponse.json().version).toBe(2);
|
|
390
349
|
});
|
|
391
350
|
|
|
392
351
|
test("Delete recurring order", async () => {
|
|
393
352
|
const cart = await createTestCart();
|
|
394
353
|
|
|
395
|
-
const
|
|
354
|
+
const recurringOrder = await recurringOrderDraftFactory(ctMock).create({
|
|
396
355
|
key: "delete-test",
|
|
397
356
|
cart: {
|
|
398
357
|
typeId: "cart",
|
|
@@ -400,25 +359,21 @@ describe("RecurringOrder", () => {
|
|
|
400
359
|
},
|
|
401
360
|
cartVersion: cart.version,
|
|
402
361
|
startsAt: "2025-01-01T10:00:00.000Z",
|
|
403
|
-
};
|
|
404
|
-
|
|
405
|
-
const createResponse = await supertest(ctMock.app)
|
|
406
|
-
.post("/dummy/recurring-orders")
|
|
407
|
-
.send(draft);
|
|
408
|
-
|
|
409
|
-
expect(createResponse.status).toBe(201);
|
|
362
|
+
});
|
|
410
363
|
|
|
411
|
-
const deleteResponse = await
|
|
412
|
-
|
|
413
|
-
|
|
364
|
+
const deleteResponse = await ctMock.app.inject({
|
|
365
|
+
method: "DELETE",
|
|
366
|
+
url: `/dummy/recurring-orders/${recurringOrder.id}?version=${recurringOrder.version}`,
|
|
367
|
+
});
|
|
414
368
|
|
|
415
|
-
expect(deleteResponse.
|
|
416
|
-
expect(deleteResponse.
|
|
369
|
+
expect(deleteResponse.statusCode).toBe(200);
|
|
370
|
+
expect(deleteResponse.json()).toEqual(recurringOrder);
|
|
417
371
|
|
|
418
|
-
const getResponse = await
|
|
419
|
-
|
|
420
|
-
|
|
372
|
+
const getResponse = await ctMock.app.inject({
|
|
373
|
+
method: "GET",
|
|
374
|
+
url: `/dummy/recurring-orders/${recurringOrder.id}`,
|
|
375
|
+
});
|
|
421
376
|
|
|
422
|
-
expect(getResponse.
|
|
377
|
+
expect(getResponse.statusCode).toBe(404);
|
|
423
378
|
});
|
|
424
379
|
});
|
|
@@ -1,11 +1,11 @@
|
|
|
1
|
-
import type {
|
|
1
|
+
import type { FastifyInstance } from "fastify";
|
|
2
2
|
import type { RecurringOrderRepository } from "../repositories/recurring-order/index.ts";
|
|
3
3
|
import AbstractService from "./abstract.ts";
|
|
4
4
|
|
|
5
5
|
export class RecurringOrderService extends AbstractService {
|
|
6
6
|
public repository: RecurringOrderRepository;
|
|
7
7
|
|
|
8
|
-
constructor(parent:
|
|
8
|
+
constructor(parent: FastifyInstance, repository: RecurringOrderRepository) {
|
|
9
9
|
super(parent);
|
|
10
10
|
this.repository = repository;
|
|
11
11
|
}
|