@labdigital/commercetools-mock 2.17.1 → 2.18.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/dist/index.cjs +4186 -3974
- package/dist/index.cjs.map +1 -1
- package/dist/index.d.cts +266 -413
- package/dist/index.d.ts +266 -413
- package/dist/index.js +4186 -3974
- package/dist/index.js.map +1 -1
- package/package.json +44 -46
- package/src/constants.ts +2 -2
- package/src/ctMock.test.ts +11 -11
- package/src/ctMock.ts +141 -127
- package/src/deprecation.ts +8 -0
- package/src/exceptions.ts +17 -15
- package/src/helpers.ts +32 -32
- package/src/index.test.ts +128 -128
- package/src/index.ts +3 -3
- package/src/lib/expandParser.ts +13 -13
- package/src/lib/haversine.test.ts +9 -9
- package/src/lib/haversine.ts +11 -11
- package/src/lib/masking.ts +11 -11
- package/src/lib/parser.ts +2 -2
- package/src/lib/password.ts +23 -3
- package/src/lib/predicateParser.test.ts +185 -183
- package/src/lib/predicateParser.ts +234 -234
- package/src/lib/projectionSearchFilter.test.ts +103 -101
- package/src/lib/projectionSearchFilter.ts +152 -150
- package/src/lib/proxy.ts +5 -5
- package/src/oauth/errors.ts +4 -4
- package/src/oauth/helpers.ts +6 -6
- package/src/oauth/server.test.ts +86 -86
- package/src/oauth/server.ts +158 -144
- package/src/oauth/store.ts +44 -43
- package/src/priceSelector.test.ts +35 -35
- package/src/priceSelector.ts +30 -30
- package/src/product-projection-search.ts +136 -134
- package/src/projectAPI.test.ts +7 -7
- package/src/projectAPI.ts +24 -22
- package/src/repositories/abstract.ts +168 -116
- package/src/repositories/associate-role.ts +90 -77
- package/src/repositories/attribute-group.ts +51 -40
- package/src/repositories/business-unit.ts +168 -148
- package/src/repositories/cart/actions.ts +489 -0
- package/src/repositories/cart/helpers.ts +30 -0
- package/src/repositories/cart/index.ts +180 -0
- package/src/repositories/cart-discount/actions.ts +148 -0
- package/src/repositories/cart-discount/index.ts +86 -0
- package/src/repositories/category/actions.ts +231 -0
- package/src/repositories/category/index.ts +52 -0
- package/src/repositories/channel.ts +88 -90
- package/src/repositories/custom-object.ts +46 -45
- package/src/repositories/customer/actions.ts +165 -0
- package/src/repositories/customer/index.ts +79 -0
- package/src/repositories/customer-group.ts +66 -55
- package/src/repositories/discount-code/actions.ts +149 -0
- package/src/repositories/discount-code/index.ts +50 -0
- package/src/repositories/errors.ts +10 -10
- package/src/repositories/extension.ts +64 -62
- package/src/repositories/helpers.ts +117 -118
- package/src/repositories/index.ts +80 -79
- package/src/repositories/inventory-entry/actions.ts +84 -0
- package/src/repositories/inventory-entry/index.ts +44 -0
- package/src/repositories/my-customer.ts +114 -0
- package/src/repositories/my-order.ts +8 -8
- package/src/repositories/order/actions.ts +281 -0
- package/src/repositories/{order.test.ts → order/index.test.ts} +77 -77
- package/src/repositories/order/index.ts +260 -0
- package/src/repositories/order-edit.ts +10 -23
- package/src/repositories/payment/actions.ts +305 -0
- package/src/repositories/payment/helpers.ts +17 -0
- package/src/repositories/payment/index.ts +56 -0
- package/src/repositories/product/actions.ts +943 -0
- package/src/repositories/product/helpers.ts +98 -0
- package/src/repositories/product/index.ts +130 -0
- package/src/repositories/product-discount.ts +127 -117
- package/src/repositories/product-projection.ts +56 -62
- package/src/repositories/product-selection.ts +31 -28
- package/src/repositories/product-type.ts +136 -134
- package/src/repositories/project.ts +133 -118
- package/src/repositories/quote-request.ts +7 -19
- package/src/repositories/quote.ts +7 -22
- package/src/repositories/review.ts +13 -26
- package/src/repositories/shipping-method/actions.ts +198 -0
- package/src/repositories/shipping-method/helpers.ts +10 -0
- package/src/repositories/shipping-method/index.ts +138 -0
- package/src/repositories/shopping-list/actions.ts +295 -0
- package/src/repositories/shopping-list/index.ts +122 -0
- package/src/repositories/staged-quote.ts +7 -20
- package/src/repositories/standalone-price.ts +57 -44
- package/src/repositories/state.ts +113 -68
- package/src/repositories/store.ts +106 -94
- package/src/repositories/subscription.ts +46 -22
- package/src/repositories/tax-category/actions.ts +94 -0
- package/src/repositories/tax-category/helpers.ts +8 -0
- package/src/repositories/tax-category/index.ts +25 -0
- package/src/repositories/type/actions.ts +162 -0
- package/src/repositories/type/index.ts +24 -0
- package/src/repositories/zone.ts +62 -58
- package/src/server.ts +9 -9
- package/src/services/abstract.ts +75 -72
- package/src/services/associate-roles.test.ts +27 -27
- package/src/services/associate-roles.ts +7 -7
- package/src/services/attribute-group.ts +7 -7
- package/src/services/business-units.test.ts +28 -28
- package/src/services/business-units.ts +7 -7
- package/src/services/cart-discount.test.ts +199 -199
- package/src/services/cart-discount.ts +7 -7
- package/src/services/cart.test.ts +261 -261
- package/src/services/cart.ts +22 -21
- package/src/services/category.test.ts +121 -121
- package/src/services/category.ts +7 -7
- package/src/services/channel.ts +7 -7
- package/src/services/custom-object.test.ts +130 -130
- package/src/services/custom-object.ts +34 -31
- package/src/services/customer-group.ts +7 -7
- package/src/services/customer.test.ts +205 -205
- package/src/services/customer.ts +23 -36
- package/src/services/discount-code.ts +7 -7
- package/src/services/extension.ts +7 -7
- package/src/services/index.ts +85 -81
- package/src/services/inventory-entry.test.ts +106 -106
- package/src/services/inventory-entry.ts +7 -7
- package/src/services/my-cart.test.ts +56 -56
- package/src/services/my-cart.ts +20 -20
- package/src/services/my-customer.test.ts +155 -104
- package/src/services/my-customer.ts +61 -75
- package/src/services/my-order.ts +16 -16
- package/src/services/my-payment.test.ts +40 -40
- package/src/services/my-payment.ts +7 -7
- package/src/services/my-shopping-list.ts +7 -7
- package/src/services/order.test.ts +243 -243
- package/src/services/order.ts +23 -18
- package/src/services/payment.test.ts +40 -40
- package/src/services/payment.ts +7 -7
- package/src/services/product-discount.ts +7 -7
- package/src/services/product-projection.test.ts +190 -190
- package/src/services/product-projection.ts +34 -32
- package/src/services/product-selection.test.ts +19 -19
- package/src/services/product-selection.ts +7 -7
- package/src/services/product-type.test.ts +38 -38
- package/src/services/product-type.ts +7 -7
- package/src/services/product.test.ts +658 -656
- package/src/services/product.ts +7 -7
- package/src/services/project.test.ts +24 -24
- package/src/services/project.ts +17 -17
- package/src/services/reviews.ts +7 -7
- package/src/services/shipping-method.test.ts +78 -78
- package/src/services/shipping-method.ts +16 -16
- package/src/services/shopping-list.test.ts +170 -170
- package/src/services/shopping-list.ts +7 -7
- package/src/services/standalone-price.test.ts +112 -112
- package/src/services/standalone-price.ts +7 -7
- package/src/services/state.test.ts +30 -30
- package/src/services/state.ts +7 -7
- package/src/services/store.test.ts +40 -40
- package/src/services/store.ts +7 -7
- package/src/services/subscription.ts +7 -7
- package/src/services/tax-category.test.ts +43 -43
- package/src/services/tax-category.ts +7 -7
- package/src/services/type.ts +7 -7
- package/src/services/zone.ts +7 -7
- package/src/shippingCalculator.test.ts +43 -43
- package/src/shippingCalculator.ts +23 -23
- package/src/storage/abstract.ts +36 -34
- package/src/storage/in-memory.ts +237 -233
- package/src/storage/index.ts +2 -2
- package/src/types.ts +91 -91
- package/src/repositories/cart-discount.ts +0 -219
- package/src/repositories/cart.ts +0 -659
- package/src/repositories/category.ts +0 -256
- package/src/repositories/customer.ts +0 -228
- package/src/repositories/discount-code.ts +0 -181
- package/src/repositories/inventory-entry.ts +0 -109
- package/src/repositories/order.ts +0 -514
- package/src/repositories/payment.ts +0 -342
- package/src/repositories/product.ts +0 -1106
- package/src/repositories/shipping-method.ts +0 -312
- package/src/repositories/shopping-list.ts +0 -392
- package/src/repositories/tax-category.ts +0 -111
- package/src/repositories/type.ts +0 -172
|
@@ -2,20 +2,20 @@ import {
|
|
|
2
2
|
Product,
|
|
3
3
|
ShoppingList,
|
|
4
4
|
ShoppingListDraft,
|
|
5
|
-
} from
|
|
6
|
-
import supertest from
|
|
7
|
-
import { afterEach, beforeEach, describe, expect, test } from
|
|
8
|
-
import { CommercetoolsMock } from
|
|
5
|
+
} from "@commercetools/platform-sdk";
|
|
6
|
+
import supertest from "supertest";
|
|
7
|
+
import { afterEach, beforeEach, describe, expect, test } from "vitest";
|
|
8
|
+
import { CommercetoolsMock } from "../ctMock";
|
|
9
9
|
|
|
10
10
|
const shoppingList: ShoppingList = {
|
|
11
|
-
id:
|
|
11
|
+
id: "f15b4a80-7def-4381-bf6a-c66cab258a2b",
|
|
12
12
|
version: 1,
|
|
13
13
|
lineItems: [
|
|
14
14
|
{
|
|
15
|
-
addedAt:
|
|
16
|
-
productType: { typeId:
|
|
17
|
-
id:
|
|
18
|
-
productId:
|
|
15
|
+
addedAt: "2021-08-03T14:19:29.496Z",
|
|
16
|
+
productType: { typeId: "product-type", id: "product-type-id" },
|
|
17
|
+
id: "42ea3c57-aced-49ea-ae70-7005a47c7463",
|
|
18
|
+
productId: "303bf5d8-1201-4fb9-8157-ff6efb8c04b4",
|
|
19
19
|
name: {},
|
|
20
20
|
quantity: 1,
|
|
21
21
|
productSlug: {},
|
|
@@ -23,19 +23,19 @@ const shoppingList: ShoppingList = {
|
|
|
23
23
|
},
|
|
24
24
|
],
|
|
25
25
|
textLineItems: [],
|
|
26
|
-
createdAt:
|
|
27
|
-
lastModifiedAt:
|
|
26
|
+
createdAt: "2021-07-22T12:23:33.472Z",
|
|
27
|
+
lastModifiedAt: "2021-08-03T14:19:29.496Z",
|
|
28
28
|
name: {},
|
|
29
|
-
}
|
|
29
|
+
};
|
|
30
30
|
|
|
31
31
|
export const product: Product = {
|
|
32
|
-
id:
|
|
33
|
-
createdAt:
|
|
34
|
-
lastModifiedAt:
|
|
32
|
+
id: "303bf5d8-1201-4fb9-8157-ff6efb8c04b4",
|
|
33
|
+
createdAt: "2022-05-30T13:21:26.777Z",
|
|
34
|
+
lastModifiedAt: "2022-05-30T13:21:26.777Z",
|
|
35
35
|
version: 1,
|
|
36
36
|
productType: {
|
|
37
|
-
typeId:
|
|
38
|
-
id:
|
|
37
|
+
typeId: "product-type",
|
|
38
|
+
id: "303bf5d8-1201-4fb9-8157-ff6efb8c04b4",
|
|
39
39
|
},
|
|
40
40
|
masterData: {
|
|
41
41
|
staged: {
|
|
@@ -44,7 +44,7 @@ export const product: Product = {
|
|
|
44
44
|
slug: {},
|
|
45
45
|
masterVariant: {
|
|
46
46
|
id: 1,
|
|
47
|
-
sku:
|
|
47
|
+
sku: "1",
|
|
48
48
|
},
|
|
49
49
|
variants: [],
|
|
50
50
|
searchKeywords: {},
|
|
@@ -60,7 +60,7 @@ export const product: Product = {
|
|
|
60
60
|
variants: [
|
|
61
61
|
{
|
|
62
62
|
id: 2,
|
|
63
|
-
sku:
|
|
63
|
+
sku: "22241940260",
|
|
64
64
|
},
|
|
65
65
|
],
|
|
66
66
|
searchKeywords: {},
|
|
@@ -68,79 +68,79 @@ export const product: Product = {
|
|
|
68
68
|
hasStagedChanges: true,
|
|
69
69
|
published: true,
|
|
70
70
|
},
|
|
71
|
-
}
|
|
71
|
+
};
|
|
72
72
|
|
|
73
|
-
describe(
|
|
73
|
+
describe("Shopping List", () => {
|
|
74
74
|
const ctMock = new CommercetoolsMock({
|
|
75
|
-
defaultProjectKey:
|
|
76
|
-
})
|
|
75
|
+
defaultProjectKey: "dummy",
|
|
76
|
+
});
|
|
77
77
|
|
|
78
78
|
beforeEach(() => {
|
|
79
|
-
ctMock.project().add(
|
|
80
|
-
ctMock.project().add(
|
|
81
|
-
})
|
|
79
|
+
ctMock.project().add("product", product);
|
|
80
|
+
ctMock.project().add("shopping-list", shoppingList);
|
|
81
|
+
});
|
|
82
82
|
|
|
83
|
-
test(
|
|
83
|
+
test("Adds variant ID on lineItems when creating", async () => {
|
|
84
84
|
const draft: ShoppingListDraft = {
|
|
85
85
|
name: {},
|
|
86
|
-
lineItems: [{ sku:
|
|
87
|
-
}
|
|
86
|
+
lineItems: [{ sku: "22241940260" }],
|
|
87
|
+
};
|
|
88
88
|
const response = await supertest(ctMock.app)
|
|
89
|
-
.post(
|
|
90
|
-
.send(draft)
|
|
89
|
+
.post("/dummy/shopping-lists")
|
|
90
|
+
.send(draft);
|
|
91
91
|
|
|
92
|
-
expect(response.status).toBe(201)
|
|
93
|
-
expect(response.body.lineItems[0].variantId).toBe(2)
|
|
94
|
-
})
|
|
92
|
+
expect(response.status).toBe(201);
|
|
93
|
+
expect(response.body.lineItems[0].variantId).toBe(2);
|
|
94
|
+
});
|
|
95
95
|
|
|
96
|
-
test(
|
|
96
|
+
test("Expands variant on lineItems when getting", async () => {
|
|
97
97
|
const response = await supertest(ctMock.app)
|
|
98
98
|
.get(`/dummy/shopping-lists/${shoppingList.id}`)
|
|
99
|
-
.query({ expand:
|
|
99
|
+
.query({ expand: "lineItems[*].variant" });
|
|
100
100
|
|
|
101
|
-
expect(response.status).toBe(200)
|
|
101
|
+
expect(response.status).toBe(200);
|
|
102
102
|
expect(response.body.lineItems[0].variant).toEqual({
|
|
103
103
|
id: 2,
|
|
104
|
-
sku:
|
|
105
|
-
})
|
|
106
|
-
})
|
|
104
|
+
sku: "22241940260",
|
|
105
|
+
});
|
|
106
|
+
});
|
|
107
107
|
|
|
108
|
-
test(
|
|
108
|
+
test("Expands variant on lineItems when creating", async () => {
|
|
109
109
|
const draft: ShoppingListDraft = {
|
|
110
110
|
name: {},
|
|
111
|
-
lineItems: [{ sku:
|
|
112
|
-
}
|
|
111
|
+
lineItems: [{ sku: "22241940260" }],
|
|
112
|
+
};
|
|
113
113
|
const response = await supertest(ctMock.app)
|
|
114
|
-
.post(
|
|
115
|
-
.query({ expand:
|
|
116
|
-
.send(draft)
|
|
114
|
+
.post("/dummy/shopping-lists")
|
|
115
|
+
.query({ expand: "lineItems[*].variant" })
|
|
116
|
+
.send(draft);
|
|
117
117
|
|
|
118
|
-
expect(response.status).toBe(201)
|
|
118
|
+
expect(response.status).toBe(201);
|
|
119
119
|
expect(response.body.lineItems[0].variant).toEqual({
|
|
120
120
|
id: 2,
|
|
121
|
-
sku:
|
|
122
|
-
})
|
|
123
|
-
})
|
|
124
|
-
})
|
|
121
|
+
sku: "22241940260",
|
|
122
|
+
});
|
|
123
|
+
});
|
|
124
|
+
});
|
|
125
125
|
|
|
126
|
-
describe(
|
|
126
|
+
describe("Shopping List Update Actions", () => {
|
|
127
127
|
const ctMock = new CommercetoolsMock({
|
|
128
|
-
defaultProjectKey:
|
|
129
|
-
})
|
|
128
|
+
defaultProjectKey: "dummy",
|
|
129
|
+
});
|
|
130
130
|
|
|
131
131
|
beforeEach(() => {
|
|
132
|
-
ctMock.project().add(
|
|
133
|
-
ctMock.project().add(
|
|
134
|
-
})
|
|
132
|
+
ctMock.project().add("product", product);
|
|
133
|
+
ctMock.project().add("shopping-list", shoppingList);
|
|
134
|
+
});
|
|
135
135
|
|
|
136
136
|
afterEach(() => {
|
|
137
|
-
ctMock.clear()
|
|
138
|
-
})
|
|
137
|
+
ctMock.clear();
|
|
138
|
+
});
|
|
139
139
|
|
|
140
|
-
test(
|
|
141
|
-
ctMock.clear()
|
|
142
|
-
ctMock.project().add(
|
|
143
|
-
ctMock.project().add(
|
|
140
|
+
test("addLineItem by productID & variantID", async () => {
|
|
141
|
+
ctMock.clear();
|
|
142
|
+
ctMock.project().add("product", product);
|
|
143
|
+
ctMock.project().add("shopping-list", { ...shoppingList, lineItems: [] });
|
|
144
144
|
|
|
145
145
|
const response = await supertest(ctMock.app)
|
|
146
146
|
.post(`/dummy/shopping-lists/${shoppingList.id}`)
|
|
@@ -148,22 +148,22 @@ describe('Shopping List Update Actions', () => {
|
|
|
148
148
|
version: 1,
|
|
149
149
|
actions: [
|
|
150
150
|
{
|
|
151
|
-
action:
|
|
151
|
+
action: "addLineItem",
|
|
152
152
|
productId: product.id,
|
|
153
153
|
variantId: product.masterData.current.variants[0].id,
|
|
154
154
|
},
|
|
155
155
|
],
|
|
156
|
-
})
|
|
157
|
-
expect(response.status).toBe(200)
|
|
158
|
-
expect(response.body.version).toBe(2)
|
|
159
|
-
expect(response.body.lineItems).toHaveLength(1)
|
|
160
|
-
expect(response.body.lineItems[0].variantId).toEqual(2)
|
|
161
|
-
})
|
|
156
|
+
});
|
|
157
|
+
expect(response.status).toBe(200);
|
|
158
|
+
expect(response.body.version).toBe(2);
|
|
159
|
+
expect(response.body.lineItems).toHaveLength(1);
|
|
160
|
+
expect(response.body.lineItems[0].variantId).toEqual(2);
|
|
161
|
+
});
|
|
162
162
|
|
|
163
|
-
test(
|
|
164
|
-
ctMock.clear()
|
|
165
|
-
ctMock.project().add(
|
|
166
|
-
ctMock.project().add(
|
|
163
|
+
test("addLineItem by productID", async () => {
|
|
164
|
+
ctMock.clear();
|
|
165
|
+
ctMock.project().add("product", product);
|
|
166
|
+
ctMock.project().add("shopping-list", { ...shoppingList, lineItems: [] });
|
|
167
167
|
|
|
168
168
|
const response = await supertest(ctMock.app)
|
|
169
169
|
.post(`/dummy/shopping-lists/${shoppingList.id}`)
|
|
@@ -171,21 +171,21 @@ describe('Shopping List Update Actions', () => {
|
|
|
171
171
|
version: 1,
|
|
172
172
|
actions: [
|
|
173
173
|
{
|
|
174
|
-
action:
|
|
174
|
+
action: "addLineItem",
|
|
175
175
|
productId: product.id,
|
|
176
176
|
},
|
|
177
177
|
],
|
|
178
|
-
})
|
|
179
|
-
expect(response.status).toBe(200)
|
|
180
|
-
expect(response.body.version).toBe(2)
|
|
181
|
-
expect(response.body.lineItems).toHaveLength(1)
|
|
182
|
-
expect(response.body.lineItems[0].variantId).toEqual(1)
|
|
183
|
-
})
|
|
178
|
+
});
|
|
179
|
+
expect(response.status).toBe(200);
|
|
180
|
+
expect(response.body.version).toBe(2);
|
|
181
|
+
expect(response.body.lineItems).toHaveLength(1);
|
|
182
|
+
expect(response.body.lineItems[0].variantId).toEqual(1);
|
|
183
|
+
});
|
|
184
184
|
|
|
185
|
-
test(
|
|
186
|
-
ctMock.clear()
|
|
187
|
-
ctMock.project().add(
|
|
188
|
-
ctMock.project().add(
|
|
185
|
+
test("addLineItem by sku", async () => {
|
|
186
|
+
ctMock.clear();
|
|
187
|
+
ctMock.project().add("product", product);
|
|
188
|
+
ctMock.project().add("shopping-list", { ...shoppingList, lineItems: [] });
|
|
189
189
|
|
|
190
190
|
const response = await supertest(ctMock.app)
|
|
191
191
|
.post(`/dummy/shopping-lists/${shoppingList.id}`)
|
|
@@ -193,76 +193,76 @@ describe('Shopping List Update Actions', () => {
|
|
|
193
193
|
version: 1,
|
|
194
194
|
actions: [
|
|
195
195
|
{
|
|
196
|
-
action:
|
|
197
|
-
sku:
|
|
196
|
+
action: "addLineItem",
|
|
197
|
+
sku: "22241940260",
|
|
198
198
|
},
|
|
199
199
|
],
|
|
200
|
-
})
|
|
201
|
-
expect(response.status).toBe(200)
|
|
202
|
-
expect(response.body.version).toBe(2)
|
|
203
|
-
expect(response.body.lineItems).toHaveLength(1)
|
|
204
|
-
expect(response.body.lineItems[0].variantId).toEqual(2)
|
|
205
|
-
})
|
|
200
|
+
});
|
|
201
|
+
expect(response.status).toBe(200);
|
|
202
|
+
expect(response.body.version).toBe(2);
|
|
203
|
+
expect(response.body.lineItems).toHaveLength(1);
|
|
204
|
+
expect(response.body.lineItems[0].variantId).toEqual(2);
|
|
205
|
+
});
|
|
206
206
|
|
|
207
|
-
test(
|
|
207
|
+
test("addLineItem increases quantity", async () => {
|
|
208
208
|
const response = await supertest(ctMock.app)
|
|
209
209
|
.post(`/dummy/shopping-lists/${shoppingList.id}`)
|
|
210
210
|
.send({
|
|
211
211
|
version: 1,
|
|
212
212
|
actions: [
|
|
213
213
|
{
|
|
214
|
-
action:
|
|
215
|
-
sku:
|
|
214
|
+
action: "addLineItem",
|
|
215
|
+
sku: "22241940260",
|
|
216
216
|
},
|
|
217
217
|
],
|
|
218
|
-
})
|
|
219
|
-
expect(response.status).toBe(200)
|
|
220
|
-
expect(response.body.version).toBe(2)
|
|
221
|
-
expect(response.body.lineItems).toHaveLength(1)
|
|
222
|
-
expect(response.body.lineItems[0].variantId).toEqual(2)
|
|
223
|
-
expect(response.body.lineItems[0].quantity).toEqual(2)
|
|
224
|
-
})
|
|
218
|
+
});
|
|
219
|
+
expect(response.status).toBe(200);
|
|
220
|
+
expect(response.body.version).toBe(2);
|
|
221
|
+
expect(response.body.lineItems).toHaveLength(1);
|
|
222
|
+
expect(response.body.lineItems[0].variantId).toEqual(2);
|
|
223
|
+
expect(response.body.lineItems[0].quantity).toEqual(2);
|
|
224
|
+
});
|
|
225
225
|
|
|
226
|
-
test(
|
|
226
|
+
test("addLineItem unknown product", async () => {
|
|
227
227
|
const response = await supertest(ctMock.app)
|
|
228
228
|
.post(`/dummy/shopping-lists/${shoppingList.id}`)
|
|
229
229
|
.send({
|
|
230
230
|
version: 1,
|
|
231
|
-
actions: [{ action:
|
|
232
|
-
})
|
|
233
|
-
expect(response.status).toBe(400)
|
|
234
|
-
expect(response.body.message).toBe("A product with ID '123' not found.")
|
|
235
|
-
})
|
|
231
|
+
actions: [{ action: "addLineItem", productId: "123", variantId: 1 }],
|
|
232
|
+
});
|
|
233
|
+
expect(response.status).toBe(400);
|
|
234
|
+
expect(response.body.message).toBe("A product with ID '123' not found.");
|
|
235
|
+
});
|
|
236
236
|
|
|
237
|
-
test(
|
|
237
|
+
test("removeLineItem", async () => {
|
|
238
238
|
const response = await supertest(ctMock.app)
|
|
239
239
|
.post(`/dummy/shopping-lists/${shoppingList.id}`)
|
|
240
240
|
.send({
|
|
241
241
|
version: 1,
|
|
242
242
|
actions: [
|
|
243
243
|
{
|
|
244
|
-
action:
|
|
244
|
+
action: "removeLineItem",
|
|
245
245
|
lineItemId: shoppingList.lineItems[0].id,
|
|
246
246
|
},
|
|
247
247
|
],
|
|
248
|
-
})
|
|
249
|
-
expect(response.status).toBe(200)
|
|
250
|
-
expect(response.body.version).toBe(2)
|
|
251
|
-
expect(response.body.lineItems).toHaveLength(0)
|
|
252
|
-
})
|
|
248
|
+
});
|
|
249
|
+
expect(response.status).toBe(200);
|
|
250
|
+
expect(response.body.version).toBe(2);
|
|
251
|
+
expect(response.body.lineItems).toHaveLength(0);
|
|
252
|
+
});
|
|
253
253
|
|
|
254
|
-
test(
|
|
254
|
+
test("removeLineItem decreases quantity", async () => {
|
|
255
255
|
await supertest(ctMock.app)
|
|
256
256
|
.post(`/dummy/shopping-lists/${shoppingList.id}`)
|
|
257
257
|
.send({
|
|
258
258
|
version: 1,
|
|
259
259
|
actions: [
|
|
260
260
|
{
|
|
261
|
-
action:
|
|
262
|
-
sku:
|
|
261
|
+
action: "addLineItem",
|
|
262
|
+
sku: "22241940260",
|
|
263
263
|
},
|
|
264
264
|
],
|
|
265
|
-
})
|
|
265
|
+
});
|
|
266
266
|
|
|
267
267
|
const response = await supertest(ctMock.app)
|
|
268
268
|
.post(`/dummy/shopping-lists/${shoppingList.id}`)
|
|
@@ -270,100 +270,100 @@ describe('Shopping List Update Actions', () => {
|
|
|
270
270
|
version: 2,
|
|
271
271
|
actions: [
|
|
272
272
|
{
|
|
273
|
-
action:
|
|
273
|
+
action: "removeLineItem",
|
|
274
274
|
lineItemId: shoppingList.lineItems[0].id,
|
|
275
275
|
quantity: 1,
|
|
276
276
|
},
|
|
277
277
|
],
|
|
278
|
-
})
|
|
279
|
-
expect(response.status).toBe(200)
|
|
280
|
-
expect(response.body.version).toBe(3)
|
|
281
|
-
expect(response.body.lineItems).toHaveLength(1)
|
|
282
|
-
expect(response.body.lineItems[0].quantity).toBe(1)
|
|
283
|
-
})
|
|
278
|
+
});
|
|
279
|
+
expect(response.status).toBe(200);
|
|
280
|
+
expect(response.body.version).toBe(3);
|
|
281
|
+
expect(response.body.lineItems).toHaveLength(1);
|
|
282
|
+
expect(response.body.lineItems[0].quantity).toBe(1);
|
|
283
|
+
});
|
|
284
284
|
|
|
285
|
-
test(
|
|
285
|
+
test("changeLineItemQuantity sets quantity", async () => {
|
|
286
286
|
const response = await supertest(ctMock.app)
|
|
287
287
|
.post(`/dummy/shopping-lists/${shoppingList.id}`)
|
|
288
288
|
.send({
|
|
289
289
|
version: 1,
|
|
290
290
|
actions: [
|
|
291
291
|
{
|
|
292
|
-
action:
|
|
292
|
+
action: "changeLineItemQuantity",
|
|
293
293
|
lineItemId: shoppingList.lineItems[0].id,
|
|
294
294
|
quantity: 2,
|
|
295
295
|
},
|
|
296
296
|
],
|
|
297
|
-
})
|
|
298
|
-
expect(response.status).toBe(200)
|
|
299
|
-
expect(response.body.version).toBe(2)
|
|
300
|
-
expect(response.body.lineItems.length).toBe(1)
|
|
301
|
-
expect(response.body.lineItems[0].quantity).toBe(2)
|
|
302
|
-
})
|
|
297
|
+
});
|
|
298
|
+
expect(response.status).toBe(200);
|
|
299
|
+
expect(response.body.version).toBe(2);
|
|
300
|
+
expect(response.body.lineItems.length).toBe(1);
|
|
301
|
+
expect(response.body.lineItems[0].quantity).toBe(2);
|
|
302
|
+
});
|
|
303
303
|
|
|
304
|
-
test(
|
|
304
|
+
test("changeLineItemQuantity removes line item if quantity is 0", async () => {
|
|
305
305
|
const response = await supertest(ctMock.app)
|
|
306
306
|
.post(`/dummy/shopping-lists/${shoppingList.id}`)
|
|
307
307
|
.send({
|
|
308
308
|
version: 1,
|
|
309
309
|
actions: [
|
|
310
310
|
{
|
|
311
|
-
action:
|
|
311
|
+
action: "changeLineItemQuantity",
|
|
312
312
|
lineItemId: shoppingList.lineItems[0].id,
|
|
313
313
|
quantity: 0,
|
|
314
314
|
},
|
|
315
315
|
],
|
|
316
|
-
})
|
|
317
|
-
expect(response.status).toBe(200)
|
|
318
|
-
expect(response.body.version).toBe(2)
|
|
319
|
-
expect(response.body.lineItems.length).toBe(0)
|
|
320
|
-
})
|
|
316
|
+
});
|
|
317
|
+
expect(response.status).toBe(200);
|
|
318
|
+
expect(response.body.version).toBe(2);
|
|
319
|
+
expect(response.body.lineItems.length).toBe(0);
|
|
320
|
+
});
|
|
321
321
|
|
|
322
|
-
test(
|
|
322
|
+
test("various setters", async () => {
|
|
323
323
|
const response = await supertest(ctMock.app)
|
|
324
324
|
.post(`/dummy/shopping-lists/${shoppingList.id}`)
|
|
325
325
|
.send({
|
|
326
326
|
version: 1,
|
|
327
327
|
actions: [
|
|
328
328
|
{
|
|
329
|
-
action:
|
|
330
|
-
key:
|
|
329
|
+
action: "setKey",
|
|
330
|
+
key: "new-key",
|
|
331
331
|
},
|
|
332
332
|
{
|
|
333
|
-
action:
|
|
334
|
-
slug:
|
|
333
|
+
action: "setSlug",
|
|
334
|
+
slug: "new-slug",
|
|
335
335
|
},
|
|
336
336
|
{
|
|
337
|
-
action:
|
|
338
|
-
name: { en:
|
|
337
|
+
action: "changeName",
|
|
338
|
+
name: { en: "new name" },
|
|
339
339
|
},
|
|
340
340
|
{
|
|
341
|
-
action:
|
|
342
|
-
description: { en:
|
|
341
|
+
action: "setDescription",
|
|
342
|
+
description: { en: "new description" },
|
|
343
343
|
},
|
|
344
344
|
{
|
|
345
|
-
action:
|
|
346
|
-
customer: { typeId:
|
|
345
|
+
action: "setCustomer",
|
|
346
|
+
customer: { typeId: "customer", id: "customer-id" },
|
|
347
347
|
},
|
|
348
|
-
{ action:
|
|
349
|
-
{ action:
|
|
348
|
+
{ action: "setStore", store: { typeId: "store", key: "store-key" } },
|
|
349
|
+
{ action: "setAnonymousId", anonymousId: "new-anonymous-id" },
|
|
350
350
|
{
|
|
351
|
-
action:
|
|
351
|
+
action: "setDeleteDaysAfterLastModification",
|
|
352
352
|
deleteDaysAfterLastModification: 1,
|
|
353
353
|
},
|
|
354
354
|
],
|
|
355
|
-
})
|
|
356
|
-
expect(response.status).toBe(200)
|
|
357
|
-
expect(response.body.key).toBe(
|
|
358
|
-
expect(response.body.slug).toBe(
|
|
359
|
-
expect(response.body.name).toEqual({ en:
|
|
360
|
-
expect(response.body.description).toEqual({ en:
|
|
355
|
+
});
|
|
356
|
+
expect(response.status).toBe(200);
|
|
357
|
+
expect(response.body.key).toBe("new-key");
|
|
358
|
+
expect(response.body.slug).toBe("new-slug");
|
|
359
|
+
expect(response.body.name).toEqual({ en: "new name" });
|
|
360
|
+
expect(response.body.description).toEqual({ en: "new description" });
|
|
361
361
|
expect(response.body.customer).toEqual({
|
|
362
|
-
typeId:
|
|
363
|
-
id:
|
|
364
|
-
})
|
|
365
|
-
expect(response.body.store).toEqual({ typeId:
|
|
366
|
-
expect(response.body.anonymousId).toEqual(
|
|
367
|
-
expect(response.body.deleteDaysAfterLastModification).toEqual(1)
|
|
368
|
-
})
|
|
369
|
-
})
|
|
362
|
+
typeId: "customer",
|
|
363
|
+
id: "customer-id",
|
|
364
|
+
});
|
|
365
|
+
expect(response.body.store).toEqual({ typeId: "store", key: "store-key" });
|
|
366
|
+
expect(response.body.anonymousId).toEqual("new-anonymous-id");
|
|
367
|
+
expect(response.body.deleteDaysAfterLastModification).toEqual(1);
|
|
368
|
+
});
|
|
369
|
+
});
|
|
@@ -1,16 +1,16 @@
|
|
|
1
|
-
import { Router } from
|
|
2
|
-
import { ShoppingListRepository } from
|
|
3
|
-
import AbstractService from
|
|
1
|
+
import { Router } from "express";
|
|
2
|
+
import { ShoppingListRepository } from "../repositories/shopping-list";
|
|
3
|
+
import AbstractService from "./abstract";
|
|
4
4
|
|
|
5
5
|
export class ShoppingListService extends AbstractService {
|
|
6
|
-
public repository: ShoppingListRepository
|
|
6
|
+
public repository: ShoppingListRepository;
|
|
7
7
|
|
|
8
8
|
constructor(parent: Router, repository: ShoppingListRepository) {
|
|
9
|
-
super(parent)
|
|
10
|
-
this.repository = repository
|
|
9
|
+
super(parent);
|
|
10
|
+
this.repository = repository;
|
|
11
11
|
}
|
|
12
12
|
|
|
13
13
|
getBasePath() {
|
|
14
|
-
return
|
|
14
|
+
return "shopping-lists";
|
|
15
15
|
}
|
|
16
16
|
}
|