@labdigital/commercetools-mock 2.65.1 → 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 +3771 -2654
  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 +89 -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,4 +1,10 @@
1
- import type { Request, Response, Router } from "express";
1
+ import type {
2
+ OrderImportDraft,
3
+ OrderSearchRequest,
4
+ ResourceNotFoundError,
5
+ } from "@commercetools/platform-sdk";
6
+ import type { FastifyInstance, FastifyReply, FastifyRequest } from "fastify";
7
+ import { CommercetoolsError } from "#src/exceptions.ts";
2
8
  import { getRepositoryContext } from "../repositories/helpers.ts";
3
9
  import type { OrderRepository } from "../repositories/order/index.ts";
4
10
  import AbstractService from "./abstract.ts";
@@ -6,7 +12,7 @@ import AbstractService from "./abstract.ts";
6
12
  export class OrderService extends AbstractService {
7
13
  public repository: OrderRepository;
8
14
 
9
- constructor(parent: Router, repository: OrderRepository) {
15
+ constructor(parent: FastifyInstance, repository: OrderRepository) {
10
16
  super(parent);
11
17
  this.repository = repository;
12
18
  }
@@ -15,27 +21,37 @@ export class OrderService extends AbstractService {
15
21
  return "orders";
16
22
  }
17
23
 
18
- extraRoutes(router: Router) {
19
- router.post("/import", this.import.bind(this));
20
- router.post("/search", this.search.bind(this));
21
- router.get(
24
+ extraRoutes(instance: FastifyInstance) {
25
+ instance.post("/import", this.import.bind(this));
26
+ instance.post("/search", this.search.bind(this));
27
+ instance.get(
22
28
  "/order-number=:orderNumber",
23
29
  this.getWithOrderNumber.bind(this),
24
30
  );
25
31
  }
26
32
 
27
- import(request: Request, response: Response) {
33
+ async import(
34
+ request: FastifyRequest<{
35
+ Params: Record<string, string>;
36
+ Body: OrderImportDraft;
37
+ }>,
38
+ reply: FastifyReply,
39
+ ) {
28
40
  const importDraft = request.body;
29
- const resource = this.repository.import(
41
+ const resource = await this.repository.import(
30
42
  getRepositoryContext(request),
31
43
  importDraft,
32
44
  );
33
- response.status(200).send(resource);
45
+ return reply.status(200).send(resource);
34
46
  }
35
47
 
36
- getWithOrderNumber(request: Request, response: Response) {
37
- const orderNumber = request.params.orderNumber;
38
- const resource = this.repository.getWithOrderNumber(
48
+ async getWithOrderNumber(
49
+ request: FastifyRequest<{ Params: Record<string, string> }>,
50
+ reply: FastifyReply,
51
+ ) {
52
+ const params = request.params;
53
+ const orderNumber = params.orderNumber;
54
+ const resource = await this.repository.getWithOrderNumber(
39
55
  getRepositoryContext(request),
40
56
  orderNumber,
41
57
 
@@ -43,26 +59,28 @@ export class OrderService extends AbstractService {
43
59
  request.query,
44
60
  );
45
61
  if (resource) {
46
- response.status(200).send(resource);
47
- return;
62
+ return reply.status(200).send(resource);
48
63
  }
49
- response.status(404).send({
50
- statusCode: 404,
51
- message: `The Resource with key '${orderNumber}' was not found.`,
52
- errors: [
53
- {
54
- code: "ResourceNotFound",
55
- message: `The Resource with key '${orderNumber}' was not found.`,
56
- },
57
- ],
58
- });
64
+ throw new CommercetoolsError<ResourceNotFoundError>(
65
+ {
66
+ code: "ResourceNotFound",
67
+ message: `The Resource with key '${orderNumber}' was not found.`,
68
+ },
69
+ 404,
70
+ );
59
71
  }
60
72
 
61
- search(request: Request, response: Response) {
62
- const resource = this.repository.search(
73
+ async search(
74
+ request: FastifyRequest<{
75
+ Params: Record<string, string>;
76
+ Body: OrderSearchRequest;
77
+ }>,
78
+ reply: FastifyReply,
79
+ ) {
80
+ const resource = await this.repository.search(
63
81
  getRepositoryContext(request),
64
82
  request.body,
65
83
  );
66
- response.status(200).send(resource);
84
+ return reply.status(200).send(resource);
67
85
  }
68
86
  }
@@ -1,26 +1,25 @@
1
- import type { PaymentDraft } from "@commercetools/platform-sdk";
2
- import supertest from "supertest";
3
1
  import { beforeEach, describe, expect, test } from "vitest";
2
+ import { paymentDraftFactory, typeDraftFactory } 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("Payment", () => {
8
+ const paymentDraft = paymentDraftFactory(ctMock);
9
+ const typeDraft = typeDraftFactory(ctMock);
10
+
9
11
  beforeEach(async () => {
10
- const response = await supertest(ctMock.app)
11
- .post("/dummy/types")
12
- .send({
13
- key: "custom-payment",
14
- name: {
15
- "nl-NL": "custom-payment",
16
- },
17
- resourceTypeIds: ["payment"],
18
- });
19
- expect(response.status).toBe(201);
12
+ await typeDraft.create({
13
+ key: "custom-payment",
14
+ name: {
15
+ "nl-NL": "custom-payment",
16
+ },
17
+ resourceTypeIds: ["payment"],
18
+ });
20
19
  });
21
20
 
22
21
  test("Create payment", async () => {
23
- const draft: PaymentDraft = {
22
+ const draft = paymentDraft.build({
24
23
  amountPlanned: { currencyCode: "EUR", centAmount: 1337 },
25
24
  custom: {
26
25
  type: { typeId: "type", key: "custom-payment" },
@@ -28,16 +27,21 @@ describe("Payment", () => {
28
27
  foo: "bar",
29
28
  },
30
29
  },
31
- };
32
- const response = await supertest(ctMock.app)
33
- .post("/dummy/payments")
34
- .send(draft);
30
+ });
35
31
 
36
- expect(response.status).toBe(201);
37
- expect(response.body).toEqual({
32
+ const response = await ctMock.app.inject({
33
+ method: "POST",
34
+ url: "/dummy/payments",
35
+ payload: draft,
36
+ });
37
+
38
+ expect(response.statusCode).toBe(201);
39
+ expect(response.json()).toEqual({
38
40
  id: expect.anything(),
39
41
  createdAt: expect.anything(),
42
+ createdBy: expect.anything(),
40
43
  lastModifiedAt: expect.anything(),
44
+ lastModifiedBy: expect.anything(),
41
45
  version: 1,
42
46
  amountPlanned: {
43
47
  type: "centPrecision",
@@ -56,7 +60,7 @@ describe("Payment", () => {
56
60
  });
57
61
  });
58
62
  test("Get payment", async () => {
59
- const draft: PaymentDraft = {
63
+ const payment = await paymentDraft.create({
60
64
  amountPlanned: { currencyCode: "EUR", centAmount: 1337 },
61
65
  custom: {
62
66
  type: { typeId: "type", key: "custom-payment" },
@@ -64,16 +68,14 @@ describe("Payment", () => {
64
68
  foo: "bar",
65
69
  },
66
70
  },
67
- };
68
- const createResponse = await supertest(ctMock.app)
69
- .post("/dummy/payments")
70
- .send(draft);
71
+ });
71
72
 
72
- const response = await supertest(ctMock.app).get(
73
- `/dummy/payments/${createResponse.body.id}`,
74
- );
73
+ const response = await ctMock.app.inject({
74
+ method: "GET",
75
+ url: `/dummy/payments/${payment.id}`,
76
+ });
75
77
 
76
- expect(response.status).toBe(200);
77
- expect(response.body).toEqual(createResponse.body);
78
+ expect(response.statusCode).toBe(200);
79
+ expect(response.json()).toEqual(payment);
78
80
  });
79
81
  });
@@ -1,11 +1,11 @@
1
- import type { Router } from "express";
1
+ import type { FastifyInstance } from "fastify";
2
2
  import type { PaymentRepository } from "../repositories/payment/index.ts";
3
3
  import AbstractService from "./abstract.ts";
4
4
 
5
5
  export class PaymentService extends AbstractService {
6
6
  public repository: PaymentRepository;
7
7
 
8
- constructor(parent: Router, repository: PaymentRepository) {
8
+ constructor(parent: FastifyInstance, repository: PaymentRepository) {
9
9
  super(parent);
10
10
  this.repository = repository;
11
11
  }
@@ -1,13 +1,14 @@
1
- import type { ProductDiscountDraft } from "@commercetools/platform-sdk";
2
- import supertest from "supertest";
3
1
  import { describe, expect, test } from "vitest";
2
+ import { productDiscountDraftFactory } 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("ProductDiscount", () => {
8
+ const productDiscountDraft = productDiscountDraftFactory(ctMock);
9
+
9
10
  test("Create product discount", async () => {
10
- const draft: ProductDiscountDraft = {
11
+ const draft = productDiscountDraft.build({
11
12
  key: "summer-sale",
12
13
  name: {
13
14
  en: "Summer Sale",
@@ -22,15 +23,18 @@ describe("ProductDiscount", () => {
22
23
  predicate: "1=1",
23
24
  sortOrder: "0.1",
24
25
  isActive: true,
25
- };
26
- const response = await supertest(ctMock.app)
27
- .post("/dummy/product-discounts")
28
- .send(draft);
26
+ });
29
27
 
30
- expect(response.status).toBe(201);
28
+ const response = await ctMock.app.inject({
29
+ method: "POST",
30
+ url: "/dummy/product-discounts",
31
+ payload: draft,
32
+ });
31
33
 
32
- expect(response.body).toEqual({
34
+ expect(response.statusCode).toBe(201);
35
+ expect(response.json()).toEqual({
33
36
  createdAt: expect.anything(),
37
+ createdBy: expect.anything(),
34
38
  description: {
35
39
  en: "20% off all products",
36
40
  },
@@ -38,6 +42,7 @@ describe("ProductDiscount", () => {
38
42
  isActive: true,
39
43
  key: "summer-sale",
40
44
  lastModifiedAt: expect.anything(),
45
+ lastModifiedBy: expect.anything(),
41
46
  name: {
42
47
  en: "Summer Sale",
43
48
  },
@@ -55,7 +60,7 @@ describe("ProductDiscount", () => {
55
60
  });
56
61
 
57
62
  test("Get product discount", async () => {
58
- const draft: ProductDiscountDraft = {
63
+ const productDiscount = await productDiscountDraft.create({
59
64
  key: "test-discount",
60
65
  name: {
61
66
  en: "Test Discount",
@@ -72,23 +77,19 @@ describe("ProductDiscount", () => {
72
77
  predicate: "1=1",
73
78
  sortOrder: "0.2",
74
79
  isActive: true,
75
- };
76
- const createResponse = await supertest(ctMock.app)
77
- .post("/dummy/product-discounts")
78
- .send(draft);
79
-
80
- expect(createResponse.status).toBe(201);
80
+ });
81
81
 
82
- const response = await supertest(ctMock.app).get(
83
- `/dummy/product-discounts/${createResponse.body.id}`,
84
- );
82
+ const response = await ctMock.app.inject({
83
+ method: "GET",
84
+ url: `/dummy/product-discounts/${productDiscount.id}`,
85
+ });
85
86
 
86
- expect(response.status).toBe(200);
87
- expect(response.body).toEqual(createResponse.body);
87
+ expect(response.statusCode).toBe(200);
88
+ expect(response.json()).toEqual(productDiscount);
88
89
  });
89
90
 
90
91
  test("Get product discount by key", async () => {
91
- const draft: ProductDiscountDraft = {
92
+ const productDiscount = await productDiscountDraft.create({
92
93
  key: "key-discount",
93
94
  name: {
94
95
  en: "Key Discount",
@@ -100,23 +101,19 @@ describe("ProductDiscount", () => {
100
101
  predicate: "1=1",
101
102
  sortOrder: "0.3",
102
103
  isActive: false,
103
- };
104
- const createResponse = await supertest(ctMock.app)
105
- .post("/dummy/product-discounts")
106
- .send(draft);
107
-
108
- expect(createResponse.status).toBe(201);
104
+ });
109
105
 
110
- const response = await supertest(ctMock.app).get(
111
- "/dummy/product-discounts/key=key-discount",
112
- );
106
+ const response = await ctMock.app.inject({
107
+ method: "GET",
108
+ url: "/dummy/product-discounts/key=key-discount",
109
+ });
113
110
 
114
- expect(response.status).toBe(200);
115
- expect(response.body).toEqual(createResponse.body);
111
+ expect(response.statusCode).toBe(200);
112
+ expect(response.json()).toEqual(productDiscount);
116
113
  });
117
114
 
118
115
  test("Query product discounts", async () => {
119
- const draft: ProductDiscountDraft = {
116
+ const productDiscount = await productDiscountDraft.create({
120
117
  key: "query-discount",
121
118
  name: {
122
119
  en: "Query Discount",
@@ -128,19 +125,15 @@ describe("ProductDiscount", () => {
128
125
  predicate: "1=1",
129
126
  sortOrder: "0.4",
130
127
  isActive: true,
131
- };
132
- const createResponse = await supertest(ctMock.app)
133
- .post("/dummy/product-discounts")
134
- .send(draft);
135
-
136
- expect(createResponse.status).toBe(201);
128
+ });
137
129
 
138
- const response = await supertest(ctMock.app).get(
139
- "/dummy/product-discounts",
140
- );
130
+ const response = await ctMock.app.inject({
131
+ method: "GET",
132
+ url: "/dummy/product-discounts",
133
+ });
141
134
 
142
- expect(response.status).toBe(200);
143
- expect(response.body.count).toBeGreaterThan(0);
144
- expect(response.body.results).toContainEqual(createResponse.body);
135
+ expect(response.statusCode).toBe(200);
136
+ expect(response.json().count).toBeGreaterThan(0);
137
+ expect(response.json().results).toContainEqual(productDiscount);
145
138
  });
146
139
  });
@@ -1,11 +1,11 @@
1
- import type { Router } from "express";
1
+ import type { FastifyInstance } from "fastify";
2
2
  import type { ProductDiscountRepository } from "../repositories/product-discount.ts";
3
3
  import AbstractService from "./abstract.ts";
4
4
 
5
5
  export class ProductDiscountService extends AbstractService {
6
6
  public repository: ProductDiscountRepository;
7
7
 
8
- constructor(parent: Router, repository: ProductDiscountRepository) {
8
+ constructor(parent: FastifyInstance, repository: ProductDiscountRepository) {
9
9
  super(parent);
10
10
  this.repository = repository;
11
11
  }