@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,81 +1,69 @@
1
- import type {
2
- CartDraft,
3
- RecurringOrderDraft,
4
- } from "@commercetools/platform-sdk";
5
- import supertest from "supertest";
6
1
  import { describe, expect, test } from "vitest";
2
+ import { cartDraftFactory } from "#src/testing/cart.ts";
3
+ import { productDraftFactory } from "#src/testing/product.ts";
4
+ import { productTypeDraftFactory } from "#src/testing/product-type.ts";
5
+ import { recurringOrderDraftFactory } from "#src/testing/recurring-order.ts";
7
6
  import { CommercetoolsMock } from "../index.ts";
8
7
 
9
8
  const ctMock = new CommercetoolsMock();
10
9
 
11
10
  describe("RecurringOrder", () => {
12
11
  const createTestCart = async () => {
13
- await supertest(ctMock.app).post("/dummy/product-types").send({
14
- key: "test-product-type",
15
- name: "Test Product Type",
16
- description: "A test product type",
17
- });
12
+ const productType = await productTypeDraftFactory(ctMock).create();
18
13
 
19
- const productResponse = await supertest(ctMock.app)
20
- .post("/dummy/products")
21
- .send({
22
- key: "test-product",
23
- name: { en: "Test Product" },
24
- productType: {
25
- typeId: "product-type",
26
- key: "test-product-type",
27
- },
28
- slug: { en: "test-product" },
29
- masterVariant: {
30
- id: 1,
31
- sku: "test-sku",
32
- prices: [
33
- {
34
- value: {
35
- type: "centPrecision",
36
- currencyCode: "EUR",
37
- centAmount: 1000,
38
- },
14
+ const product = await productDraftFactory(ctMock).create({
15
+ productType: {
16
+ typeId: "product-type",
17
+ id: productType.id,
18
+ },
19
+ masterVariant: {
20
+ sku: "test-sku",
21
+ prices: [
22
+ {
23
+ value: {
24
+ type: "centPrecision",
25
+ currencyCode: "EUR",
26
+ centAmount: 1000,
39
27
  },
40
- ],
41
- },
42
- variants: [],
43
- });
28
+ },
29
+ ],
30
+ },
31
+ variants: [],
32
+ });
44
33
 
45
- const cartDraft: CartDraft = {
34
+ const cart = await cartDraftFactory(ctMock).create({
46
35
  currency: "EUR",
47
36
  country: "NL",
48
- };
49
-
50
- const cartResponse = await supertest(ctMock.app)
51
- .post("/dummy/carts")
52
- .send(cartDraft);
37
+ });
53
38
 
54
- await supertest(ctMock.app)
55
- .post(`/dummy/carts/${cartResponse.body.id}`)
56
- .send({
57
- version: cartResponse.body.version,
39
+ await ctMock.app.inject({
40
+ method: "POST",
41
+ url: `/dummy/carts/${cart.id}`,
42
+ payload: {
43
+ version: cart.version,
58
44
  actions: [
59
45
  {
60
46
  action: "addLineItem",
61
- productId: productResponse.body.id,
47
+ productId: product.id,
62
48
  variantId: 1,
63
49
  quantity: 2,
64
50
  },
65
51
  ],
66
- });
52
+ },
53
+ });
67
54
 
68
- const updatedCartResponse = await supertest(ctMock.app).get(
69
- `/dummy/carts/${cartResponse.body.id}`,
70
- );
55
+ const updatedCartResponse = await ctMock.app.inject({
56
+ method: "GET",
57
+ url: `/dummy/carts/${cart.id}`,
58
+ });
71
59
 
72
- return updatedCartResponse.body;
60
+ return updatedCartResponse.json();
73
61
  };
74
62
 
75
63
  test("Create recurring order", async () => {
76
64
  const cart = await createTestCart();
77
65
 
78
- const draft: RecurringOrderDraft = {
66
+ const draft = recurringOrderDraftFactory(ctMock).build({
79
67
  key: "weekly-order",
80
68
  cart: {
81
69
  typeId: "cart",
@@ -84,19 +72,23 @@ describe("RecurringOrder", () => {
84
72
  cartVersion: cart.version,
85
73
  startsAt: "2025-01-01T10:00:00.000Z",
86
74
  expiresAt: "2025-12-31T23:59:59.000Z",
87
- };
75
+ });
88
76
 
89
- const response = await supertest(ctMock.app)
90
- .post("/dummy/recurring-orders")
91
- .send(draft);
77
+ const response = await ctMock.app.inject({
78
+ method: "POST",
79
+ url: "/dummy/recurring-orders",
80
+ payload: draft,
81
+ });
92
82
 
93
- expect(response.status).toBe(201);
83
+ expect(response.statusCode).toBe(201);
94
84
 
95
- expect(response.body).toEqual({
85
+ expect(response.json()).toEqual({
96
86
  createdAt: expect.anything(),
87
+ createdBy: expect.anything(),
97
88
  id: expect.anything(),
98
89
  key: "weekly-order",
99
90
  lastModifiedAt: expect.anything(),
91
+ lastModifiedBy: expect.anything(),
100
92
  cart: {
101
93
  typeId: "cart",
102
94
  id: cart.id,
@@ -120,7 +112,7 @@ describe("RecurringOrder", () => {
120
112
  test("Get recurring order", async () => {
121
113
  const cart = await createTestCart();
122
114
 
123
- const draft: RecurringOrderDraft = {
115
+ const recurringOrder = await recurringOrderDraftFactory(ctMock).create({
124
116
  key: "get-test-order",
125
117
  cart: {
126
118
  typeId: "cart",
@@ -128,26 +120,21 @@ describe("RecurringOrder", () => {
128
120
  },
129
121
  cartVersion: cart.version,
130
122
  startsAt: "2025-01-01T10:00:00.000Z",
131
- };
132
-
133
- const createResponse = await supertest(ctMock.app)
134
- .post("/dummy/recurring-orders")
135
- .send(draft);
136
-
137
- expect(createResponse.status).toBe(201);
123
+ });
138
124
 
139
- const response = await supertest(ctMock.app).get(
140
- `/dummy/recurring-orders/${createResponse.body.id}`,
141
- );
125
+ const response = await ctMock.app.inject({
126
+ method: "GET",
127
+ url: `/dummy/recurring-orders/${recurringOrder.id}`,
128
+ });
142
129
 
143
- expect(response.status).toBe(200);
144
- expect(response.body).toEqual(createResponse.body);
130
+ expect(response.statusCode).toBe(200);
131
+ expect(response.json()).toEqual(recurringOrder);
145
132
  });
146
133
 
147
134
  test("Get recurring order by key", async () => {
148
135
  const cart = await createTestCart();
149
136
 
150
- const draft: RecurringOrderDraft = {
137
+ const recurringOrder = await recurringOrderDraftFactory(ctMock).create({
151
138
  key: "key-test-order",
152
139
  cart: {
153
140
  typeId: "cart",
@@ -155,26 +142,21 @@ describe("RecurringOrder", () => {
155
142
  },
156
143
  cartVersion: cart.version,
157
144
  startsAt: "2025-01-01T10:00:00.000Z",
158
- };
159
-
160
- const createResponse = await supertest(ctMock.app)
161
- .post("/dummy/recurring-orders")
162
- .send(draft);
163
-
164
- expect(createResponse.status).toBe(201);
145
+ });
165
146
 
166
- const response = await supertest(ctMock.app).get(
167
- "/dummy/recurring-orders/key=key-test-order",
168
- );
147
+ const response = await ctMock.app.inject({
148
+ method: "GET",
149
+ url: "/dummy/recurring-orders/key=key-test-order",
150
+ });
169
151
 
170
- expect(response.status).toBe(200);
171
- expect(response.body).toEqual(createResponse.body);
152
+ expect(response.statusCode).toBe(200);
153
+ expect(response.json()).toEqual(recurringOrder);
172
154
  });
173
155
 
174
156
  test("Query recurring orders", async () => {
175
157
  const cart = await createTestCart();
176
158
 
177
- const draft: RecurringOrderDraft = {
159
+ const recurringOrder = await recurringOrderDraftFactory(ctMock).create({
178
160
  key: "query-test-order",
179
161
  cart: {
180
162
  typeId: "cart",
@@ -182,25 +164,22 @@ describe("RecurringOrder", () => {
182
164
  },
183
165
  cartVersion: cart.version,
184
166
  startsAt: "2025-01-01T10:00:00.000Z",
185
- };
186
-
187
- const createResponse = await supertest(ctMock.app)
188
- .post("/dummy/recurring-orders")
189
- .send(draft);
190
-
191
- expect(createResponse.status).toBe(201);
167
+ });
192
168
 
193
- const response = await supertest(ctMock.app).get("/dummy/recurring-orders");
169
+ const response = await ctMock.app.inject({
170
+ method: "GET",
171
+ url: "/dummy/recurring-orders",
172
+ });
194
173
 
195
- expect(response.status).toBe(200);
196
- expect(response.body.count).toBeGreaterThan(0);
197
- expect(response.body.results).toContainEqual(createResponse.body);
174
+ expect(response.statusCode).toBe(200);
175
+ expect(response.json().count).toBeGreaterThan(0);
176
+ expect(response.json().results).toContainEqual(recurringOrder);
198
177
  });
199
178
 
200
179
  test("Update recurring order - setKey", async () => {
201
180
  const cart = await createTestCart();
202
181
 
203
- const draft: RecurringOrderDraft = {
182
+ const recurringOrder = await recurringOrderDraftFactory(ctMock).create({
204
183
  key: "original-key",
205
184
  cart: {
206
185
  typeId: "cart",
@@ -208,35 +187,31 @@ describe("RecurringOrder", () => {
208
187
  },
209
188
  cartVersion: cart.version,
210
189
  startsAt: "2025-01-01T10:00:00.000Z",
211
- };
212
-
213
- const createResponse = await supertest(ctMock.app)
214
- .post("/dummy/recurring-orders")
215
- .send(draft);
216
-
217
- expect(createResponse.status).toBe(201);
190
+ });
218
191
 
219
- const updateResponse = await supertest(ctMock.app)
220
- .post(`/dummy/recurring-orders/${createResponse.body.id}`)
221
- .send({
222
- version: createResponse.body.version,
192
+ const updateResponse = await ctMock.app.inject({
193
+ method: "POST",
194
+ url: `/dummy/recurring-orders/${recurringOrder.id}`,
195
+ payload: {
196
+ version: recurringOrder.version,
223
197
  actions: [
224
198
  {
225
199
  action: "setKey",
226
200
  key: "updated-key",
227
201
  },
228
202
  ],
229
- });
203
+ },
204
+ });
230
205
 
231
- expect(updateResponse.status).toBe(200);
232
- expect(updateResponse.body.key).toBe("updated-key");
233
- expect(updateResponse.body.version).toBe(2);
206
+ expect(updateResponse.statusCode).toBe(200);
207
+ expect(updateResponse.json().key).toBe("updated-key");
208
+ expect(updateResponse.json().version).toBe(2);
234
209
  });
235
210
 
236
211
  test("Update recurring order - setStartsAt", async () => {
237
212
  const cart = await createTestCart();
238
213
 
239
- const draft: RecurringOrderDraft = {
214
+ const recurringOrder = await recurringOrderDraftFactory(ctMock).create({
240
215
  key: "starts-at-test",
241
216
  cart: {
242
217
  typeId: "cart",
@@ -244,35 +219,31 @@ describe("RecurringOrder", () => {
244
219
  },
245
220
  cartVersion: cart.version,
246
221
  startsAt: "2025-01-01T10:00:00.000Z",
247
- };
248
-
249
- const createResponse = await supertest(ctMock.app)
250
- .post("/dummy/recurring-orders")
251
- .send(draft);
252
-
253
- expect(createResponse.status).toBe(201);
222
+ });
254
223
 
255
- const updateResponse = await supertest(ctMock.app)
256
- .post(`/dummy/recurring-orders/${createResponse.body.id}`)
257
- .send({
258
- version: createResponse.body.version,
224
+ const updateResponse = await ctMock.app.inject({
225
+ method: "POST",
226
+ url: `/dummy/recurring-orders/${recurringOrder.id}`,
227
+ payload: {
228
+ version: recurringOrder.version,
259
229
  actions: [
260
230
  {
261
231
  action: "setStartsAt",
262
232
  startsAt: "2025-02-01T10:00:00.000Z",
263
233
  },
264
234
  ],
265
- });
235
+ },
236
+ });
266
237
 
267
- expect(updateResponse.status).toBe(200);
268
- expect(updateResponse.body.startsAt).toBe("2025-02-01T10:00:00.000Z");
269
- expect(updateResponse.body.version).toBe(2);
238
+ expect(updateResponse.statusCode).toBe(200);
239
+ expect(updateResponse.json().startsAt).toBe("2025-02-01T10:00:00.000Z");
240
+ expect(updateResponse.json().version).toBe(2);
270
241
  });
271
242
 
272
243
  test("Update recurring order - setExpiresAt", async () => {
273
244
  const cart = await createTestCart();
274
245
 
275
- const draft: RecurringOrderDraft = {
246
+ const recurringOrder = await recurringOrderDraftFactory(ctMock).create({
276
247
  key: "expires-at-test",
277
248
  cart: {
278
249
  typeId: "cart",
@@ -280,35 +251,31 @@ describe("RecurringOrder", () => {
280
251
  },
281
252
  cartVersion: cart.version,
282
253
  startsAt: "2025-01-01T10:00:00.000Z",
283
- };
284
-
285
- const createResponse = await supertest(ctMock.app)
286
- .post("/dummy/recurring-orders")
287
- .send(draft);
288
-
289
- expect(createResponse.status).toBe(201);
254
+ });
290
255
 
291
- const updateResponse = await supertest(ctMock.app)
292
- .post(`/dummy/recurring-orders/${createResponse.body.id}`)
293
- .send({
294
- version: createResponse.body.version,
256
+ const updateResponse = await ctMock.app.inject({
257
+ method: "POST",
258
+ url: `/dummy/recurring-orders/${recurringOrder.id}`,
259
+ payload: {
260
+ version: recurringOrder.version,
295
261
  actions: [
296
262
  {
297
263
  action: "setExpiresAt",
298
264
  expiresAt: "2026-01-01T00:00:00.000Z",
299
265
  },
300
266
  ],
301
- });
267
+ },
268
+ });
302
269
 
303
- expect(updateResponse.status).toBe(200);
304
- expect(updateResponse.body.expiresAt).toBe("2026-01-01T00:00:00.000Z");
305
- expect(updateResponse.body.version).toBe(2);
270
+ expect(updateResponse.statusCode).toBe(200);
271
+ expect(updateResponse.json().expiresAt).toBe("2026-01-01T00:00:00.000Z");
272
+ expect(updateResponse.json().version).toBe(2);
306
273
  });
307
274
 
308
275
  test("Update recurring order - setRecurringOrderState to paused", async () => {
309
276
  const cart = await createTestCart();
310
277
 
311
- const draft: RecurringOrderDraft = {
278
+ const recurringOrder = await recurringOrderDraftFactory(ctMock).create({
312
279
  key: "state-test",
313
280
  cart: {
314
281
  typeId: "cart",
@@ -316,18 +283,13 @@ describe("RecurringOrder", () => {
316
283
  },
317
284
  cartVersion: cart.version,
318
285
  startsAt: "2025-01-01T10:00:00.000Z",
319
- };
320
-
321
- const createResponse = await supertest(ctMock.app)
322
- .post("/dummy/recurring-orders")
323
- .send(draft);
324
-
325
- expect(createResponse.status).toBe(201);
286
+ });
326
287
 
327
- const updateResponse = await supertest(ctMock.app)
328
- .post(`/dummy/recurring-orders/${createResponse.body.id}`)
329
- .send({
330
- version: createResponse.body.version,
288
+ const updateResponse = await ctMock.app.inject({
289
+ method: "POST",
290
+ url: `/dummy/recurring-orders/${recurringOrder.id}`,
291
+ payload: {
292
+ version: recurringOrder.version,
331
293
  actions: [
332
294
  {
333
295
  action: "setRecurringOrderState",
@@ -336,17 +298,18 @@ describe("RecurringOrder", () => {
336
298
  },
337
299
  },
338
300
  ],
339
- });
301
+ },
302
+ });
340
303
 
341
- expect(updateResponse.status).toBe(200);
342
- expect(updateResponse.body.recurringOrderState).toBe("Paused");
343
- expect(updateResponse.body.version).toBe(2);
304
+ expect(updateResponse.statusCode).toBe(200);
305
+ expect(updateResponse.json().recurringOrderState).toBe("Paused");
306
+ expect(updateResponse.json().version).toBe(2);
344
307
  });
345
308
 
346
309
  test("Update recurring order - setOrderSkipConfiguration", async () => {
347
310
  const cart = await createTestCart();
348
311
 
349
- const draft: RecurringOrderDraft = {
312
+ const recurringOrder = await recurringOrderDraftFactory(ctMock).create({
350
313
  key: "skip-test",
351
314
  cart: {
352
315
  typeId: "cart",
@@ -354,45 +317,41 @@ describe("RecurringOrder", () => {
354
317
  },
355
318
  cartVersion: cart.version,
356
319
  startsAt: "2025-01-01T10:00:00.000Z",
357
- };
358
-
359
- const createResponse = await supertest(ctMock.app)
360
- .post("/dummy/recurring-orders")
361
- .send(draft);
362
-
363
- expect(createResponse.status).toBe(201);
320
+ });
364
321
 
365
- const updateResponse = await supertest(ctMock.app)
366
- .post(`/dummy/recurring-orders/${createResponse.body.id}`)
367
- .send({
368
- version: createResponse.body.version,
322
+ const updateResponse = await ctMock.app.inject({
323
+ method: "POST",
324
+ url: `/dummy/recurring-orders/${recurringOrder.id}`,
325
+ payload: {
326
+ version: recurringOrder.version,
369
327
  actions: [
370
328
  {
371
329
  action: "setOrderSkipConfiguration",
372
- skipConfiguration: {
330
+ skipConfigurationInputDraft: {
373
331
  type: "totalSkip",
374
332
  totalToSkip: 2,
375
333
  },
376
334
  updatedExpiresAt: "2025-06-01T00:00:00.000Z",
377
335
  },
378
336
  ],
379
- });
337
+ },
338
+ });
380
339
 
381
- expect(updateResponse.status).toBe(200);
382
- expect(updateResponse.body.skipConfiguration).toEqual({
340
+ expect(updateResponse.statusCode).toBe(200);
341
+ expect(updateResponse.json().skipConfiguration).toEqual({
383
342
  type: "totalSkip",
384
343
  totalToSkip: 2,
385
344
  skipped: 0,
386
345
  lastSkippedAt: undefined,
387
346
  });
388
- expect(updateResponse.body.expiresAt).toBe("2025-06-01T00:00:00.000Z");
389
- expect(updateResponse.body.version).toBe(2);
347
+ expect(updateResponse.json().expiresAt).toBe("2025-06-01T00:00:00.000Z");
348
+ expect(updateResponse.json().version).toBe(2);
390
349
  });
391
350
 
392
351
  test("Delete recurring order", async () => {
393
352
  const cart = await createTestCart();
394
353
 
395
- const draft: RecurringOrderDraft = {
354
+ const recurringOrder = await recurringOrderDraftFactory(ctMock).create({
396
355
  key: "delete-test",
397
356
  cart: {
398
357
  typeId: "cart",
@@ -400,25 +359,21 @@ describe("RecurringOrder", () => {
400
359
  },
401
360
  cartVersion: cart.version,
402
361
  startsAt: "2025-01-01T10:00:00.000Z",
403
- };
404
-
405
- const createResponse = await supertest(ctMock.app)
406
- .post("/dummy/recurring-orders")
407
- .send(draft);
408
-
409
- expect(createResponse.status).toBe(201);
362
+ });
410
363
 
411
- const deleteResponse = await supertest(ctMock.app)
412
- .delete(`/dummy/recurring-orders/${createResponse.body.id}`)
413
- .query({ version: createResponse.body.version });
364
+ const deleteResponse = await ctMock.app.inject({
365
+ method: "DELETE",
366
+ url: `/dummy/recurring-orders/${recurringOrder.id}?version=${recurringOrder.version}`,
367
+ });
414
368
 
415
- expect(deleteResponse.status).toBe(200);
416
- expect(deleteResponse.body).toEqual(createResponse.body);
369
+ expect(deleteResponse.statusCode).toBe(200);
370
+ expect(deleteResponse.json()).toEqual(recurringOrder);
417
371
 
418
- const getResponse = await supertest(ctMock.app).get(
419
- `/dummy/recurring-orders/${createResponse.body.id}`,
420
- );
372
+ const getResponse = await ctMock.app.inject({
373
+ method: "GET",
374
+ url: `/dummy/recurring-orders/${recurringOrder.id}`,
375
+ });
421
376
 
422
- expect(getResponse.status).toBe(404);
377
+ expect(getResponse.statusCode).toBe(404);
423
378
  });
424
379
  });
@@ -1,11 +1,11 @@
1
- import type { Router } from "express";
1
+ import type { FastifyInstance } from "fastify";
2
2
  import type { RecurringOrderRepository } from "../repositories/recurring-order/index.ts";
3
3
  import AbstractService from "./abstract.ts";
4
4
 
5
5
  export class RecurringOrderService extends AbstractService {
6
6
  public repository: RecurringOrderRepository;
7
7
 
8
- constructor(parent: Router, repository: RecurringOrderRepository) {
8
+ constructor(parent: FastifyInstance, repository: RecurringOrderRepository) {
9
9
  super(parent);
10
10
  this.repository = repository;
11
11
  }