@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,13 +1,14 @@
1
- import type { ExtensionDraft } from "@commercetools/platform-sdk";
2
- import supertest from "supertest";
3
1
  import { describe, expect, test } from "vitest";
2
+ import { extensionDraftFactory } from "#src/testing/index.ts";
4
3
  import { CommercetoolsMock } from "../index.ts";
5
4
 
6
5
  const ctMock = new CommercetoolsMock();
7
6
 
8
7
  describe("Extension", () => {
8
+ const extensionDraft = extensionDraftFactory(ctMock);
9
+
9
10
  test("Create extension", async () => {
10
- const draft: ExtensionDraft = {
11
+ const draft = extensionDraft.build({
11
12
  key: "order-validation",
12
13
  destination: {
13
14
  type: "HTTP",
@@ -19,15 +20,18 @@ describe("Extension", () => {
19
20
  actions: ["Create"],
20
21
  },
21
22
  ],
22
- };
23
- const response = await supertest(ctMock.app)
24
- .post("/dummy/extensions")
25
- .send(draft);
23
+ });
26
24
 
27
- expect(response.status).toBe(201);
25
+ const response = await ctMock.app.inject({
26
+ method: "POST",
27
+ url: "/dummy/extensions",
28
+ payload: draft,
29
+ });
28
30
 
29
- expect(response.body).toEqual({
31
+ expect(response.statusCode).toBe(201);
32
+ expect(response.json()).toEqual({
30
33
  createdAt: expect.anything(),
34
+ createdBy: expect.anything(),
31
35
  destination: {
32
36
  type: "HTTP",
33
37
  url: "https://example.com/webhook",
@@ -35,6 +39,7 @@ describe("Extension", () => {
35
39
  id: expect.anything(),
36
40
  key: "order-validation",
37
41
  lastModifiedAt: expect.anything(),
42
+ lastModifiedBy: expect.anything(),
38
43
  triggers: [
39
44
  {
40
45
  actions: ["Create"],
@@ -46,7 +51,7 @@ describe("Extension", () => {
46
51
  });
47
52
 
48
53
  test("Get extension", async () => {
49
- const draft: ExtensionDraft = {
54
+ const extension = await extensionDraft.create({
50
55
  key: "test-extension",
51
56
  destination: {
52
57
  type: "HTTP",
@@ -58,23 +63,19 @@ describe("Extension", () => {
58
63
  actions: ["Update"],
59
64
  },
60
65
  ],
61
- };
62
- const createResponse = await supertest(ctMock.app)
63
- .post("/dummy/extensions")
64
- .send(draft);
65
-
66
- expect(createResponse.status).toBe(201);
66
+ });
67
67
 
68
- const response = await supertest(ctMock.app).get(
69
- `/dummy/extensions/${createResponse.body.id}`,
70
- );
68
+ const response = await ctMock.app.inject({
69
+ method: "GET",
70
+ url: `/dummy/extensions/${extension.id}`,
71
+ });
71
72
 
72
- expect(response.status).toBe(200);
73
- expect(response.body).toEqual(createResponse.body);
73
+ expect(response.statusCode).toBe(200);
74
+ expect(response.json()).toEqual(extension);
74
75
  });
75
76
 
76
77
  test("Get extension by key", async () => {
77
- const draft: ExtensionDraft = {
78
+ const extension = await extensionDraft.create({
78
79
  key: "key-extension",
79
80
  destination: {
80
81
  type: "HTTP",
@@ -86,23 +87,19 @@ describe("Extension", () => {
86
87
  actions: ["Create", "Update"],
87
88
  },
88
89
  ],
89
- };
90
- const createResponse = await supertest(ctMock.app)
91
- .post("/dummy/extensions")
92
- .send(draft);
93
-
94
- expect(createResponse.status).toBe(201);
90
+ });
95
91
 
96
- const response = await supertest(ctMock.app).get(
97
- "/dummy/extensions/key=key-extension",
98
- );
92
+ const response = await ctMock.app.inject({
93
+ method: "GET",
94
+ url: "/dummy/extensions/key=key-extension",
95
+ });
99
96
 
100
- expect(response.status).toBe(200);
101
- expect(response.body).toEqual(createResponse.body);
97
+ expect(response.statusCode).toBe(200);
98
+ expect(response.json()).toEqual(extension);
102
99
  });
103
100
 
104
101
  test("Query extensions", async () => {
105
- const draft: ExtensionDraft = {
102
+ const extension = await extensionDraft.create({
106
103
  key: "query-extension",
107
104
  destination: {
108
105
  type: "HTTP",
@@ -114,17 +111,15 @@ describe("Extension", () => {
114
111
  actions: ["Delete"],
115
112
  },
116
113
  ],
117
- };
118
- const createResponse = await supertest(ctMock.app)
119
- .post("/dummy/extensions")
120
- .send(draft);
121
-
122
- expect(createResponse.status).toBe(201);
114
+ });
123
115
 
124
- const response = await supertest(ctMock.app).get("/dummy/extensions");
116
+ const response = await ctMock.app.inject({
117
+ method: "GET",
118
+ url: "/dummy/extensions",
119
+ });
125
120
 
126
- expect(response.status).toBe(200);
127
- expect(response.body.count).toBeGreaterThan(0);
128
- expect(response.body.results).toContainEqual(createResponse.body);
121
+ expect(response.statusCode).toBe(200);
122
+ expect(response.json().count).toBeGreaterThan(0);
123
+ expect(response.json().results).toContainEqual(extension);
129
124
  });
130
125
  });
@@ -1,11 +1,11 @@
1
- import type { Router } from "express";
1
+ import type { FastifyInstance } from "fastify";
2
2
  import type { ExtensionRepository } from "../repositories/extension.ts";
3
3
  import AbstractService from "./abstract.ts";
4
4
 
5
5
  export class ExtensionServices extends AbstractService {
6
6
  public repository: ExtensionRepository;
7
7
 
8
- constructor(parent: Router, repository: ExtensionRepository) {
8
+ constructor(parent: FastifyInstance, repository: ExtensionRepository) {
9
9
  super(parent);
10
10
  this.repository = repository;
11
11
  }
@@ -1,120 +1,130 @@
1
1
  import assert from "node:assert";
2
2
  import type { InventoryEntry, Type } from "@commercetools/platform-sdk";
3
- import supertest from "supertest";
4
3
  import { afterEach, beforeEach, describe, expect, test } from "vitest";
4
+ import {
5
+ inventoryEntryDraftFactory,
6
+ typeDraftFactory,
7
+ } from "#src/testing/index.ts";
5
8
  import { CommercetoolsMock } from "../index.ts";
6
9
 
7
10
  describe("Inventory Entry Query", () => {
8
11
  const ctMock = new CommercetoolsMock();
12
+ const inventoryEntryDraft = inventoryEntryDraftFactory(ctMock);
9
13
  let inventoryEntry: InventoryEntry | undefined;
10
14
 
11
15
  beforeEach(async () => {
12
- const response = await supertest(ctMock.app).post("/dummy/inventory").send({
16
+ inventoryEntry = await inventoryEntryDraft.create({
13
17
  sku: "1337",
14
18
  quantityOnStock: 100,
15
19
  });
16
- expect(response.status).toBe(201);
17
- inventoryEntry = response.body;
18
20
  });
19
21
 
20
- afterEach(() => {
21
- ctMock.clear();
22
+ afterEach(async () => {
23
+ await ctMock.clear();
22
24
  });
23
25
 
24
26
  test("no filter", async () => {
25
27
  assert(inventoryEntry, "inventory entry not created");
26
28
 
27
- const response = await supertest(ctMock.app).get("/dummy/inventory");
28
- expect(response.status).toBe(200);
29
- expect(response.body.count).toBe(1);
30
- expect(response.body.total).toBe(1);
31
- expect(response.body.offset).toBe(0);
32
- expect(response.body.limit).toBe(20);
29
+ const response = await ctMock.app.inject({
30
+ method: "GET",
31
+ url: "/dummy/inventory",
32
+ });
33
+ expect(response.statusCode).toBe(200);
34
+ expect(response.json().count).toBe(1);
35
+ expect(response.json().total).toBe(1);
36
+ expect(response.json().offset).toBe(0);
37
+ expect(response.json().limit).toBe(20);
33
38
  });
34
39
 
35
40
  test("filter sku", async () => {
36
41
  assert(inventoryEntry, "inventory entry not created");
37
42
 
38
43
  {
39
- const response = await supertest(ctMock.app)
40
- .get("/dummy/inventory")
41
- .query({ where: 'sku="unknown"' });
42
- expect(response.status).toBe(200);
43
- expect(response.body.count).toBe(0);
44
+ const response = await ctMock.app.inject({
45
+ method: "GET",
46
+ url: "/dummy/inventory",
47
+ query: { where: 'sku="unknown"' },
48
+ });
49
+ expect(response.statusCode).toBe(200);
50
+ expect(response.json().count).toBe(0);
44
51
  }
45
52
  {
46
- const response = await supertest(ctMock.app)
47
- .get("/dummy/inventory")
48
- .query({ where: 'sku="1337"' });
49
- expect(response.status).toBe(200);
50
- expect(response.body.count).toBe(1);
53
+ const response = await ctMock.app.inject({
54
+ method: "GET",
55
+ url: "/dummy/inventory",
56
+ query: { where: 'sku="1337"' },
57
+ });
58
+ expect(response.statusCode).toBe(200);
59
+ expect(response.json().count).toBe(1);
51
60
  }
52
61
  });
53
62
  });
54
63
 
55
64
  describe("Inventory Entry Update Actions", () => {
56
65
  const ctMock = new CommercetoolsMock();
66
+ const inventoryEntryDraft = inventoryEntryDraftFactory(ctMock);
67
+ const typeDraft = typeDraftFactory(ctMock);
57
68
  let inventoryEntry: InventoryEntry | undefined;
58
69
  let customType: Type | undefined;
59
70
 
60
71
  beforeEach(async () => {
61
- let response = await supertest(ctMock.app).post("/dummy/inventory").send({
72
+ inventoryEntry = await inventoryEntryDraft.create({
62
73
  sku: "1337",
63
74
  quantityOnStock: 100,
64
75
  });
65
- expect(response.status).toBe(201);
66
- inventoryEntry = response.body;
67
-
68
- response = await supertest(ctMock.app)
69
- .post("/dummy/types")
70
- .send({
71
- key: "custom-inventory",
72
- name: {
73
- "nl-NL": "custom-inventory",
74
- },
75
- resourceTypeIds: ["inventory-entry"],
76
- });
77
- expect(response.status).toBe(201);
78
- customType = response.body;
76
+
77
+ customType = await typeDraft.create({
78
+ key: "custom-inventory",
79
+ name: {
80
+ "nl-NL": "custom-inventory",
81
+ },
82
+ resourceTypeIds: ["inventory-entry"],
83
+ });
79
84
  });
80
85
 
81
86
  test("changeQuantity", async () => {
82
87
  assert(inventoryEntry, "inventory entry not created");
83
88
 
84
- const response = await supertest(ctMock.app)
85
- .post(`/dummy/inventory/${inventoryEntry.id}`)
86
- .send({
89
+ const response = await ctMock.app.inject({
90
+ method: "POST",
91
+ url: `/dummy/inventory/${inventoryEntry.id}`,
92
+ payload: {
87
93
  version: 1,
88
94
  actions: [{ action: "changeQuantity", quantity: 300 }],
89
- });
90
- expect(response.status).toBe(200);
91
- expect(response.body.version).toBe(2);
92
- expect(response.body.availableQuantity).toBe(300);
93
- expect(response.body.quantityOnStock).toBe(300);
95
+ },
96
+ });
97
+ expect(response.statusCode).toBe(200);
98
+ expect(response.json().version).toBe(2);
99
+ expect(response.json().availableQuantity).toBe(300);
100
+ expect(response.json().quantityOnStock).toBe(300);
94
101
  });
95
102
 
96
103
  test("removeQuantity", async () => {
97
104
  assert(inventoryEntry, "inventory entry not created");
98
105
 
99
- const response = await supertest(ctMock.app)
100
- .post(`/dummy/inventory/${inventoryEntry.id}`)
101
- .send({
106
+ const response = await ctMock.app.inject({
107
+ method: "POST",
108
+ url: `/dummy/inventory/${inventoryEntry.id}`,
109
+ payload: {
102
110
  version: 1,
103
111
  actions: [{ action: "removeQuantity", quantity: 15 }],
104
- });
105
- expect(response.status).toBe(200);
106
- expect(response.body.version).toBe(2);
107
- expect(response.body.availableQuantity).toBe(85);
108
- expect(response.body.quantityOnStock).toBe(85);
112
+ },
113
+ });
114
+ expect(response.statusCode).toBe(200);
115
+ expect(response.json().version).toBe(2);
116
+ expect(response.json().availableQuantity).toBe(85);
117
+ expect(response.json().quantityOnStock).toBe(85);
109
118
  });
110
119
 
111
120
  test("set custom type", async () => {
112
121
  assert(inventoryEntry, "inventory entry not created");
113
122
  assert(customType, "custom type not created");
114
123
 
115
- const response = await supertest(ctMock.app)
116
- .post(`/dummy/inventory/${inventoryEntry.id}`)
117
- .send({
124
+ const response = await ctMock.app.inject({
125
+ method: "POST",
126
+ url: `/dummy/inventory/${inventoryEntry.id}`,
127
+ payload: {
118
128
  version: 1,
119
129
  actions: [
120
130
  {
@@ -122,33 +132,37 @@ describe("Inventory Entry Update Actions", () => {
122
132
  type: { typeId: "type", id: customType.id },
123
133
  },
124
134
  ],
125
- });
126
- expect(response.status).toBe(200);
127
- expect(response.body.version).toBe(2);
128
- expect(response.body.custom.type.id).toBe(customType.id);
135
+ },
136
+ });
137
+ expect(response.statusCode).toBe(200);
138
+ expect(response.json().version).toBe(2);
139
+ expect(response.json().custom.type.id).toBe(customType.id);
129
140
  });
130
141
 
131
142
  test("set expected delivery", async () => {
132
143
  assert(inventoryEntry, "inventory entry not created");
133
144
  const expectedDelivery = "2021-04-02T15:06:19.700Z";
134
- const response = await supertest(ctMock.app)
135
- .post(`/dummy/inventory/${inventoryEntry.id}`)
136
- .send({
145
+ const response = await ctMock.app.inject({
146
+ method: "POST",
147
+ url: `/dummy/inventory/${inventoryEntry.id}`,
148
+ payload: {
137
149
  version: 1,
138
150
  actions: [{ action: "setExpectedDelivery", expectedDelivery }],
139
- });
140
- expect(response.status).toBe(200);
141
- expect(response.body.version).toBe(2);
142
- expect(response.body.expectedDelivery).toBe(expectedDelivery);
151
+ },
152
+ });
153
+ expect(response.statusCode).toBe(200);
154
+ expect(response.json().version).toBe(2);
155
+ expect(response.json().expectedDelivery).toBe(expectedDelivery);
143
156
  });
144
157
 
145
158
  test("set custom field", async () => {
146
159
  assert(inventoryEntry, "inventory entry not created");
147
160
  assert(customType, "custom type not created");
148
161
 
149
- const setCustomTypeResponse = await supertest(ctMock.app)
150
- .post(`/dummy/inventory/${inventoryEntry.id}`)
151
- .send({
162
+ const setCustomTypeResponse = await ctMock.app.inject({
163
+ method: "POST",
164
+ url: `/dummy/inventory/${inventoryEntry.id}`,
165
+ payload: {
152
166
  version: 1,
153
167
  actions: [
154
168
  {
@@ -157,32 +171,37 @@ describe("Inventory Entry Update Actions", () => {
157
171
  fields: { lol: "bar" },
158
172
  },
159
173
  ],
160
- });
161
- expect(setCustomTypeResponse.status).toBe(200);
162
- expect(setCustomTypeResponse.body.custom.type.id).toBe(customType.id);
174
+ },
175
+ });
176
+ expect(setCustomTypeResponse.statusCode).toBe(200);
177
+ expect(setCustomTypeResponse.json().custom.type.id).toBe(customType.id);
163
178
 
164
- const response = await supertest(ctMock.app)
165
- .post(`/dummy/inventory/${inventoryEntry.id}`)
166
- .send({
179
+ const response = await ctMock.app.inject({
180
+ method: "POST",
181
+ url: `/dummy/inventory/${inventoryEntry.id}`,
182
+ payload: {
167
183
  version: 2,
168
184
  actions: [{ action: "setCustomField", name: "foo", value: "bar" }],
169
- });
185
+ },
186
+ });
170
187
 
171
- expect(response.status).toBe(200);
172
- expect(response.body.version).toBe(3);
173
- expect(response.body.custom.fields.foo).toBe("bar");
188
+ expect(response.statusCode).toBe(200);
189
+ expect(response.json().version).toBe(3);
190
+ expect(response.json().custom.fields.foo).toBe("bar");
174
191
  });
175
192
 
176
193
  test("set restockable in days", async () => {
177
194
  assert(inventoryEntry, "inventory entry not created");
178
- const response = await supertest(ctMock.app)
179
- .post(`/dummy/inventory/${inventoryEntry.id}`)
180
- .send({
195
+ const response = await ctMock.app.inject({
196
+ method: "POST",
197
+ url: `/dummy/inventory/${inventoryEntry.id}`,
198
+ payload: {
181
199
  version: 1,
182
200
  actions: [{ action: "setRestockableInDays", restockableInDays: 0 }],
183
- });
184
- expect(response.status).toEqual(200);
185
- expect(response.body.version).toEqual(2);
186
- expect(response.body.restockableInDays).toEqual(0);
201
+ },
202
+ });
203
+ expect(response.statusCode).toEqual(200);
204
+ expect(response.json().version).toEqual(2);
205
+ expect(response.json().restockableInDays).toEqual(0);
187
206
  });
188
207
  });
@@ -1,11 +1,11 @@
1
- import type { Router } from "express";
1
+ import type { FastifyInstance } from "fastify";
2
2
  import type { InventoryEntryRepository } from "../repositories/inventory-entry/index.ts";
3
3
  import AbstractService from "./abstract.ts";
4
4
 
5
5
  export class InventoryEntryService extends AbstractService {
6
6
  public repository: InventoryEntryRepository;
7
7
 
8
- constructor(parent: Router, repository: InventoryEntryRepository) {
8
+ constructor(parent: FastifyInstance, repository: InventoryEntryRepository) {
9
9
  super(parent);
10
10
  this.repository = repository;
11
11
  }