@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,7 +1,12 @@
1
1
  import type { Product, Review, State } from "@commercetools/platform-sdk";
2
- import supertest from "supertest";
3
2
  import { beforeEach, describe, expect, test } from "vitest";
4
3
  import { CommercetoolsMock } from "#src/index.ts";
4
+ import {
5
+ productDraftFactory,
6
+ productTypeDraftFactory,
7
+ reviewDraftFactory,
8
+ stateDraftFactory,
9
+ } from "#src/testing/index.ts";
5
10
 
6
11
  describe("Review Update Actions", () => {
7
12
  let ctMock: CommercetoolsMock;
@@ -9,68 +14,68 @@ describe("Review Update Actions", () => {
9
14
  let product: Product;
10
15
  let state: State;
11
16
 
17
+ const createProductDraft = () => productDraftFactory(ctMock);
18
+ const createStateDraft = () => stateDraftFactory(ctMock);
19
+ const createReviewDraft = () => reviewDraftFactory(ctMock);
20
+
12
21
  beforeEach(async () => {
13
22
  ctMock = new CommercetoolsMock();
14
23
 
24
+ // Create a product type first
25
+ const productType = await productTypeDraftFactory(ctMock).create({
26
+ key: "dummy-product-type",
27
+ name: "Dummy Product Type",
28
+ description: "Product type for testing reviews",
29
+ });
30
+
15
31
  // Create a product to target
16
- const productResponse = await supertest(ctMock.app)
17
- .post("/dummy/products")
18
- .send({
19
- name: { en: "Test Product" },
20
- slug: { en: "test-product" },
21
- productType: {
22
- typeId: "product-type",
23
- key: "dummy-product-type",
24
- },
25
- masterVariant: {
26
- sku: "test-sku-1",
27
- prices: [
28
- {
29
- value: {
30
- currencyCode: "EUR",
31
- centAmount: 1000,
32
- },
32
+ product = await createProductDraft().create({
33
+ name: { en: "Test Product" },
34
+ slug: { en: "test-product" },
35
+ productType: {
36
+ typeId: "product-type",
37
+ id: productType.id,
38
+ },
39
+ masterVariant: {
40
+ sku: "test-sku-1",
41
+ prices: [
42
+ {
43
+ value: {
44
+ currencyCode: "EUR",
45
+ centAmount: 1000,
33
46
  },
34
- ],
35
- },
36
- });
37
- expect(productResponse.status).toBe(201);
38
- product = productResponse.body;
47
+ },
48
+ ],
49
+ },
50
+ });
39
51
 
40
52
  // Create a state
41
- const stateResponse = await supertest(ctMock.app)
42
- .post("/dummy/states")
43
- .send({
44
- key: "review-state",
45
- type: "ReviewState",
46
- name: { en: "Review State" },
47
- initial: true,
48
- });
49
- expect(stateResponse.status).toBe(201);
50
- state = stateResponse.body;
53
+ state = await createStateDraft().create({
54
+ key: "review-state",
55
+ type: "ReviewState",
56
+ name: { en: "Review State" },
57
+ initial: true,
58
+ });
51
59
 
52
60
  // Create a review
53
- const reviewResponse = await supertest(ctMock.app)
54
- .post("/dummy/reviews")
55
- .send({
56
- key: "test-review",
57
- authorName: "John Doe",
58
- title: "Great product!",
59
- text: "I really love this product.",
60
- rating: 5,
61
- target: {
62
- typeId: "product",
63
- id: product.id,
64
- },
65
- });
66
- expect(reviewResponse.status).toBe(201);
67
- review = reviewResponse.body;
61
+ review = await createReviewDraft().create({
62
+ key: "test-review",
63
+ authorName: "John Doe",
64
+ title: "Great product!",
65
+ text: "I really love this product.",
66
+ rating: 5,
67
+ target: {
68
+ typeId: "product",
69
+ id: product.id,
70
+ },
71
+ });
68
72
  });
69
73
 
70
74
  test("setAuthorName", async () => {
71
- const response = await supertest(ctMock.app)
72
- .post(`/dummy/reviews/${review.id}`)
73
- .send({
75
+ const response = await ctMock.app.inject({
76
+ method: "POST",
77
+ url: `/dummy/reviews/${review.id}`,
78
+ payload: {
74
79
  version: 1,
75
80
  actions: [
76
81
  {
@@ -78,17 +83,19 @@ describe("Review Update Actions", () => {
78
83
  authorName: "Jane Smith",
79
84
  },
80
85
  ],
81
- });
86
+ },
87
+ });
82
88
 
83
- expect(response.status).toBe(200);
84
- expect(response.body.authorName).toBe("Jane Smith");
85
- expect(response.body.version).toBe(2);
89
+ expect(response.statusCode).toBe(200);
90
+ expect(response.json().authorName).toBe("Jane Smith");
91
+ expect(response.json().version).toBe(2);
86
92
  });
87
93
 
88
94
  test("setTitle", async () => {
89
- const response = await supertest(ctMock.app)
90
- .post(`/dummy/reviews/${review.id}`)
91
- .send({
95
+ const response = await ctMock.app.inject({
96
+ method: "POST",
97
+ url: `/dummy/reviews/${review.id}`,
98
+ payload: {
92
99
  version: 1,
93
100
  actions: [
94
101
  {
@@ -96,17 +103,19 @@ describe("Review Update Actions", () => {
96
103
  title: "Amazing product!",
97
104
  },
98
105
  ],
99
- });
106
+ },
107
+ });
100
108
 
101
- expect(response.status).toBe(200);
102
- expect(response.body.title).toBe("Amazing product!");
103
- expect(response.body.version).toBe(2);
109
+ expect(response.statusCode).toBe(200);
110
+ expect(response.json().title).toBe("Amazing product!");
111
+ expect(response.json().version).toBe(2);
104
112
  });
105
113
 
106
114
  test("setText", async () => {
107
- const response = await supertest(ctMock.app)
108
- .post(`/dummy/reviews/${review.id}`)
109
- .send({
115
+ const response = await ctMock.app.inject({
116
+ method: "POST",
117
+ url: `/dummy/reviews/${review.id}`,
118
+ payload: {
110
119
  version: 1,
111
120
  actions: [
112
121
  {
@@ -114,17 +123,19 @@ describe("Review Update Actions", () => {
114
123
  text: "This product exceeded my expectations!",
115
124
  },
116
125
  ],
117
- });
126
+ },
127
+ });
118
128
 
119
- expect(response.status).toBe(200);
120
- expect(response.body.text).toBe("This product exceeded my expectations!");
121
- expect(response.body.version).toBe(2);
129
+ expect(response.statusCode).toBe(200);
130
+ expect(response.json().text).toBe("This product exceeded my expectations!");
131
+ expect(response.json().version).toBe(2);
122
132
  });
123
133
 
124
134
  test("setRating", async () => {
125
- const response = await supertest(ctMock.app)
126
- .post(`/dummy/reviews/${review.id}`)
127
- .send({
135
+ const response = await ctMock.app.inject({
136
+ method: "POST",
137
+ url: `/dummy/reviews/${review.id}`,
138
+ payload: {
128
139
  version: 1,
129
140
  actions: [
130
141
  {
@@ -132,17 +143,19 @@ describe("Review Update Actions", () => {
132
143
  rating: 4,
133
144
  },
134
145
  ],
135
- });
146
+ },
147
+ });
136
148
 
137
- expect(response.status).toBe(200);
138
- expect(response.body.rating).toBe(4);
139
- expect(response.body.version).toBe(2);
149
+ expect(response.statusCode).toBe(200);
150
+ expect(response.json().rating).toBe(4);
151
+ expect(response.json().version).toBe(2);
140
152
  });
141
153
 
142
154
  test("setLocale", async () => {
143
- const response = await supertest(ctMock.app)
144
- .post(`/dummy/reviews/${review.id}`)
145
- .send({
155
+ const response = await ctMock.app.inject({
156
+ method: "POST",
157
+ url: `/dummy/reviews/${review.id}`,
158
+ payload: {
146
159
  version: 1,
147
160
  actions: [
148
161
  {
@@ -150,17 +163,19 @@ describe("Review Update Actions", () => {
150
163
  locale: "de-DE",
151
164
  },
152
165
  ],
153
- });
166
+ },
167
+ });
154
168
 
155
- expect(response.status).toBe(200);
156
- expect(response.body.locale).toBe("de-DE");
157
- expect(response.body.version).toBe(2);
169
+ expect(response.statusCode).toBe(200);
170
+ expect(response.json().locale).toBe("de-DE");
171
+ expect(response.json().version).toBe(2);
158
172
  });
159
173
 
160
174
  test("setKey", async () => {
161
- const response = await supertest(ctMock.app)
162
- .post(`/dummy/reviews/${review.id}`)
163
- .send({
175
+ const response = await ctMock.app.inject({
176
+ method: "POST",
177
+ url: `/dummy/reviews/${review.id}`,
178
+ payload: {
164
179
  version: 1,
165
180
  actions: [
166
181
  {
@@ -168,17 +183,19 @@ describe("Review Update Actions", () => {
168
183
  key: "updated-review-key",
169
184
  },
170
185
  ],
171
- });
186
+ },
187
+ });
172
188
 
173
- expect(response.status).toBe(200);
174
- expect(response.body.key).toBe("updated-review-key");
175
- expect(response.body.version).toBe(2);
189
+ expect(response.statusCode).toBe(200);
190
+ expect(response.json().key).toBe("updated-review-key");
191
+ expect(response.json().version).toBe(2);
176
192
  });
177
193
 
178
194
  test("transitionState", async () => {
179
- const response = await supertest(ctMock.app)
180
- .post(`/dummy/reviews/${review.id}`)
181
- .send({
195
+ const response = await ctMock.app.inject({
196
+ method: "POST",
197
+ url: `/dummy/reviews/${review.id}`,
198
+ payload: {
182
199
  version: 1,
183
200
  actions: [
184
201
  {
@@ -189,20 +206,22 @@ describe("Review Update Actions", () => {
189
206
  },
190
207
  },
191
208
  ],
192
- });
209
+ },
210
+ });
193
211
 
194
- expect(response.status).toBe(200);
195
- expect(response.body.state).toMatchObject({
212
+ expect(response.statusCode).toBe(200);
213
+ expect(response.json().state).toMatchObject({
196
214
  typeId: "state",
197
215
  id: state.id,
198
216
  });
199
- expect(response.body.version).toBe(2);
217
+ expect(response.json().version).toBe(2);
200
218
  });
201
219
 
202
220
  test("multiple actions in one update", async () => {
203
- const response = await supertest(ctMock.app)
204
- .post(`/dummy/reviews/${review.id}`)
205
- .send({
221
+ const response = await ctMock.app.inject({
222
+ method: "POST",
223
+ url: `/dummy/reviews/${review.id}`,
224
+ payload: {
206
225
  version: 1,
207
226
  actions: [
208
227
  {
@@ -218,13 +237,15 @@ describe("Review Update Actions", () => {
218
237
  text: "Updated review text",
219
238
  },
220
239
  ],
221
- });
240
+ },
241
+ });
222
242
 
223
- expect(response.status).toBe(200);
224
- expect(response.body.authorName).toBe("Updated Author");
225
- expect(response.body.rating).toBe(3);
226
- expect(response.body.text).toBe("Updated review text");
243
+ expect(response.statusCode).toBe(200);
244
+ const body = response.json();
245
+ expect(body.authorName).toBe("Updated Author");
246
+ expect(body.rating).toBe(3);
247
+ expect(body.text).toBe("Updated review text");
227
248
  // Version should be incremented by 3 since each action modifies the resource
228
- expect(response.body.version).toBe(4);
249
+ expect(body.version).toBe(4);
229
250
  });
230
251
  });
@@ -1,11 +1,11 @@
1
- import type { Router } from "express";
1
+ import type { FastifyInstance } from "fastify";
2
2
  import type { ReviewRepository } from "../repositories/review.ts";
3
3
  import AbstractService from "./abstract.ts";
4
4
 
5
5
  export class ReviewService extends AbstractService {
6
6
  public repository: ReviewRepository;
7
7
 
8
- constructor(parent: Router, repository: ReviewRepository) {
8
+ constructor(parent: FastifyInstance, repository: ReviewRepository) {
9
9
  super(parent);
10
10
  this.repository = repository;
11
11
  }
@@ -1,72 +1,64 @@
1
- import type {
2
- Cart,
3
- CartDraft,
4
- ShippingMethodDraft,
5
- TaxCategoryDraft,
6
- ZoneDraft,
7
- } from "@commercetools/platform-sdk";
8
- import supertest from "supertest";
9
1
  import { afterEach, beforeEach, describe, expect, test } from "vitest";
2
+ import {
3
+ cartDraftFactory,
4
+ shippingMethodDraftFactory,
5
+ taxCategoryDraftFactory,
6
+ zoneDraftFactory,
7
+ } from "#src/testing/index.ts";
10
8
  import { CommercetoolsMock } from "../index.ts";
11
- import { isType } from "../types.ts";
12
9
 
13
10
  const ctMock = new CommercetoolsMock();
14
11
 
15
12
  describe("Shipping method", () => {
13
+ const taxCategoryDraft = taxCategoryDraftFactory(ctMock);
14
+ const zoneDraft = zoneDraftFactory(ctMock);
15
+ const shippingMethodDraft = shippingMethodDraftFactory(ctMock);
16
+ const cartDraft = cartDraftFactory(ctMock);
17
+
16
18
  beforeEach(async () => {
17
- await supertest(ctMock.app)
18
- .post("/dummy/tax-categories")
19
- .send(
20
- isType<TaxCategoryDraft>({
21
- name: "foo",
22
- key: "standard",
23
- rates: [],
24
- }),
25
- )
26
- .then((res) => {
27
- expect(res.status).toEqual(201);
28
- });
29
-
30
- await supertest(ctMock.app)
31
- .post("/dummy/zones")
32
- .send(
33
- isType<ZoneDraft>({
34
- name: "The Netherlands",
35
- key: "NL",
36
- locations: [
37
- {
38
- country: "NL",
39
- },
40
- ],
41
- }),
42
- )
43
- .then((res) => {
44
- expect(res.status).toEqual(201);
45
- });
19
+ await taxCategoryDraft.create({
20
+ name: "foo",
21
+ key: "standard",
22
+ rates: [],
23
+ });
24
+
25
+ await zoneDraft.create({
26
+ name: "The Netherlands",
27
+ key: "NL",
28
+ locations: [
29
+ {
30
+ country: "NL",
31
+ },
32
+ ],
33
+ });
46
34
  });
47
35
 
48
36
  afterEach(async () => {
49
- ctMock.clear();
37
+ await ctMock.clear();
50
38
  });
51
39
 
52
40
  test("Create shipping method", async () => {
53
- const draft: ShippingMethodDraft = {
41
+ const draft = shippingMethodDraft.build({
54
42
  name: "foo",
55
43
  taxCategory: { typeId: "tax-category", key: "standard" },
56
44
  isDefault: true,
57
45
  zoneRates: [],
58
- };
59
- const response = await supertest(ctMock.app)
60
- .post("/dummy/shipping-methods")
61
- .send(draft);
46
+ });
62
47
 
63
- expect(response.status).toBe(201);
48
+ const response = await ctMock.app.inject({
49
+ method: "POST",
50
+ url: "/dummy/shipping-methods",
51
+ payload: draft,
52
+ });
64
53
 
65
- expect(response.body).toEqual({
54
+ expect(response.statusCode).toBe(201);
55
+ expect(response.json()).toEqual({
66
56
  createdAt: expect.anything(),
57
+ createdBy: expect.anything(),
67
58
  id: expect.anything(),
68
59
  isDefault: true,
69
60
  lastModifiedAt: expect.anything(),
61
+ lastModifiedBy: expect.anything(),
70
62
  name: "foo",
71
63
  taxCategory: {
72
64
  id: expect.anything(),
@@ -79,103 +71,82 @@ describe("Shipping method", () => {
79
71
  });
80
72
 
81
73
  test("Get shipping method", async () => {
82
- const draft: ShippingMethodDraft = {
74
+ const shippingMethod = await shippingMethodDraft.create({
83
75
  name: "foo",
84
76
  taxCategory: { typeId: "tax-category", key: "standard" },
85
77
  isDefault: true,
86
78
  zoneRates: [],
87
- };
88
- const createResponse = await supertest(ctMock.app)
89
- .post("/dummy/shipping-methods")
90
- .send(draft);
91
-
92
- expect(createResponse.status).toBe(201);
79
+ });
93
80
 
94
- const response = await supertest(ctMock.app).get(
95
- `/dummy/shipping-methods/${createResponse.body.id}`,
96
- );
81
+ const response = await ctMock.app.inject({
82
+ method: "GET",
83
+ url: `/dummy/shipping-methods/${shippingMethod.id}`,
84
+ });
97
85
 
98
- expect(response.status).toBe(200);
99
- expect(response.body).toEqual(createResponse.body);
86
+ expect(response.statusCode).toBe(200);
87
+ expect(response.json()).toEqual(shippingMethod);
100
88
  });
101
89
 
102
90
  test("Get shipping methods matching cart", async () => {
103
- const cart = await supertest(ctMock.app)
104
- .post("/dummy/carts")
105
- .send(
106
- isType<CartDraft>({
107
- currency: "EUR",
108
- shippingAddress: {
109
- country: "NL",
91
+ const cart = await cartDraft.create({
92
+ currency: "EUR",
93
+ shippingAddress: {
94
+ country: "NL",
95
+ },
96
+ });
97
+
98
+ await shippingMethodDraft.create({
99
+ name: "NL",
100
+ taxCategory: { typeId: "tax-category", key: "standard" },
101
+ isDefault: true,
102
+ zoneRates: [
103
+ {
104
+ zone: {
105
+ typeId: "zone",
106
+ key: "NL",
110
107
  },
111
- }),
112
- )
113
- .then((res) => res.body as Cart);
114
-
115
- await supertest(ctMock.app)
116
- .post("/dummy/shipping-methods")
117
- .send(
118
- isType<ShippingMethodDraft>({
119
- name: "NL",
120
- taxCategory: { typeId: "tax-category", key: "standard" },
121
- isDefault: true,
122
- zoneRates: [
108
+ shippingRates: [
123
109
  {
124
- zone: {
125
- typeId: "zone",
126
- key: "NL",
110
+ price: {
111
+ currencyCode: "EUR",
112
+ centAmount: 495,
127
113
  },
128
- shippingRates: [
129
- {
130
- price: {
131
- currencyCode: "EUR",
132
- centAmount: 495,
133
- },
134
- },
135
- ],
136
114
  },
137
115
  ],
138
- }),
139
- )
140
- .then((res) => {
141
- expect(res.status).toEqual(201);
142
- });
143
-
144
- await supertest(ctMock.app)
145
- .post("/dummy/shipping-methods")
146
- .send(
147
- isType<ShippingMethodDraft>({
148
- name: "NL/GBP",
149
- taxCategory: { typeId: "tax-category", key: "standard" },
150
- isDefault: true,
151
- zoneRates: [
116
+ },
117
+ ],
118
+ });
119
+
120
+ await shippingMethodDraft.create({
121
+ name: "NL/GBP",
122
+ taxCategory: { typeId: "tax-category", key: "standard" },
123
+ isDefault: true,
124
+ zoneRates: [
125
+ {
126
+ zone: {
127
+ typeId: "zone",
128
+ key: "NL",
129
+ },
130
+ shippingRates: [
152
131
  {
153
- zone: {
154
- typeId: "zone",
155
- key: "NL",
132
+ price: {
133
+ currencyCode: "GBP",
134
+ centAmount: 495,
156
135
  },
157
- shippingRates: [
158
- {
159
- price: {
160
- currencyCode: "GBP",
161
- centAmount: 495,
162
- },
163
- },
164
- ],
165
136
  },
166
137
  ],
167
- }),
168
- )
169
- .then((res) => {
170
- expect(res.status).toEqual(201);
171
- });
172
-
173
- const response = await supertest(ctMock.app).get(
174
- `/dummy/shipping-methods/matching-cart?cartId=${cart.id}`,
175
- );
176
-
177
- expect(response.status, JSON.stringify(response.body)).toBe(200);
178
- expect(response.body).toMatchObject({
138
+ },
139
+ ],
140
+ });
141
+
142
+ const response = await ctMock.app.inject({
143
+ method: "GET",
144
+ url: `/dummy/shipping-methods/matching-cart?cartId=${cart.id}`,
145
+ });
146
+
147
+ const body = response.json();
148
+ expect(response.statusCode, JSON.stringify(body)).toBe(200);
149
+ expect(body).toMatchObject({
179
150
  count: 1,
180
151
  limit: 20,
181
152
  offset: 0,