@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,199 +1,169 @@
|
|
|
1
|
-
import type { BusinessUnitDraft } from "@commercetools/platform-sdk";
|
|
2
|
-
import supertest from "supertest";
|
|
3
1
|
import { afterEach, describe, expect, test } from "vitest";
|
|
2
|
+
import { businessUnitDraftFactory } from "#src/testing/business-unit.ts";
|
|
4
3
|
import { CommercetoolsMock } from "../index.ts";
|
|
5
4
|
|
|
6
5
|
const ctMock = new CommercetoolsMock();
|
|
7
6
|
|
|
8
7
|
describe("MyBusinessUnit", () => {
|
|
9
|
-
|
|
10
|
-
|
|
8
|
+
const businessUnitFactory = businessUnitDraftFactory(ctMock);
|
|
9
|
+
|
|
10
|
+
afterEach(async () => {
|
|
11
|
+
await ctMock.clear();
|
|
11
12
|
});
|
|
12
13
|
|
|
13
14
|
test("Get my business units", async () => {
|
|
14
|
-
|
|
15
|
-
const draft: BusinessUnitDraft = {
|
|
15
|
+
await businessUnitFactory.create({
|
|
16
16
|
key: "my-business-unit",
|
|
17
17
|
unitType: "Company",
|
|
18
18
|
name: "My Business Unit",
|
|
19
19
|
contactEmail: "contact@example.com",
|
|
20
|
-
};
|
|
21
|
-
const createResponse = await supertest(ctMock.app)
|
|
22
|
-
.post("/dummy/business-units")
|
|
23
|
-
.send(draft);
|
|
24
|
-
|
|
25
|
-
expect(createResponse.status).toBe(201);
|
|
20
|
+
});
|
|
26
21
|
|
|
27
|
-
const response = await
|
|
28
|
-
"
|
|
29
|
-
|
|
22
|
+
const response = await ctMock.app.inject({
|
|
23
|
+
method: "GET",
|
|
24
|
+
url: "/dummy/me/business-units",
|
|
25
|
+
});
|
|
30
26
|
|
|
31
|
-
expect(response.
|
|
32
|
-
expect(response.
|
|
33
|
-
expect(response.
|
|
27
|
+
expect(response.statusCode).toBe(200);
|
|
28
|
+
expect(response.json().count).toBeGreaterThanOrEqual(0);
|
|
29
|
+
expect(response.json().results).toBeDefined();
|
|
34
30
|
});
|
|
35
31
|
|
|
36
32
|
test("Get my business unit by ID", async () => {
|
|
37
|
-
|
|
38
|
-
const draft: BusinessUnitDraft = {
|
|
33
|
+
const businessUnit = await businessUnitFactory.create({
|
|
39
34
|
key: "my-business-unit",
|
|
40
35
|
unitType: "Company",
|
|
41
36
|
name: "My Business Unit",
|
|
42
37
|
contactEmail: "contact@example.com",
|
|
43
|
-
};
|
|
44
|
-
const createResponse = await supertest(ctMock.app)
|
|
45
|
-
.post("/dummy/business-units")
|
|
46
|
-
.send(draft);
|
|
47
|
-
|
|
48
|
-
expect(createResponse.status).toBe(201);
|
|
38
|
+
});
|
|
49
39
|
|
|
50
|
-
const response = await
|
|
51
|
-
|
|
52
|
-
|
|
40
|
+
const response = await ctMock.app.inject({
|
|
41
|
+
method: "GET",
|
|
42
|
+
url: `/dummy/me/business-units/${businessUnit.id}`,
|
|
43
|
+
});
|
|
53
44
|
|
|
54
|
-
expect(response.
|
|
55
|
-
expect(response.
|
|
45
|
+
expect(response.statusCode).toBe(200);
|
|
46
|
+
expect(response.json()).toEqual(businessUnit);
|
|
56
47
|
});
|
|
57
48
|
|
|
58
49
|
test("Get my business unit by key", async () => {
|
|
59
|
-
|
|
60
|
-
const draft: BusinessUnitDraft = {
|
|
50
|
+
const businessUnit = await businessUnitFactory.create({
|
|
61
51
|
key: "my-business-unit",
|
|
62
52
|
unitType: "Company",
|
|
63
53
|
name: "My Business Unit",
|
|
64
54
|
contactEmail: "contact@example.com",
|
|
65
|
-
};
|
|
66
|
-
const createResponse = await supertest(ctMock.app)
|
|
67
|
-
.post("/dummy/business-units")
|
|
68
|
-
.send(draft);
|
|
55
|
+
});
|
|
69
56
|
|
|
70
|
-
|
|
57
|
+
const response = await ctMock.app.inject({
|
|
58
|
+
method: "GET",
|
|
59
|
+
url: `/dummy/me/business-units/key=${businessUnit.key}`,
|
|
60
|
+
});
|
|
71
61
|
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
);
|
|
75
|
-
|
|
76
|
-
expect(response.status).toBe(200);
|
|
77
|
-
expect(response.body).toEqual(createResponse.body);
|
|
62
|
+
expect(response.statusCode).toBe(200);
|
|
63
|
+
expect(response.json()).toEqual(businessUnit);
|
|
78
64
|
});
|
|
79
65
|
|
|
80
66
|
test("Delete my business unit", async () => {
|
|
81
|
-
|
|
82
|
-
const draft: BusinessUnitDraft = {
|
|
67
|
+
const businessUnit = await businessUnitFactory.create({
|
|
83
68
|
key: "my-business-unit",
|
|
84
69
|
unitType: "Company",
|
|
85
70
|
name: "My Business Unit",
|
|
86
71
|
contactEmail: "contact@example.com",
|
|
87
|
-
};
|
|
88
|
-
const createResponse = await supertest(ctMock.app)
|
|
89
|
-
.post("/dummy/business-units")
|
|
90
|
-
.send(draft);
|
|
91
|
-
|
|
92
|
-
expect(createResponse.status).toBe(201);
|
|
72
|
+
});
|
|
93
73
|
|
|
94
74
|
// Now delete the business unit
|
|
95
|
-
const deleteResponse = await
|
|
96
|
-
|
|
97
|
-
|
|
75
|
+
const deleteResponse = await ctMock.app.inject({
|
|
76
|
+
method: "DELETE",
|
|
77
|
+
url: `/dummy/me/business-units/${businessUnit.id}`,
|
|
78
|
+
});
|
|
98
79
|
|
|
99
|
-
expect(deleteResponse.
|
|
100
|
-
expect(deleteResponse.
|
|
80
|
+
expect(deleteResponse.statusCode).toBe(200);
|
|
81
|
+
expect(deleteResponse.json()).toEqual(businessUnit);
|
|
101
82
|
|
|
102
83
|
// Verify that the business unit is deleted
|
|
103
|
-
const newResponse = await
|
|
104
|
-
|
|
105
|
-
|
|
106
|
-
|
|
84
|
+
const newResponse = await ctMock.app.inject({
|
|
85
|
+
method: "GET",
|
|
86
|
+
url: `/dummy/me/business-units/${businessUnit.id}`,
|
|
87
|
+
});
|
|
88
|
+
expect(newResponse.statusCode).toBe(404);
|
|
107
89
|
});
|
|
108
90
|
|
|
109
91
|
test("Delete my business unit by key", async () => {
|
|
110
|
-
|
|
111
|
-
const draft: BusinessUnitDraft = {
|
|
92
|
+
const businessUnit = await businessUnitFactory.create({
|
|
112
93
|
key: "my-business-unit",
|
|
113
94
|
unitType: "Company",
|
|
114
95
|
name: "My Business Unit",
|
|
115
96
|
contactEmail: "contact@example.com",
|
|
116
|
-
};
|
|
117
|
-
const createResponse = await supertest(ctMock.app)
|
|
118
|
-
.post("/dummy/business-units")
|
|
119
|
-
.send(draft);
|
|
120
|
-
|
|
121
|
-
expect(createResponse.status).toBe(201);
|
|
97
|
+
});
|
|
122
98
|
|
|
123
99
|
// Now delete the business unit
|
|
124
|
-
const deleteResponse = await
|
|
125
|
-
|
|
126
|
-
|
|
100
|
+
const deleteResponse = await ctMock.app.inject({
|
|
101
|
+
method: "DELETE",
|
|
102
|
+
url: `/dummy/me/business-units/key=${businessUnit.key}`,
|
|
103
|
+
});
|
|
127
104
|
|
|
128
|
-
expect(deleteResponse.
|
|
129
|
-
expect(deleteResponse.
|
|
105
|
+
expect(deleteResponse.statusCode).toBe(200);
|
|
106
|
+
expect(deleteResponse.json()).toEqual(businessUnit);
|
|
130
107
|
|
|
131
108
|
// Verify that the business unit is deleted
|
|
132
|
-
const newResponse = await
|
|
133
|
-
|
|
134
|
-
|
|
135
|
-
|
|
109
|
+
const newResponse = await ctMock.app.inject({
|
|
110
|
+
method: "GET",
|
|
111
|
+
url: `/dummy/me/business-units/key=${businessUnit.key}`,
|
|
112
|
+
});
|
|
113
|
+
expect(newResponse.statusCode).toBe(404);
|
|
136
114
|
});
|
|
137
115
|
|
|
138
116
|
test("Update my business unit", async () => {
|
|
139
|
-
|
|
140
|
-
const draft: BusinessUnitDraft = {
|
|
117
|
+
const businessUnit = await businessUnitFactory.create({
|
|
141
118
|
key: "my-business-unit",
|
|
142
119
|
unitType: "Company",
|
|
143
120
|
name: "My Business Unit",
|
|
144
121
|
contactEmail: "contact@example.com",
|
|
145
|
-
};
|
|
146
|
-
|
|
147
|
-
|
|
148
|
-
|
|
149
|
-
|
|
150
|
-
|
|
151
|
-
|
|
152
|
-
|
|
153
|
-
.post(`/dummy/me/business-units/${createResponse.body.id}`)
|
|
154
|
-
.send({
|
|
155
|
-
id: createResponse.body.id,
|
|
156
|
-
version: createResponse.body.version,
|
|
122
|
+
});
|
|
123
|
+
|
|
124
|
+
const updateResponse = await ctMock.app.inject({
|
|
125
|
+
method: "POST",
|
|
126
|
+
url: `/dummy/me/business-units/${businessUnit.id}`,
|
|
127
|
+
payload: {
|
|
128
|
+
id: businessUnit.id,
|
|
129
|
+
version: businessUnit.version,
|
|
157
130
|
actions: [
|
|
158
131
|
{
|
|
159
132
|
action: "changeName",
|
|
160
133
|
name: "Updated Business Unit Name",
|
|
161
134
|
},
|
|
162
135
|
],
|
|
163
|
-
}
|
|
136
|
+
},
|
|
137
|
+
});
|
|
164
138
|
|
|
165
|
-
expect(updateResponse.
|
|
166
|
-
expect(updateResponse.
|
|
139
|
+
expect(updateResponse.statusCode).toBe(200);
|
|
140
|
+
expect(updateResponse.json().name).toBe("Updated Business Unit Name");
|
|
167
141
|
});
|
|
168
142
|
|
|
169
143
|
test("Update my business unit by key", async () => {
|
|
170
|
-
|
|
171
|
-
const draft: BusinessUnitDraft = {
|
|
144
|
+
const businessUnit = await businessUnitFactory.create({
|
|
172
145
|
key: "my-business-unit",
|
|
173
146
|
unitType: "Company",
|
|
174
147
|
name: "My Business Unit",
|
|
175
148
|
contactEmail: "contact@example.com",
|
|
176
|
-
};
|
|
177
|
-
|
|
178
|
-
|
|
179
|
-
|
|
180
|
-
|
|
181
|
-
|
|
182
|
-
|
|
183
|
-
|
|
184
|
-
.post(`/dummy/me/business-units/key=${createResponse.body.key}`)
|
|
185
|
-
.send({
|
|
186
|
-
id: createResponse.body.id,
|
|
187
|
-
version: createResponse.body.version,
|
|
149
|
+
});
|
|
150
|
+
|
|
151
|
+
const updateResponse = await ctMock.app.inject({
|
|
152
|
+
method: "POST",
|
|
153
|
+
url: `/dummy/me/business-units/key=${businessUnit.key}`,
|
|
154
|
+
payload: {
|
|
155
|
+
id: businessUnit.id,
|
|
156
|
+
version: businessUnit.version,
|
|
188
157
|
actions: [
|
|
189
158
|
{
|
|
190
159
|
action: "changeName",
|
|
191
160
|
name: "Updated Business Unit Name",
|
|
192
161
|
},
|
|
193
162
|
],
|
|
194
|
-
}
|
|
163
|
+
},
|
|
164
|
+
});
|
|
195
165
|
|
|
196
|
-
expect(updateResponse.
|
|
197
|
-
expect(updateResponse.
|
|
166
|
+
expect(updateResponse.statusCode).toBe(200);
|
|
167
|
+
expect(updateResponse.json().name).toBe("Updated Business Unit Name");
|
|
198
168
|
});
|
|
199
169
|
});
|
|
@@ -1,11 +1,11 @@
|
|
|
1
|
-
import {
|
|
1
|
+
import type { FastifyInstance } from "fastify";
|
|
2
2
|
import type { BusinessUnitRepository } from "#src/repositories/business-unit.ts";
|
|
3
3
|
import AbstractService from "./abstract.ts";
|
|
4
4
|
|
|
5
5
|
export class MyBusinessUnitService extends AbstractService {
|
|
6
6
|
public repository: BusinessUnitRepository;
|
|
7
7
|
|
|
8
|
-
constructor(parent:
|
|
8
|
+
constructor(parent: FastifyInstance, repository: BusinessUnitRepository) {
|
|
9
9
|
super(parent);
|
|
10
10
|
this.repository = repository;
|
|
11
11
|
}
|
|
@@ -14,24 +14,30 @@ export class MyBusinessUnitService extends AbstractService {
|
|
|
14
14
|
return "me";
|
|
15
15
|
}
|
|
16
16
|
|
|
17
|
-
registerRoutes(parent:
|
|
17
|
+
registerRoutes(parent: FastifyInstance) {
|
|
18
18
|
// Overwrite this function to be able to handle /me/business-units path.
|
|
19
19
|
const basePath = this.getBasePath();
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
20
|
+
parent.register(
|
|
21
|
+
(instance, opts, done) => {
|
|
22
|
+
this.extraRoutes(instance);
|
|
23
|
+
|
|
24
|
+
instance.get("/business-units", this.get.bind(this));
|
|
25
|
+
instance.get("/business-units/key=:key", this.getWithKey.bind(this));
|
|
26
|
+
instance.get("/business-units/:id", this.getWithId.bind(this));
|
|
27
|
+
|
|
28
|
+
instance.delete(
|
|
29
|
+
"/business-units/key=:key",
|
|
30
|
+
this.deleteWithKey.bind(this),
|
|
31
|
+
);
|
|
32
|
+
instance.delete("/business-units/:id", this.deleteWithId.bind(this));
|
|
33
|
+
|
|
34
|
+
instance.post("/business-units", this.post.bind(this));
|
|
35
|
+
instance.post("/business-units/key=:key", this.postWithKey.bind(this));
|
|
36
|
+
instance.post("/business-units/:id", this.postWithId.bind(this));
|
|
37
|
+
|
|
38
|
+
done();
|
|
39
|
+
},
|
|
40
|
+
{ prefix: `/${basePath}` },
|
|
41
|
+
);
|
|
36
42
|
}
|
|
37
43
|
}
|
|
@@ -1,42 +1,46 @@
|
|
|
1
|
-
import type { Cart
|
|
2
|
-
import supertest from "supertest";
|
|
1
|
+
import type { Cart } from "@commercetools/platform-sdk";
|
|
3
2
|
import { afterEach, beforeEach, describe, expect, test } from "vitest";
|
|
3
|
+
import { cartDraftFactory, typeDraftFactory } from "#src/testing/index.ts";
|
|
4
4
|
import { CommercetoolsMock } from "../index.ts";
|
|
5
5
|
|
|
6
6
|
const ctMock = new CommercetoolsMock();
|
|
7
7
|
|
|
8
8
|
describe("MyCart", () => {
|
|
9
|
+
const cartDraft = cartDraftFactory(ctMock);
|
|
10
|
+
const typeDraft = typeDraftFactory(ctMock);
|
|
11
|
+
|
|
9
12
|
beforeEach(async () => {
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
resourceTypeIds: ["payment"],
|
|
18
|
-
});
|
|
19
|
-
expect(response.status).toBe(201);
|
|
13
|
+
await typeDraft.create({
|
|
14
|
+
key: "custom-payment",
|
|
15
|
+
name: {
|
|
16
|
+
"nl-NL": "custom-payment",
|
|
17
|
+
},
|
|
18
|
+
resourceTypeIds: ["payment"],
|
|
19
|
+
});
|
|
20
20
|
});
|
|
21
21
|
|
|
22
|
-
afterEach(() => {
|
|
23
|
-
ctMock.clear();
|
|
22
|
+
afterEach(async () => {
|
|
23
|
+
await ctMock.clear();
|
|
24
24
|
});
|
|
25
25
|
|
|
26
26
|
test("Create my cart", async () => {
|
|
27
|
-
const draft
|
|
27
|
+
const draft = cartDraft.build({
|
|
28
28
|
currency: "EUR",
|
|
29
|
-
};
|
|
29
|
+
});
|
|
30
30
|
|
|
31
|
-
const response = await
|
|
32
|
-
|
|
33
|
-
|
|
31
|
+
const response = await ctMock.app.inject({
|
|
32
|
+
method: "POST",
|
|
33
|
+
url: "/dummy/me/carts",
|
|
34
|
+
payload: draft,
|
|
35
|
+
});
|
|
34
36
|
|
|
35
|
-
expect(response.
|
|
36
|
-
expect(response.
|
|
37
|
+
expect(response.statusCode).toBe(201);
|
|
38
|
+
expect(response.json()).toEqual({
|
|
37
39
|
id: expect.anything(),
|
|
38
40
|
createdAt: expect.anything(),
|
|
41
|
+
createdBy: expect.anything(),
|
|
39
42
|
lastModifiedAt: expect.anything(),
|
|
43
|
+
lastModifiedBy: expect.anything(),
|
|
40
44
|
version: 1,
|
|
41
45
|
cartState: "Active",
|
|
42
46
|
discountCodes: [],
|
|
@@ -63,38 +67,39 @@ describe("MyCart", () => {
|
|
|
63
67
|
});
|
|
64
68
|
|
|
65
69
|
test("Get my cart by ID", async () => {
|
|
66
|
-
const
|
|
70
|
+
const cart = await cartDraft.create({
|
|
67
71
|
currency: "EUR",
|
|
68
|
-
};
|
|
69
|
-
const createResponse = await supertest(ctMock.app)
|
|
70
|
-
.post("/dummy/me/carts")
|
|
71
|
-
.send(draft);
|
|
72
|
+
});
|
|
72
73
|
|
|
73
|
-
const response = await
|
|
74
|
-
|
|
75
|
-
|
|
74
|
+
const response = await ctMock.app.inject({
|
|
75
|
+
method: "GET",
|
|
76
|
+
url: `/dummy/me/carts/${cart.id}`,
|
|
77
|
+
});
|
|
76
78
|
|
|
77
|
-
expect(response.
|
|
78
|
-
expect(response.
|
|
79
|
+
expect(response.statusCode).toBe(200);
|
|
80
|
+
expect(response.json()).toEqual(cart);
|
|
79
81
|
});
|
|
80
82
|
|
|
81
83
|
test("Get my active cart", async () => {
|
|
82
|
-
const
|
|
84
|
+
const cart = await cartDraft.create({
|
|
83
85
|
currency: "EUR",
|
|
84
|
-
};
|
|
85
|
-
const createResponse = await supertest(ctMock.app)
|
|
86
|
-
.post("/dummy/me/carts")
|
|
87
|
-
.send(draft);
|
|
86
|
+
});
|
|
88
87
|
|
|
89
|
-
const response = await
|
|
88
|
+
const response = await ctMock.app.inject({
|
|
89
|
+
method: "GET",
|
|
90
|
+
url: "/dummy/me/active-cart",
|
|
91
|
+
});
|
|
90
92
|
|
|
91
|
-
expect(response.
|
|
92
|
-
expect(response.
|
|
93
|
+
expect(response.statusCode).toBe(200);
|
|
94
|
+
expect(response.json()).toEqual(cart);
|
|
93
95
|
});
|
|
94
96
|
|
|
95
97
|
test("Get my active cart which doesnt exists", async () => {
|
|
96
|
-
const response = await
|
|
98
|
+
const response = await ctMock.app.inject({
|
|
99
|
+
method: "GET",
|
|
100
|
+
url: "/dummy/me/active-cart",
|
|
101
|
+
});
|
|
97
102
|
|
|
98
|
-
expect(response.
|
|
103
|
+
expect(response.statusCode).toBe(404);
|
|
99
104
|
});
|
|
100
105
|
});
|
package/src/services/my-cart.ts
CHANGED
|
@@ -1,12 +1,13 @@
|
|
|
1
|
-
import type {
|
|
2
|
-
import {
|
|
1
|
+
import type { ResourceNotFoundError } from "@commercetools/platform-sdk";
|
|
2
|
+
import type { FastifyInstance, FastifyReply, FastifyRequest } from "fastify";
|
|
3
|
+
import { CommercetoolsError } from "#src/exceptions.ts";
|
|
3
4
|
import type { CartRepository } from "../repositories/cart/index.ts";
|
|
4
5
|
import AbstractService from "./abstract.ts";
|
|
5
6
|
|
|
6
7
|
export class MyCartService extends AbstractService {
|
|
7
8
|
public repository: CartRepository;
|
|
8
9
|
|
|
9
|
-
constructor(parent:
|
|
10
|
+
constructor(parent: FastifyInstance, repository: CartRepository) {
|
|
10
11
|
super(parent);
|
|
11
12
|
this.repository = repository;
|
|
12
13
|
}
|
|
@@ -15,40 +16,43 @@ export class MyCartService extends AbstractService {
|
|
|
15
16
|
return "me";
|
|
16
17
|
}
|
|
17
18
|
|
|
18
|
-
registerRoutes(parent:
|
|
19
|
+
registerRoutes(parent: FastifyInstance) {
|
|
19
20
|
// Overwrite this function to be able to handle /me/active-cart path.
|
|
20
21
|
const basePath = this.getBasePath();
|
|
21
|
-
|
|
22
|
+
parent.register(
|
|
23
|
+
(instance, opts, done) => {
|
|
24
|
+
this.extraRoutes(instance);
|
|
22
25
|
|
|
23
|
-
|
|
26
|
+
instance.get("/active-cart", this.activeCart.bind(this));
|
|
27
|
+
instance.get("/carts", this.get.bind(this));
|
|
28
|
+
instance.get("/carts/:id", this.getWithId.bind(this));
|
|
24
29
|
|
|
25
|
-
|
|
26
|
-
router.get("/carts/", this.get.bind(this));
|
|
27
|
-
router.get("/carts/:id", this.getWithId.bind(this));
|
|
30
|
+
instance.delete("/carts/:id", this.deleteWithId.bind(this));
|
|
28
31
|
|
|
29
|
-
|
|
32
|
+
instance.post("/carts", this.post.bind(this));
|
|
33
|
+
instance.post("/carts/:id", this.postWithId.bind(this));
|
|
30
34
|
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
+
done();
|
|
36
|
+
},
|
|
37
|
+
{ prefix: `/${basePath}` },
|
|
38
|
+
);
|
|
35
39
|
}
|
|
36
40
|
|
|
37
|
-
activeCart(
|
|
38
|
-
|
|
41
|
+
async activeCart(
|
|
42
|
+
request: FastifyRequest<{ Params: Record<string, string> }>,
|
|
43
|
+
reply: FastifyReply,
|
|
44
|
+
) {
|
|
45
|
+
const params = request.params;
|
|
46
|
+
const resource = await this.repository.getActiveCart(params.projectKey);
|
|
39
47
|
if (!resource) {
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
},
|
|
48
|
-
],
|
|
49
|
-
});
|
|
50
|
-
return;
|
|
48
|
+
throw new CommercetoolsError<ResourceNotFoundError>(
|
|
49
|
+
{
|
|
50
|
+
code: "ResourceNotFound",
|
|
51
|
+
message: "No active cart exists.",
|
|
52
|
+
},
|
|
53
|
+
404,
|
|
54
|
+
);
|
|
51
55
|
}
|
|
52
|
-
|
|
56
|
+
return reply.status(200).send(resource);
|
|
53
57
|
}
|
|
54
58
|
}
|