@labdigital/commercetools-mock 2.66.0 → 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.
Files changed (281) hide show
  1. package/README.md +31 -8
  2. package/dist/abstract-BKFcva6S.mjs +1044 -0
  3. package/dist/abstract-BKFcva6S.mjs.map +1 -0
  4. package/dist/config-BcNSzPZz.d.mts +1718 -0
  5. package/dist/index.d.mts +50 -1633
  6. package/dist/index.mjs +3769 -2653
  7. package/dist/index.mjs.map +1 -1
  8. package/dist/storage/sqlite.d.mts +59 -0
  9. package/dist/storage/sqlite.mjs +234 -0
  10. package/dist/storage/sqlite.mjs.map +1 -0
  11. package/package.json +26 -29
  12. package/src/ctMock.ts +125 -136
  13. package/src/helpers.ts +14 -6
  14. package/src/index.ts +5 -0
  15. package/src/lib/masking.ts +4 -5
  16. package/src/lib/product-review-statistics.test.ts +257 -294
  17. package/src/lib/review-statistics.ts +17 -4
  18. package/src/oauth/helpers.ts +7 -4
  19. package/src/oauth/server.test.ts +102 -62
  20. package/src/oauth/server.ts +215 -213
  21. package/src/oauth/store.ts +20 -6
  22. package/src/orderSearch.ts +3 -3
  23. package/src/product-projection-search.ts +38 -20
  24. package/src/product-search-availability.test.ts +31 -52
  25. package/src/product-search.ts +19 -10
  26. package/src/projectAPI.ts +6 -22
  27. package/src/repositories/abstract.ts +182 -48
  28. package/src/repositories/as-associate.test.ts +19 -19
  29. package/src/repositories/associate-role.ts +12 -23
  30. package/src/repositories/attribute-group.test.ts +23 -23
  31. package/src/repositories/attribute-group.ts +6 -4
  32. package/src/repositories/business-unit.test.ts +63 -57
  33. package/src/repositories/business-unit.ts +107 -55
  34. package/src/repositories/cart/actions.ts +96 -65
  35. package/src/repositories/cart/helpers.ts +15 -11
  36. package/src/repositories/cart/index.test.ts +136 -30
  37. package/src/repositories/cart/index.ts +76 -59
  38. package/src/repositories/cart-discount/actions.ts +12 -44
  39. package/src/repositories/cart-discount/index.ts +20 -8
  40. package/src/repositories/category/actions.ts +27 -27
  41. package/src/repositories/category/index.test.ts +13 -9
  42. package/src/repositories/category/index.ts +40 -23
  43. package/src/repositories/channel.test.ts +53 -51
  44. package/src/repositories/channel.ts +12 -22
  45. package/src/repositories/custom-object.ts +34 -25
  46. package/src/repositories/customer/actions.ts +47 -25
  47. package/src/repositories/customer/index.test.ts +11 -11
  48. package/src/repositories/customer/index.ts +65 -35
  49. package/src/repositories/customer-group.test.ts +44 -42
  50. package/src/repositories/customer-group.ts +12 -22
  51. package/src/repositories/discount-code/actions.ts +3 -19
  52. package/src/repositories/discount-code/index.ts +9 -4
  53. package/src/repositories/discount-group/index.ts +8 -3
  54. package/src/repositories/extension.test.ts +27 -27
  55. package/src/repositories/extension.ts +10 -5
  56. package/src/repositories/helpers.ts +126 -47
  57. package/src/repositories/inventory-entry/actions.ts +3 -24
  58. package/src/repositories/inventory-entry/index.ts +19 -11
  59. package/src/repositories/my-customer.ts +13 -12
  60. package/src/repositories/my-order.ts +5 -2
  61. package/src/repositories/order/actions.ts +84 -56
  62. package/src/repositories/order/index.test.ts +36 -31
  63. package/src/repositories/order/index.ts +83 -49
  64. package/src/repositories/order-edit.ts +8 -3
  65. package/src/repositories/payment/actions.ts +64 -44
  66. package/src/repositories/payment/helpers.ts +3 -3
  67. package/src/repositories/payment/index.ts +28 -12
  68. package/src/repositories/product/actions.ts +133 -98
  69. package/src/repositories/product/helpers.ts +29 -16
  70. package/src/repositories/product/index.ts +42 -25
  71. package/src/repositories/product-discount.ts +6 -4
  72. package/src/repositories/product-projection.ts +41 -21
  73. package/src/repositories/product-selection.ts +8 -15
  74. package/src/repositories/product-tailoring.ts +22 -3
  75. package/src/repositories/product-type.ts +45 -4
  76. package/src/repositories/project.ts +57 -13
  77. package/src/repositories/quote/actions.ts +5 -28
  78. package/src/repositories/quote/index.ts +29 -6
  79. package/src/repositories/quote-request/actions.ts +5 -28
  80. package/src/repositories/quote-request/index.test.ts +3 -3
  81. package/src/repositories/quote-request/index.ts +31 -11
  82. package/src/repositories/quote-staged/actions.ts +5 -28
  83. package/src/repositories/quote-staged/index.ts +22 -8
  84. package/src/repositories/recurrence-policy/index.ts +6 -4
  85. package/src/repositories/recurring-order/actions.ts +7 -32
  86. package/src/repositories/recurring-order/index.ts +8 -6
  87. package/src/repositories/review.test.ts +147 -142
  88. package/src/repositories/review.ts +31 -37
  89. package/src/repositories/shipping-method/actions.ts +11 -28
  90. package/src/repositories/shipping-method/index.ts +26 -15
  91. package/src/repositories/shopping-list/actions.ts +21 -31
  92. package/src/repositories/shopping-list/index.ts +44 -22
  93. package/src/repositories/standalone-price.ts +6 -4
  94. package/src/repositories/state.ts +15 -9
  95. package/src/repositories/store.ts +21 -32
  96. package/src/repositories/subscription.test.ts +22 -22
  97. package/src/repositories/subscription.ts +8 -3
  98. package/src/repositories/tax-category/index.ts +8 -3
  99. package/src/repositories/type/actions.ts +21 -3
  100. package/src/repositories/type/index.ts +5 -3
  101. package/src/repositories/zone.test.ts +112 -77
  102. package/src/repositories/zone.ts +5 -3
  103. package/src/schemas/generated/associate-role.ts +13 -0
  104. package/src/schemas/generated/attribute-group.ts +12 -0
  105. package/src/schemas/generated/business-unit.ts +38 -0
  106. package/src/schemas/generated/cart-discount.ts +33 -0
  107. package/src/schemas/generated/cart.ts +61 -0
  108. package/src/schemas/generated/category.ts +25 -0
  109. package/src/schemas/generated/channel.ts +21 -0
  110. package/src/schemas/generated/common.ts +1372 -0
  111. package/src/schemas/generated/custom-object.ts +11 -0
  112. package/src/schemas/generated/customer-group.ts +11 -0
  113. package/src/schemas/generated/customer.ts +47 -0
  114. package/src/schemas/generated/discount-code.ts +25 -0
  115. package/src/schemas/generated/discount-group.ts +13 -0
  116. package/src/schemas/generated/extension.ts +15 -0
  117. package/src/schemas/generated/index.ts +42 -0
  118. package/src/schemas/generated/inventory-entry.ts +20 -0
  119. package/src/schemas/generated/my-quote-request.ts +10 -0
  120. package/src/schemas/generated/order-edit.ts +18 -0
  121. package/src/schemas/generated/order-from-cart.ts +25 -0
  122. package/src/schemas/generated/payment.ts +30 -0
  123. package/src/schemas/generated/product-discount.ts +20 -0
  124. package/src/schemas/generated/product-selection.ts +18 -0
  125. package/src/schemas/generated/product-tailoring.ts +26 -0
  126. package/src/schemas/generated/product-type.ts +12 -0
  127. package/src/schemas/generated/product.ts +37 -0
  128. package/src/schemas/generated/quote-request.ts +19 -0
  129. package/src/schemas/generated/quote.ts +18 -0
  130. package/src/schemas/generated/recurrence-policy.ts +15 -0
  131. package/src/schemas/generated/recurring-order.ts +19 -0
  132. package/src/schemas/generated/review.ts +24 -0
  133. package/src/schemas/generated/shipping-method.ts +24 -0
  134. package/src/schemas/generated/shopping-list.ts +28 -0
  135. package/src/schemas/generated/staged-quote.ts +18 -0
  136. package/src/schemas/generated/standalone-price.ts +32 -0
  137. package/src/schemas/generated/state.ts +20 -0
  138. package/src/schemas/generated/store.ts +23 -0
  139. package/src/schemas/generated/subscription.ts +20 -0
  140. package/src/schemas/generated/tax-category.ts +12 -0
  141. package/src/schemas/generated/type.ts +17 -0
  142. package/src/schemas/generated/zone.ts +12 -0
  143. package/src/schemas/update-request.ts +3 -5
  144. package/src/server.ts +32 -4
  145. package/src/services/abstract.ts +207 -101
  146. package/src/services/as-associate-cart.test.ts +28 -36
  147. package/src/services/as-associate-cart.ts +15 -12
  148. package/src/services/as-associate-order.test.ts +33 -40
  149. package/src/services/as-associate-order.ts +15 -12
  150. package/src/services/as-associate-quote-request.ts +15 -12
  151. package/src/services/as-associate-shopping-list.test.ts +25 -35
  152. package/src/services/as-associate-shopping-list.ts +15 -12
  153. package/src/services/as-associate.test.ts +21 -15
  154. package/src/services/as-associate.ts +23 -22
  155. package/src/services/associate-roles.test.ts +16 -22
  156. package/src/services/associate-roles.ts +2 -2
  157. package/src/services/attribute-group.test.ts +40 -44
  158. package/src/services/attribute-group.ts +2 -2
  159. package/src/services/business-units.test.ts +227 -163
  160. package/src/services/business-units.ts +2 -2
  161. package/src/services/cart-discount.test.ts +253 -187
  162. package/src/services/cart-discount.ts +2 -2
  163. package/src/services/cart.test.ts +833 -832
  164. package/src/services/cart.ts +31 -12
  165. package/src/services/category.test.ts +208 -130
  166. package/src/services/category.ts +2 -2
  167. package/src/services/channel.test.ts +39 -44
  168. package/src/services/channel.ts +2 -2
  169. package/src/services/custom-object.test.ts +103 -79
  170. package/src/services/custom-object.ts +106 -38
  171. package/src/services/customer-group.test.ts +39 -44
  172. package/src/services/customer-group.ts +2 -2
  173. package/src/services/customer.test.ts +357 -292
  174. package/src/services/customer.ts +70 -23
  175. package/src/services/discount-code.test.ts +57 -68
  176. package/src/services/discount-code.ts +2 -2
  177. package/src/services/discount-group.test.ts +111 -134
  178. package/src/services/discount-group.ts +2 -2
  179. package/src/services/draft-validation.test.ts +255 -0
  180. package/src/services/extension.test.ts +39 -44
  181. package/src/services/extension.ts +2 -2
  182. package/src/services/inventory-entry.test.ts +106 -87
  183. package/src/services/inventory-entry.ts +2 -2
  184. package/src/services/my-business-unit.test.ts +82 -112
  185. package/src/services/my-business-unit.ts +25 -19
  186. package/src/services/my-cart.test.ts +46 -41
  187. package/src/services/my-cart.ts +32 -28
  188. package/src/services/my-customer.test.ts +153 -88
  189. package/src/services/my-customer.ts +130 -61
  190. package/src/services/my-order.ts +15 -12
  191. package/src/services/my-payment.test.ts +30 -24
  192. package/src/services/my-payment.ts +2 -2
  193. package/src/services/my-shopping-list.ts +2 -2
  194. package/src/services/order.test.ts +332 -276
  195. package/src/services/order.ts +45 -27
  196. package/src/services/payment.test.ts +31 -29
  197. package/src/services/payment.ts +2 -2
  198. package/src/services/product-discount.test.ts +39 -46
  199. package/src/services/product-discount.ts +2 -2
  200. package/src/services/product-projection.test.ts +176 -166
  201. package/src/services/product-projection.ts +31 -15
  202. package/src/services/product-selection.test.ts +17 -9
  203. package/src/services/product-selection.ts +2 -2
  204. package/src/services/product-type.test.ts +80 -21
  205. package/src/services/product-type.ts +2 -2
  206. package/src/services/product.test.ts +569 -534
  207. package/src/services/product.ts +14 -7
  208. package/src/services/project.test.ts +22 -12
  209. package/src/services/project.ts +28 -13
  210. package/src/services/quote-request.test.ts +36 -39
  211. package/src/services/quote-request.ts +2 -2
  212. package/src/services/quote-staged.ts +2 -2
  213. package/src/services/quote.ts +2 -2
  214. package/src/services/recurrence-policy.test.ts +114 -139
  215. package/src/services/recurrence-policy.ts +2 -2
  216. package/src/services/recurring-order.test.ts +149 -194
  217. package/src/services/recurring-order.ts +2 -2
  218. package/src/services/reviews.test.ts +127 -106
  219. package/src/services/reviews.ts +2 -2
  220. package/src/services/shipping-method.test.ts +96 -125
  221. package/src/services/shipping-method.ts +24 -12
  222. package/src/services/shopping-list.test.ts +183 -141
  223. package/src/services/shopping-list.ts +2 -2
  224. package/src/services/standalone-price.test.ts +60 -46
  225. package/src/services/standalone-price.ts +2 -2
  226. package/src/services/state.test.ts +20 -25
  227. package/src/services/state.ts +2 -2
  228. package/src/services/store.test.ts +26 -45
  229. package/src/services/store.ts +2 -2
  230. package/src/services/subscription.test.ts +39 -44
  231. package/src/services/subscription.ts +2 -2
  232. package/src/services/tax-category.test.ts +33 -36
  233. package/src/services/tax-category.ts +2 -2
  234. package/src/services/type.test.ts +45 -44
  235. package/src/services/type.ts +2 -2
  236. package/src/services/zone.test.ts +40 -44
  237. package/src/services/zone.ts +2 -2
  238. package/src/shipping.ts +41 -11
  239. package/src/storage/abstract.ts +248 -17
  240. package/src/storage/in-memory.ts +147 -290
  241. package/src/storage/sqlite.ts +429 -0
  242. package/src/storage/storage-map.ts +75 -0
  243. package/src/storage/storage.test-helpers.ts +97 -0
  244. package/src/storage/storage.test.ts +802 -0
  245. package/src/testing/associate-role.ts +28 -0
  246. package/src/testing/attribute-group.ts +27 -0
  247. package/src/testing/business-unit.ts +9 -8
  248. package/src/testing/cart-discount.ts +34 -0
  249. package/src/testing/cart.ts +20 -0
  250. package/src/testing/category.ts +25 -0
  251. package/src/testing/channel.ts +23 -0
  252. package/src/testing/custom-object.ts +27 -0
  253. package/src/testing/customer-group.ts +26 -0
  254. package/src/testing/customer.ts +36 -33
  255. package/src/testing/discount-code.ts +29 -0
  256. package/src/testing/discount-group.ts +27 -0
  257. package/src/testing/extension.ts +32 -0
  258. package/src/testing/index.ts +33 -0
  259. package/src/testing/inventory-entry.ts +26 -0
  260. package/src/testing/order.ts +27 -0
  261. package/src/testing/payment.ts +23 -0
  262. package/src/testing/product-discount.ts +33 -0
  263. package/src/testing/product-selection.ts +28 -0
  264. package/src/testing/product-type.ts +27 -0
  265. package/src/testing/product.ts +38 -0
  266. package/src/testing/quote-request.ts +29 -0
  267. package/src/testing/recurrence-policy.ts +33 -0
  268. package/src/testing/recurring-order.ts +32 -0
  269. package/src/testing/review.ts +24 -0
  270. package/src/testing/shipping-method.ts +31 -0
  271. package/src/testing/shopping-list.ts +25 -0
  272. package/src/testing/standalone-price.ts +31 -0
  273. package/src/testing/state.ts +21 -0
  274. package/src/testing/store.ts +26 -0
  275. package/src/testing/subscription.ts +38 -0
  276. package/src/testing/tax-category.ts +27 -0
  277. package/src/testing/type.ts +9 -6
  278. package/src/testing/zone.ts +22 -0
  279. package/src/validate.test.ts +122 -0
  280. package/src/validate.ts +78 -7
  281. package/src/.env +0 -0
