@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,99 +1,94 @@
|
|
|
1
1
|
import assert from "node:assert";
|
|
2
|
-
import type { CartDiscount
|
|
3
|
-
import supertest from "supertest";
|
|
2
|
+
import type { CartDiscount } from "@commercetools/platform-sdk";
|
|
4
3
|
import { afterEach, beforeEach, describe, expect, test } from "vitest";
|
|
4
|
+
import {
|
|
5
|
+
cartDiscountDraftFactory,
|
|
6
|
+
typeDraftFactory,
|
|
7
|
+
} from "#src/testing/index.ts";
|
|
5
8
|
import { CommercetoolsMock } from "..";
|
|
6
9
|
|
|
7
|
-
const typeDraft: TypeDraft = {
|
|
8
|
-
key: "my-type",
|
|
9
|
-
name: {
|
|
10
|
-
en: "TestType",
|
|
11
|
-
},
|
|
12
|
-
description: {
|
|
13
|
-
en: "Test Type",
|
|
14
|
-
},
|
|
15
|
-
resourceTypeIds: ["cart-discount"],
|
|
16
|
-
fieldDefinitions: [
|
|
17
|
-
{
|
|
18
|
-
name: "discount_name",
|
|
19
|
-
label: {
|
|
20
|
-
en: "Discount name",
|
|
21
|
-
},
|
|
22
|
-
required: false,
|
|
23
|
-
type: {
|
|
24
|
-
name: "String",
|
|
25
|
-
},
|
|
26
|
-
inputHint: "SingleLine",
|
|
27
|
-
},
|
|
28
|
-
{
|
|
29
|
-
name: "fixedAmount",
|
|
30
|
-
label: {
|
|
31
|
-
en: "Fixed Amount",
|
|
32
|
-
},
|
|
33
|
-
required: true,
|
|
34
|
-
type: {
|
|
35
|
-
name: "Money",
|
|
36
|
-
},
|
|
37
|
-
inputHint: "SingleLine",
|
|
38
|
-
},
|
|
39
|
-
],
|
|
40
|
-
};
|
|
41
|
-
|
|
42
|
-
const getCartDiscountDraft = (typeId: string) => ({
|
|
43
|
-
version: 1,
|
|
44
|
-
key: "my-relative-cart-discount",
|
|
45
|
-
name: { en: "myRelativeCartDiscount" },
|
|
46
|
-
value: {
|
|
47
|
-
type: "relative",
|
|
48
|
-
permyriad: 1000,
|
|
49
|
-
},
|
|
50
|
-
description: { en: "My relative cart discount" },
|
|
51
|
-
target: { type: "lineItems", predicate: "1=1" },
|
|
52
|
-
isActive: false,
|
|
53
|
-
custom: {
|
|
54
|
-
type: {
|
|
55
|
-
typeId: "type",
|
|
56
|
-
id: typeId,
|
|
57
|
-
},
|
|
58
|
-
fields: {
|
|
59
|
-
discount_name: "MyDiscount",
|
|
60
|
-
fixedAmount: {
|
|
61
|
-
type: "centPrecision",
|
|
62
|
-
currencyCode: "USD",
|
|
63
|
-
centAmount: 15000,
|
|
64
|
-
fractionDigits: 2,
|
|
65
|
-
},
|
|
66
|
-
},
|
|
67
|
-
},
|
|
68
|
-
validFrom: "2000-01-01T00:00:01.000Z",
|
|
69
|
-
validUntil: "2000-12-31T23:59:59.999Z",
|
|
70
|
-
sortOrder: "0.1",
|
|
71
|
-
});
|
|
72
|
-
|
|
73
10
|
describe("Cart Discounts Query", () => {
|
|
74
11
|
const ctMock = new CommercetoolsMock();
|
|
12
|
+
const typeDraft = typeDraftFactory(ctMock);
|
|
13
|
+
const cartDiscountDraft = cartDiscountDraftFactory(ctMock);
|
|
75
14
|
|
|
76
15
|
beforeEach(async () => {
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
|
|
82
|
-
|
|
83
|
-
|
|
84
|
-
|
|
85
|
-
|
|
16
|
+
const type = await typeDraft.create({
|
|
17
|
+
key: "my-type",
|
|
18
|
+
name: {
|
|
19
|
+
en: "TestType",
|
|
20
|
+
},
|
|
21
|
+
description: {
|
|
22
|
+
en: "Test Type",
|
|
23
|
+
},
|
|
24
|
+
resourceTypeIds: ["cart-discount"],
|
|
25
|
+
fieldDefinitions: [
|
|
26
|
+
{
|
|
27
|
+
name: "discount_name",
|
|
28
|
+
label: {
|
|
29
|
+
en: "Discount name",
|
|
30
|
+
},
|
|
31
|
+
required: false,
|
|
32
|
+
type: {
|
|
33
|
+
name: "String",
|
|
34
|
+
},
|
|
35
|
+
inputHint: "SingleLine",
|
|
36
|
+
},
|
|
37
|
+
{
|
|
38
|
+
name: "fixedAmount",
|
|
39
|
+
label: {
|
|
40
|
+
en: "Fixed Amount",
|
|
41
|
+
},
|
|
42
|
+
required: true,
|
|
43
|
+
type: {
|
|
44
|
+
name: "Money",
|
|
45
|
+
},
|
|
46
|
+
inputHint: "SingleLine",
|
|
47
|
+
},
|
|
48
|
+
],
|
|
49
|
+
});
|
|
50
|
+
|
|
51
|
+
await cartDiscountDraft.create({
|
|
52
|
+
key: "my-relative-cart-discount",
|
|
53
|
+
name: { en: "myRelativeCartDiscount" },
|
|
54
|
+
value: {
|
|
55
|
+
type: "relative",
|
|
56
|
+
permyriad: 1000,
|
|
57
|
+
},
|
|
58
|
+
description: { en: "My relative cart discount" },
|
|
59
|
+
target: { type: "lineItems", predicate: "1=1" },
|
|
60
|
+
isActive: false,
|
|
61
|
+
custom: {
|
|
62
|
+
type: {
|
|
63
|
+
typeId: "type",
|
|
64
|
+
id: type.id,
|
|
65
|
+
},
|
|
66
|
+
fields: {
|
|
67
|
+
discount_name: "MyDiscount",
|
|
68
|
+
fixedAmount: {
|
|
69
|
+
type: "centPrecision",
|
|
70
|
+
currencyCode: "USD",
|
|
71
|
+
centAmount: 15000,
|
|
72
|
+
fractionDigits: 2,
|
|
73
|
+
},
|
|
74
|
+
},
|
|
75
|
+
},
|
|
76
|
+
validFrom: "2000-01-01T00:00:01.000Z",
|
|
77
|
+
validUntil: "2000-12-31T23:59:59.999Z",
|
|
78
|
+
sortOrder: "0.1",
|
|
79
|
+
});
|
|
86
80
|
});
|
|
87
81
|
|
|
88
82
|
test("no filter", async () => {
|
|
89
|
-
const response = await
|
|
90
|
-
|
|
91
|
-
|
|
83
|
+
const response = await ctMock.app.inject({
|
|
84
|
+
method: "GET",
|
|
85
|
+
url: "/dummy/cart-discounts",
|
|
86
|
+
});
|
|
92
87
|
|
|
93
|
-
expect(response.
|
|
94
|
-
expect(response.
|
|
88
|
+
expect(response.statusCode).toBe(200);
|
|
89
|
+
expect(response.json().count).toBe(1);
|
|
95
90
|
|
|
96
|
-
const myRelativeCartDiscount = response.
|
|
91
|
+
const myRelativeCartDiscount = response.json().results[0] as CartDiscount;
|
|
97
92
|
expect(myRelativeCartDiscount.key).toBe("my-relative-cart-discount");
|
|
98
93
|
expect(myRelativeCartDiscount.description).toStrictEqual({
|
|
99
94
|
en: "My relative cart discount",
|
|
@@ -131,102 +126,158 @@ describe("Cart Discounts Query", () => {
|
|
|
131
126
|
|
|
132
127
|
describe("Cart Discounts Update Actions", () => {
|
|
133
128
|
const ctMock = new CommercetoolsMock();
|
|
129
|
+
const typeDraft = typeDraftFactory(ctMock);
|
|
130
|
+
const cartDiscountDraft = cartDiscountDraftFactory(ctMock);
|
|
134
131
|
let cartDiscount: CartDiscount | undefined;
|
|
135
132
|
|
|
136
|
-
const createType = async () => {
|
|
137
|
-
const response = await supertest(ctMock.app)
|
|
138
|
-
.post("/dummy/types")
|
|
139
|
-
.send(typeDraft);
|
|
140
|
-
expect(response.status).toBe(201);
|
|
141
|
-
return response.body.id;
|
|
142
|
-
};
|
|
143
|
-
|
|
144
|
-
const createCartDiscount = async (typeId: string) => {
|
|
145
|
-
const cartDiscountDraft = getCartDiscountDraft(typeId);
|
|
146
|
-
const response = await supertest(ctMock.app)
|
|
147
|
-
.post("/dummy/cart-discounts")
|
|
148
|
-
.send(cartDiscountDraft);
|
|
149
|
-
expect(response.status).toBe(201);
|
|
150
|
-
cartDiscount = response.body;
|
|
151
|
-
};
|
|
152
|
-
|
|
153
133
|
beforeEach(async () => {
|
|
154
|
-
const
|
|
155
|
-
|
|
134
|
+
const type = await typeDraft.create({
|
|
135
|
+
key: "my-type",
|
|
136
|
+
name: {
|
|
137
|
+
en: "TestType",
|
|
138
|
+
},
|
|
139
|
+
description: {
|
|
140
|
+
en: "Test Type",
|
|
141
|
+
},
|
|
142
|
+
resourceTypeIds: ["cart-discount"],
|
|
143
|
+
fieldDefinitions: [
|
|
144
|
+
{
|
|
145
|
+
name: "discount_name",
|
|
146
|
+
label: {
|
|
147
|
+
en: "Discount name",
|
|
148
|
+
},
|
|
149
|
+
required: false,
|
|
150
|
+
type: {
|
|
151
|
+
name: "String",
|
|
152
|
+
},
|
|
153
|
+
inputHint: "SingleLine",
|
|
154
|
+
},
|
|
155
|
+
{
|
|
156
|
+
name: "fixedAmount",
|
|
157
|
+
label: {
|
|
158
|
+
en: "Fixed Amount",
|
|
159
|
+
},
|
|
160
|
+
required: true,
|
|
161
|
+
type: {
|
|
162
|
+
name: "Money",
|
|
163
|
+
},
|
|
164
|
+
inputHint: "SingleLine",
|
|
165
|
+
},
|
|
166
|
+
],
|
|
167
|
+
});
|
|
168
|
+
|
|
169
|
+
cartDiscount = await cartDiscountDraft.create({
|
|
170
|
+
key: "my-relative-cart-discount",
|
|
171
|
+
name: { en: "myRelativeCartDiscount" },
|
|
172
|
+
value: {
|
|
173
|
+
type: "relative",
|
|
174
|
+
permyriad: 1000,
|
|
175
|
+
},
|
|
176
|
+
description: { en: "My relative cart discount" },
|
|
177
|
+
target: { type: "lineItems", predicate: "1=1" },
|
|
178
|
+
isActive: false,
|
|
179
|
+
custom: {
|
|
180
|
+
type: {
|
|
181
|
+
typeId: "type",
|
|
182
|
+
id: type.id,
|
|
183
|
+
},
|
|
184
|
+
fields: {
|
|
185
|
+
discount_name: "MyDiscount",
|
|
186
|
+
fixedAmount: {
|
|
187
|
+
type: "centPrecision",
|
|
188
|
+
currencyCode: "USD",
|
|
189
|
+
centAmount: 15000,
|
|
190
|
+
fractionDigits: 2,
|
|
191
|
+
},
|
|
192
|
+
},
|
|
193
|
+
},
|
|
194
|
+
validFrom: "2000-01-01T00:00:01.000Z",
|
|
195
|
+
validUntil: "2000-12-31T23:59:59.999Z",
|
|
196
|
+
sortOrder: "0.1",
|
|
197
|
+
});
|
|
156
198
|
});
|
|
157
199
|
|
|
158
|
-
afterEach(() => {
|
|
159
|
-
ctMock.clear();
|
|
200
|
+
afterEach(async () => {
|
|
201
|
+
await ctMock.clear();
|
|
160
202
|
});
|
|
161
203
|
|
|
162
204
|
test("set key", async () => {
|
|
163
205
|
assert(cartDiscount, "cart discount not created");
|
|
164
206
|
|
|
165
|
-
const response = await
|
|
166
|
-
|
|
167
|
-
.
|
|
207
|
+
const response = await ctMock.app.inject({
|
|
208
|
+
method: "POST",
|
|
209
|
+
url: `/dummy/cart-discounts/${cartDiscount.id}`,
|
|
210
|
+
payload: {
|
|
168
211
|
version: 1,
|
|
169
212
|
actions: [{ action: "setKey", key: "my-cart-discount" }],
|
|
170
|
-
}
|
|
171
|
-
|
|
172
|
-
expect(response.
|
|
173
|
-
expect(response.
|
|
213
|
+
},
|
|
214
|
+
});
|
|
215
|
+
expect(response.statusCode).toBe(200);
|
|
216
|
+
expect(response.json().version).toBe(2);
|
|
217
|
+
expect(response.json().key).toBe("my-cart-discount");
|
|
174
218
|
});
|
|
175
219
|
|
|
176
220
|
test("set description", async () => {
|
|
177
221
|
assert(cartDiscount, "cart discount not created");
|
|
178
222
|
|
|
179
|
-
const response = await
|
|
180
|
-
|
|
181
|
-
.
|
|
223
|
+
const response = await ctMock.app.inject({
|
|
224
|
+
method: "POST",
|
|
225
|
+
url: `/dummy/cart-discounts/${cartDiscount.id}`,
|
|
226
|
+
payload: {
|
|
182
227
|
version: 1,
|
|
183
228
|
actions: [
|
|
184
229
|
{ action: "setDescription", description: { en: "Description" } },
|
|
185
230
|
],
|
|
186
|
-
}
|
|
187
|
-
|
|
188
|
-
expect(response.
|
|
189
|
-
expect(response.
|
|
231
|
+
},
|
|
232
|
+
});
|
|
233
|
+
expect(response.statusCode).toBe(200);
|
|
234
|
+
expect(response.json().version).toBe(2);
|
|
235
|
+
expect(response.json().description.en).toBe("Description");
|
|
190
236
|
});
|
|
191
237
|
|
|
192
238
|
test("set valid from", async () => {
|
|
193
239
|
assert(cartDiscount, "cart discount not created");
|
|
194
240
|
|
|
195
|
-
const response = await
|
|
196
|
-
|
|
197
|
-
.
|
|
241
|
+
const response = await ctMock.app.inject({
|
|
242
|
+
method: "POST",
|
|
243
|
+
url: `/dummy/cart-discounts/${cartDiscount.id}`,
|
|
244
|
+
payload: {
|
|
198
245
|
version: 1,
|
|
199
246
|
actions: [
|
|
200
247
|
{ action: "setValidFrom", validFrom: "2020-01-01T00:00:01.000Z" },
|
|
201
248
|
],
|
|
202
|
-
}
|
|
203
|
-
|
|
204
|
-
expect(response.
|
|
205
|
-
expect(response.
|
|
249
|
+
},
|
|
250
|
+
});
|
|
251
|
+
expect(response.statusCode).toBe(200);
|
|
252
|
+
expect(response.json().version).toBe(2);
|
|
253
|
+
expect(response.json().validFrom).toBe("2020-01-01T00:00:01.000Z");
|
|
206
254
|
});
|
|
207
255
|
|
|
208
256
|
test("set valid until", async () => {
|
|
209
257
|
assert(cartDiscount, "cart discount not created");
|
|
210
258
|
|
|
211
|
-
const response = await
|
|
212
|
-
|
|
213
|
-
.
|
|
259
|
+
const response = await ctMock.app.inject({
|
|
260
|
+
method: "POST",
|
|
261
|
+
url: `/dummy/cart-discounts/${cartDiscount.id}`,
|
|
262
|
+
payload: {
|
|
214
263
|
version: 1,
|
|
215
264
|
actions: [
|
|
216
265
|
{ action: "setValidUntil", validUntil: "2020-12-31T23:59:59.999Z" },
|
|
217
266
|
],
|
|
218
|
-
}
|
|
219
|
-
|
|
220
|
-
expect(response.
|
|
221
|
-
expect(response.
|
|
267
|
+
},
|
|
268
|
+
});
|
|
269
|
+
expect(response.statusCode).toBe(200);
|
|
270
|
+
expect(response.json().version).toBe(2);
|
|
271
|
+
expect(response.json().validUntil).toBe("2020-12-31T23:59:59.999Z");
|
|
222
272
|
});
|
|
223
273
|
|
|
224
274
|
test("set valid from and until", async () => {
|
|
225
275
|
assert(cartDiscount, "cart discount not created");
|
|
226
276
|
|
|
227
|
-
const response = await
|
|
228
|
-
|
|
229
|
-
.
|
|
277
|
+
const response = await ctMock.app.inject({
|
|
278
|
+
method: "POST",
|
|
279
|
+
url: `/dummy/cart-discounts/${cartDiscount.id}`,
|
|
280
|
+
payload: {
|
|
230
281
|
version: 1,
|
|
231
282
|
actions: [
|
|
232
283
|
{
|
|
@@ -235,47 +286,53 @@ describe("Cart Discounts Update Actions", () => {
|
|
|
235
286
|
validUntil: "2020-12-31T23:59:59.999Z",
|
|
236
287
|
},
|
|
237
288
|
],
|
|
238
|
-
}
|
|
239
|
-
|
|
240
|
-
expect(response.
|
|
241
|
-
expect(response.
|
|
242
|
-
expect(response.
|
|
289
|
+
},
|
|
290
|
+
});
|
|
291
|
+
expect(response.statusCode).toBe(200);
|
|
292
|
+
expect(response.json().version).toBe(2);
|
|
293
|
+
expect(response.json().validFrom).toBe("2020-01-01T00:00:01.000Z");
|
|
294
|
+
expect(response.json().validUntil).toBe("2020-12-31T23:59:59.999Z");
|
|
243
295
|
});
|
|
244
296
|
|
|
245
297
|
test("change sort order", async () => {
|
|
246
298
|
assert(cartDiscount, "cart discount not created");
|
|
247
299
|
|
|
248
|
-
const response = await
|
|
249
|
-
|
|
250
|
-
.
|
|
300
|
+
const response = await ctMock.app.inject({
|
|
301
|
+
method: "POST",
|
|
302
|
+
url: `/dummy/cart-discounts/${cartDiscount.id}`,
|
|
303
|
+
payload: {
|
|
251
304
|
version: 1,
|
|
252
305
|
actions: [{ action: "changeSortOrder", sortOrder: "0.2" }],
|
|
253
|
-
}
|
|
254
|
-
|
|
255
|
-
expect(response.
|
|
256
|
-
expect(response.
|
|
306
|
+
},
|
|
307
|
+
});
|
|
308
|
+
expect(response.statusCode).toBe(200);
|
|
309
|
+
expect(response.json().version).toBe(2);
|
|
310
|
+
expect(response.json().sortOrder).toBe("0.2");
|
|
257
311
|
});
|
|
258
312
|
|
|
259
313
|
test("change isActive", async () => {
|
|
260
314
|
assert(cartDiscount, "cart discount not created");
|
|
261
315
|
|
|
262
|
-
const response = await
|
|
263
|
-
|
|
264
|
-
.
|
|
316
|
+
const response = await ctMock.app.inject({
|
|
317
|
+
method: "POST",
|
|
318
|
+
url: `/dummy/cart-discounts/${cartDiscount.id}`,
|
|
319
|
+
payload: {
|
|
265
320
|
version: 1,
|
|
266
321
|
actions: [{ action: "changeIsActive", isActive: true }],
|
|
267
|
-
}
|
|
268
|
-
|
|
269
|
-
expect(response.
|
|
270
|
-
expect(response.
|
|
322
|
+
},
|
|
323
|
+
});
|
|
324
|
+
expect(response.statusCode).toBe(200);
|
|
325
|
+
expect(response.json().version).toBe(2);
|
|
326
|
+
expect(response.json().isActive).toBe(true);
|
|
271
327
|
});
|
|
272
328
|
|
|
273
329
|
test("change target", async () => {
|
|
274
330
|
assert(cartDiscount, "cart discount not created");
|
|
275
331
|
|
|
276
|
-
const response = await
|
|
277
|
-
|
|
278
|
-
.
|
|
332
|
+
const response = await ctMock.app.inject({
|
|
333
|
+
method: "POST",
|
|
334
|
+
url: `/dummy/cart-discounts/${cartDiscount.id}`,
|
|
335
|
+
payload: {
|
|
279
336
|
version: 1,
|
|
280
337
|
actions: [
|
|
281
338
|
{
|
|
@@ -283,10 +340,11 @@ describe("Cart Discounts Update Actions", () => {
|
|
|
283
340
|
target: { type: "shippingInfo", predicate: "2=2" },
|
|
284
341
|
},
|
|
285
342
|
],
|
|
286
|
-
}
|
|
287
|
-
|
|
288
|
-
expect(response.
|
|
289
|
-
expect(response.
|
|
343
|
+
},
|
|
344
|
+
});
|
|
345
|
+
expect(response.statusCode).toBe(200);
|
|
346
|
+
expect(response.json().version).toBe(2);
|
|
347
|
+
expect(response.json().target).toStrictEqual({
|
|
290
348
|
type: "shippingInfo",
|
|
291
349
|
predicate: "2=2",
|
|
292
350
|
});
|
|
@@ -295,9 +353,10 @@ describe("Cart Discounts Update Actions", () => {
|
|
|
295
353
|
test("set custom field", async () => {
|
|
296
354
|
assert(cartDiscount, "cart discount not created");
|
|
297
355
|
|
|
298
|
-
const response = await
|
|
299
|
-
|
|
300
|
-
.
|
|
356
|
+
const response = await ctMock.app.inject({
|
|
357
|
+
method: "POST",
|
|
358
|
+
url: `/dummy/cart-discounts/${cartDiscount.id}`,
|
|
359
|
+
payload: {
|
|
301
360
|
version: 1,
|
|
302
361
|
actions: [
|
|
303
362
|
{
|
|
@@ -311,10 +370,11 @@ describe("Cart Discounts Update Actions", () => {
|
|
|
311
370
|
},
|
|
312
371
|
},
|
|
313
372
|
],
|
|
314
|
-
}
|
|
315
|
-
|
|
316
|
-
expect(response.
|
|
317
|
-
expect(response.
|
|
373
|
+
},
|
|
374
|
+
});
|
|
375
|
+
expect(response.statusCode).toBe(200);
|
|
376
|
+
expect(response.json().version).toBe(2);
|
|
377
|
+
expect(response.json().custom.fields.fixedAmount).toStrictEqual({
|
|
318
378
|
type: "centPrecision",
|
|
319
379
|
currencyCode: "EUR",
|
|
320
380
|
centAmount: 15,
|
|
@@ -325,9 +385,10 @@ describe("Cart Discounts Update Actions", () => {
|
|
|
325
385
|
test("reset custom field", async () => {
|
|
326
386
|
assert(cartDiscount, "cart discount not created");
|
|
327
387
|
|
|
328
|
-
const response = await
|
|
329
|
-
|
|
330
|
-
.
|
|
388
|
+
const response = await ctMock.app.inject({
|
|
389
|
+
method: "POST",
|
|
390
|
+
url: `/dummy/cart-discounts/${cartDiscount.id}`,
|
|
391
|
+
payload: {
|
|
331
392
|
version: 1,
|
|
332
393
|
actions: [
|
|
333
394
|
{
|
|
@@ -336,18 +397,20 @@ describe("Cart Discounts Update Actions", () => {
|
|
|
336
397
|
value: null,
|
|
337
398
|
},
|
|
338
399
|
],
|
|
339
|
-
}
|
|
340
|
-
|
|
341
|
-
expect(response.
|
|
342
|
-
expect(response.
|
|
400
|
+
},
|
|
401
|
+
});
|
|
402
|
+
expect(response.statusCode).toBe(200);
|
|
403
|
+
expect(response.json().version).toBe(2);
|
|
404
|
+
expect(response.json().custom.fields.fixedAmount).toBeUndefined();
|
|
343
405
|
});
|
|
344
406
|
|
|
345
407
|
test("reset non-existing custom field", async () => {
|
|
346
408
|
assert(cartDiscount, "cart discount not created");
|
|
347
409
|
|
|
348
|
-
const response = await
|
|
349
|
-
|
|
350
|
-
.
|
|
410
|
+
const response = await ctMock.app.inject({
|
|
411
|
+
method: "POST",
|
|
412
|
+
url: `/dummy/cart-discounts/${cartDiscount.id}`,
|
|
413
|
+
payload: {
|
|
351
414
|
version: 1,
|
|
352
415
|
actions: [
|
|
353
416
|
{
|
|
@@ -356,25 +419,28 @@ describe("Cart Discounts Update Actions", () => {
|
|
|
356
419
|
value: null,
|
|
357
420
|
},
|
|
358
421
|
],
|
|
359
|
-
}
|
|
360
|
-
|
|
422
|
+
},
|
|
423
|
+
});
|
|
424
|
+
expect(response.statusCode).toBe(400);
|
|
361
425
|
});
|
|
362
426
|
|
|
363
427
|
test("remove all custom fields", async () => {
|
|
364
428
|
assert(cartDiscount, "cart discount not created");
|
|
365
429
|
|
|
366
|
-
const response = await
|
|
367
|
-
|
|
368
|
-
.
|
|
430
|
+
const response = await ctMock.app.inject({
|
|
431
|
+
method: "POST",
|
|
432
|
+
url: `/dummy/cart-discounts/${cartDiscount.id}`,
|
|
433
|
+
payload: {
|
|
369
434
|
version: 1,
|
|
370
435
|
actions: [
|
|
371
436
|
{
|
|
372
437
|
action: "setCustomType",
|
|
373
438
|
},
|
|
374
439
|
],
|
|
375
|
-
}
|
|
376
|
-
|
|
377
|
-
expect(response.
|
|
378
|
-
expect(response.
|
|
440
|
+
},
|
|
441
|
+
});
|
|
442
|
+
expect(response.statusCode).toBe(200);
|
|
443
|
+
expect(response.json().version).toBe(2);
|
|
444
|
+
expect(response.json().custom).toBeUndefined();
|
|
379
445
|
});
|
|
380
446
|
});
|
|
@@ -1,11 +1,11 @@
|
|
|
1
|
-
import type {
|
|
1
|
+
import type { FastifyInstance } from "fastify";
|
|
2
2
|
import type { CartDiscountRepository } from "../repositories/cart-discount/index.ts";
|
|
3
3
|
import AbstractService from "./abstract.ts";
|
|
4
4
|
|
|
5
5
|
export class CartDiscountService extends AbstractService {
|
|
6
6
|
public repository: CartDiscountRepository;
|
|
7
7
|
|
|
8
|
-
constructor(parent:
|
|
8
|
+
constructor(parent: FastifyInstance, repository: CartDiscountRepository) {
|
|
9
9
|
super(parent);
|
|
10
10
|
this.repository = repository;
|
|
11
11
|
}
|