@@ -1,99 +1,94 @@
1
1
  import assert from "node:assert";
2
- import type { CartDiscount, TypeDraft } from "@commercetools/platform-sdk";
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
- let response;
78
- response = await supertest(ctMock.app).post("/dummy/types").send(typeDraft);
79
- expect(response.status).toBe(201);
80
- const typeId = response.body.id;
81
-
82
- response = await supertest(ctMock.app)
83
- .post("/dummy/cart-discounts")
84
- .send(getCartDiscountDraft(typeId));
85
- expect(response.status).toBe(201);
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 supertest(ctMock.app)
90
- .get("/dummy/cart-discounts")
91
- .send();
83
+ const response = await ctMock.app.inject({
84
+ method: "GET",
85
+ url: "/dummy/cart-discounts",
86
+ });
92
87
 
93
- expect(response.status).toBe(200);
94
- expect(response.body.count).toBe(1);
88
+ expect(response.statusCode).toBe(200);
89
+ expect(response.json().count).toBe(1);
95
90
 
96
- const myRelativeCartDiscount = response.body.results[0] as CartDiscount;
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 typeId = await createType();
155
- await createCartDiscount(typeId);
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 supertest(ctMock.app)
166
- .post(`/dummy/cart-discounts/${cartDiscount.id}`)
167
- .send({
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
- expect(response.status).toBe(200);
172
- expect(response.body.version).toBe(2);
173
- expect(response.body.key).toBe("my-cart-discount");
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 supertest(ctMock.app)
180
- .post(`/dummy/cart-discounts/${cartDiscount.id}`)
181
- .send({
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
- expect(response.status).toBe(200);
188
- expect(response.body.version).toBe(2);
189
- expect(response.body.description.en).toBe("Description");
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 supertest(ctMock.app)
196
- .post(`/dummy/cart-discounts/${cartDiscount.id}`)
197
- .send({
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
- expect(response.status).toBe(200);
204
- expect(response.body.version).toBe(2);
205
- expect(response.body.validFrom).toBe("2020-01-01T00:00:01.000Z");
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 supertest(ctMock.app)
212
- .post(`/dummy/cart-discounts/${cartDiscount.id}`)
213
- .send({
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
- expect(response.status).toBe(200);
220
- expect(response.body.version).toBe(2);
221
- expect(response.body.validUntil).toBe("2020-12-31T23:59:59.999Z");
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 supertest(ctMock.app)
228
- .post(`/dummy/cart-discounts/${cartDiscount.id}`)
229
- .send({
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
- expect(response.status).toBe(200);
240
- expect(response.body.version).toBe(2);
241
- expect(response.body.validFrom).toBe("2020-01-01T00:00:01.000Z");
242
- expect(response.body.validUntil).toBe("2020-12-31T23:59:59.999Z");
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 supertest(ctMock.app)
249
- .post(`/dummy/cart-discounts/${cartDiscount.id}`)
250
- .send({
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
- expect(response.status).toBe(200);
255
- expect(response.body.version).toBe(2);
256
- expect(response.body.sortOrder).toBe("0.2");
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 supertest(ctMock.app)
263
- .post(`/dummy/cart-discounts/${cartDiscount.id}`)
264
- .send({
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
- expect(response.status).toBe(200);
269
- expect(response.body.version).toBe(2);
270
- expect(response.body.isActive).toBe(true);
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 supertest(ctMock.app)
277
- .post(`/dummy/cart-discounts/${cartDiscount.id}`)
278
- .send({
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
- expect(response.status).toBe(200);
288
- expect(response.body.version).toBe(2);
289
- expect(response.body.target).toStrictEqual({
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 supertest(ctMock.app)
299
- .post(`/dummy/cart-discounts/${cartDiscount.id}`)
300
- .send({
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
- expect(response.status).toBe(200);
316
- expect(response.body.version).toBe(2);
317
- expect(response.body.custom.fields.fixedAmount).toStrictEqual({
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 supertest(ctMock.app)
329
- .post(`/dummy/cart-discounts/${cartDiscount.id}`)
330
- .send({
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
- expect(response.status).toBe(200);
341
- expect(response.body.version).toBe(2);
342
- expect(response.body.custom.fields.fixedAmount).toBeUndefined();
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 supertest(ctMock.app)
349
- .post(`/dummy/cart-discounts/${cartDiscount.id}`)
350
- .send({
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
- expect(response.status).toBe(400);
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 supertest(ctMock.app)
367
- .post(`/dummy/cart-discounts/${cartDiscount.id}`)
368
- .send({
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
- expect(response.status).toBe(200);
377
- expect(response.body.version).toBe(2);
378
- expect(response.body.custom).toBeUndefined();
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 { Router } from "express";
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: Router, repository: CartDiscountRepository) {
8
+ constructor(parent: FastifyInstance, repository: CartDiscountRepository) {
9
9
  super(parent);
10
10
  this.repository = repository;
11
11
  }