@labdigital/commercetools-mock 2.59.1 → 2.61.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 (222) hide show
  1. package/dist/{index.d.ts → index.d.mts} +154 -275
  2. package/dist/{index.js → index.mjs} +413 -401
  3. package/dist/index.mjs.map +1 -0
  4. package/package.json +30 -18
  5. package/src/config.ts +1 -1
  6. package/src/ctMock.test.ts +1 -1
  7. package/src/ctMock.ts +22 -21
  8. package/src/index.test.ts +1 -1
  9. package/src/index.ts +3 -3
  10. package/src/lib/haversine.test.ts +2 -2
  11. package/src/lib/masking.ts +1 -1
  12. package/src/lib/parser.ts +2 -2
  13. package/src/lib/password.ts +1 -1
  14. package/src/lib/predicateParser.test.ts +1 -1
  15. package/src/lib/predicateParser.ts +4 -4
  16. package/src/lib/product-review-statistics.test.ts +4 -8
  17. package/src/lib/productSearchFilter.test.ts +3 -3
  18. package/src/lib/productSearchFilter.ts +6 -6
  19. package/src/lib/projectionSearchFilter.test.ts +3 -3
  20. package/src/lib/projectionSearchFilter.ts +4 -4
  21. package/src/lib/review-statistics.ts +1 -1
  22. package/src/lib/searchQueryTypeChecker.test.ts +3 -3
  23. package/src/lib/searchQueryTypeChecker.ts +8 -4
  24. package/src/lib/tax.test.ts +119 -0
  25. package/src/lib/tax.ts +186 -0
  26. package/src/oauth/server.test.ts +7 -7
  27. package/src/oauth/server.ts +7 -7
  28. package/src/priceSelector.test.ts +1 -1
  29. package/src/priceSelector.ts +2 -2
  30. package/src/product-projection-search.ts +10 -12
  31. package/src/product-search-availability.test.ts +1 -1
  32. package/src/product-search.ts +6 -7
  33. package/src/projectAPI.test.ts +1 -1
  34. package/src/projectAPI.ts +7 -7
  35. package/src/repositories/abstract.ts +8 -10
  36. package/src/repositories/as-associate.test.ts +4 -4
  37. package/src/repositories/as-associate.ts +3 -3
  38. package/src/repositories/associate-role.ts +7 -9
  39. package/src/repositories/attribute-group.test.ts +3 -3
  40. package/src/repositories/attribute-group.ts +5 -5
  41. package/src/repositories/business-unit.test.ts +6 -6
  42. package/src/repositories/business-unit.ts +21 -23
  43. package/src/repositories/cart/actions.ts +79 -15
  44. package/src/repositories/cart/helpers.ts +5 -84
  45. package/src/repositories/cart/index.test.ts +53 -10
  46. package/src/repositories/cart/index.ts +17 -21
  47. package/src/repositories/cart-discount/actions.ts +5 -6
  48. package/src/repositories/cart-discount/index.ts +5 -5
  49. package/src/repositories/category/actions.ts +4 -4
  50. package/src/repositories/category/index.test.ts +3 -3
  51. package/src/repositories/category/index.ts +8 -8
  52. package/src/repositories/channel.test.ts +4 -4
  53. package/src/repositories/channel.ts +6 -6
  54. package/src/repositories/custom-object.ts +11 -8
  55. package/src/repositories/customer/actions.ts +9 -9
  56. package/src/repositories/customer/index.test.ts +3 -3
  57. package/src/repositories/customer/index.ts +12 -9
  58. package/src/repositories/customer-group.test.ts +4 -4
  59. package/src/repositories/customer-group.ts +6 -6
  60. package/src/repositories/discount-code/actions.ts +4 -4
  61. package/src/repositories/discount-code/index.ts +5 -5
  62. package/src/repositories/discount-group/actions.ts +3 -4
  63. package/src/repositories/discount-group/index.ts +4 -4
  64. package/src/repositories/errors.ts +1 -1
  65. package/src/repositories/extension.test.ts +3 -3
  66. package/src/repositories/extension.ts +6 -6
  67. package/src/repositories/helpers.ts +9 -12
  68. package/src/repositories/index.test.ts +3 -3
  69. package/src/repositories/index.ts +43 -43
  70. package/src/repositories/inventory-entry/actions.ts +15 -3
  71. package/src/repositories/inventory-entry/index.ts +5 -5
  72. package/src/repositories/my-customer.ts +5 -5
  73. package/src/repositories/my-order.ts +2 -2
  74. package/src/repositories/my-quote-request.ts +1 -1
  75. package/src/repositories/order/actions.ts +8 -9
  76. package/src/repositories/order/index.test.ts +191 -9
  77. package/src/repositories/order/index.ts +63 -21
  78. package/src/repositories/order-edit.ts +4 -4
  79. package/src/repositories/payment/actions.ts +6 -6
  80. package/src/repositories/payment/helpers.ts +3 -3
  81. package/src/repositories/payment/index.ts +7 -7
  82. package/src/repositories/product/actions.ts +7 -7
  83. package/src/repositories/product/helpers.ts +4 -4
  84. package/src/repositories/product/index.ts +13 -13
  85. package/src/repositories/product-discount.ts +9 -6
  86. package/src/repositories/product-projection.ts +7 -7
  87. package/src/repositories/product-selection.ts +9 -6
  88. package/src/repositories/product-tailoring.ts +6 -3
  89. package/src/repositories/product-type.ts +8 -5
  90. package/src/repositories/project.ts +5 -5
  91. package/src/repositories/quote/actions.ts +6 -6
  92. package/src/repositories/quote/index.ts +5 -5
  93. package/src/repositories/quote-request/actions.ts +6 -6
  94. package/src/repositories/quote-request/index.test.ts +3 -3
  95. package/src/repositories/quote-request/index.ts +5 -5
  96. package/src/repositories/quote-staged/actions.ts +6 -6
  97. package/src/repositories/quote-staged/index.ts +5 -5
  98. package/src/repositories/recurrence-policy/actions.ts +3 -3
  99. package/src/repositories/recurrence-policy/index.ts +4 -8
  100. package/src/repositories/recurring-order/actions.ts +3 -3
  101. package/src/repositories/recurring-order/index.ts +5 -5
  102. package/src/repositories/review.test.ts +5 -5
  103. package/src/repositories/review.ts +10 -9
  104. package/src/repositories/shipping-method/actions.ts +7 -9
  105. package/src/repositories/shipping-method/helpers.ts +1 -1
  106. package/src/repositories/shipping-method/index.ts +8 -8
  107. package/src/repositories/shopping-list/actions.ts +5 -5
  108. package/src/repositories/shopping-list/index.ts +7 -7
  109. package/src/repositories/standalone-price.ts +9 -6
  110. package/src/repositories/state.ts +9 -6
  111. package/src/repositories/store.ts +10 -7
  112. package/src/repositories/subscription.test.ts +3 -3
  113. package/src/repositories/subscription.ts +9 -6
  114. package/src/repositories/tax-category/actions.ts +4 -4
  115. package/src/repositories/tax-category/index.ts +6 -6
  116. package/src/repositories/type/actions.ts +4 -4
  117. package/src/repositories/type/index.ts +5 -5
  118. package/src/repositories/zone.test.ts +3 -3
  119. package/src/repositories/zone.ts +8 -5
  120. package/src/server.ts +4 -3
  121. package/src/services/abstract.ts +5 -5
  122. package/src/services/as-associate-cart.test.ts +1 -1
  123. package/src/services/as-associate-cart.ts +2 -2
  124. package/src/services/as-associate-order.test.ts +1 -1
  125. package/src/services/as-associate-order.ts +2 -2
  126. package/src/services/as-associate-quote-request.ts +2 -3
  127. package/src/services/as-associate.test.ts +1 -1
  128. package/src/services/as-associate.ts +4 -4
  129. package/src/services/associate-roles.test.ts +1 -1
  130. package/src/services/associate-roles.ts +2 -2
  131. package/src/services/attribute-group.test.ts +1 -1
  132. package/src/services/attribute-group.ts +2 -2
  133. package/src/services/business-units.test.ts +5 -5
  134. package/src/services/business-units.ts +2 -2
  135. package/src/services/cart-discount.ts +2 -2
  136. package/src/services/cart.test.ts +213 -2
  137. package/src/services/cart.ts +4 -5
  138. package/src/services/category.test.ts +1 -1
  139. package/src/services/category.ts +2 -2
  140. package/src/services/channel.test.ts +1 -1
  141. package/src/services/channel.ts +2 -2
  142. package/src/services/custom-object.test.ts +2 -2
  143. package/src/services/custom-object.ts +3 -3
  144. package/src/services/customer-group.test.ts +1 -1
  145. package/src/services/customer-group.ts +2 -2
  146. package/src/services/customer.test.ts +3 -3
  147. package/src/services/customer.ts +4 -5
  148. package/src/services/discount-code.test.ts +1 -1
  149. package/src/services/discount-code.ts +2 -2
  150. package/src/services/discount-group.test.ts +1 -1
  151. package/src/services/discount-group.ts +2 -2
  152. package/src/services/extension.test.ts +1 -1
  153. package/src/services/extension.ts +2 -2
  154. package/src/services/index.ts +44 -44
  155. package/src/services/inventory-entry.test.ts +16 -1
  156. package/src/services/inventory-entry.ts +2 -2
  157. package/src/services/my-business-unit.test.ts +1 -1
  158. package/src/services/my-business-unit.ts +2 -2
  159. package/src/services/my-cart.test.ts +1 -1
  160. package/src/services/my-cart.ts +2 -2
  161. package/src/services/my-customer.test.ts +2 -2
  162. package/src/services/my-customer.ts +6 -6
  163. package/src/services/my-order.ts +2 -2
  164. package/src/services/my-payment.test.ts +1 -1
  165. package/src/services/my-payment.ts +2 -2
  166. package/src/services/my-shopping-list.ts +2 -2
  167. package/src/services/order.test.ts +4 -11
  168. package/src/services/order.ts +4 -4
  169. package/src/services/payment.test.ts +1 -1
  170. package/src/services/payment.ts +2 -2
  171. package/src/services/product-discount.test.ts +1 -1
  172. package/src/services/product-discount.ts +2 -2
  173. package/src/services/product-projection.test.ts +2 -2
  174. package/src/services/product-projection.ts +4 -4
  175. package/src/services/product-selection.test.ts +1 -1
  176. package/src/services/product-selection.ts +2 -2
  177. package/src/services/product-type.test.ts +1 -1
  178. package/src/services/product-type.ts +2 -2
  179. package/src/services/product.test.ts +1 -1
  180. package/src/services/product.ts +3 -3
  181. package/src/services/project.test.ts +1 -1
  182. package/src/services/project.ts +4 -4
  183. package/src/services/quote-request.test.ts +2 -2
  184. package/src/services/quote-request.ts +2 -2
  185. package/src/services/quote-staged.ts +2 -2
  186. package/src/services/quote.ts +2 -2
  187. package/src/services/recurrence-policy.test.ts +1 -1
  188. package/src/services/recurrence-policy.ts +2 -2
  189. package/src/services/recurring-order.test.ts +1 -1
  190. package/src/services/recurring-order.ts +2 -2
  191. package/src/services/reviews.test.ts +1 -1
  192. package/src/services/reviews.ts +2 -2
  193. package/src/services/shipping-method.test.ts +2 -2
  194. package/src/services/shipping-method.ts +4 -4
  195. package/src/services/shopping-list.test.ts +1 -1
  196. package/src/services/shopping-list.ts +2 -2
  197. package/src/services/standalone-price.test.ts +1 -1
  198. package/src/services/standalone-price.ts +2 -2
  199. package/src/services/state.test.ts +1 -1
  200. package/src/services/state.ts +2 -2
  201. package/src/services/store.test.ts +1 -1
  202. package/src/services/store.ts +2 -2
  203. package/src/services/subscription.test.ts +1 -1
  204. package/src/services/subscription.ts +2 -2
  205. package/src/services/tax-category.test.ts +1 -1
  206. package/src/services/tax-category.ts +2 -2
  207. package/src/services/type.test.ts +1 -1
  208. package/src/services/type.ts +2 -2
  209. package/src/services/zone.test.ts +1 -1
  210. package/src/services/zone.ts +2 -2
  211. package/src/shipping.test.ts +1 -1
  212. package/src/shipping.ts +8 -8
  213. package/src/storage/abstract.ts +1 -1
  214. package/src/storage/in-memory.ts +15 -17
  215. package/src/storage/index.ts +2 -2
  216. package/src/testing/business-unit.ts +1 -2
  217. package/src/testing/customer.ts +1 -1
  218. package/src/testing/type.ts +1 -1
  219. package/src/types.ts +1 -1
  220. package/src/validate.ts +1 -1
  221. package/dist/index.d.ts.map +0 -1
  222. package/dist/index.js.map +0 -1
@@ -2,12 +2,12 @@ import type {
2
2
  TaxCategory,
3
3
  TaxCategoryDraft,
4
4
  } from "@commercetools/platform-sdk";
5
- import type { Config } from "~src/config";
6
- import { getBaseResourceProperties } from "~src/helpers";
7
- import type { RepositoryContext } from "../abstract";
8
- import { AbstractResourceRepository } from "../abstract";
9
- import { TaxCategoryUpdateHandler } from "./actions";
10
- import { taxRateFromTaxRateDraft } from "./helpers";
5
+ import type { Config } from "#src/config.ts";
6
+ import { getBaseResourceProperties } from "#src/helpers.ts";
7
+ import type { RepositoryContext } from "../abstract.ts";
8
+ import { AbstractResourceRepository } from "../abstract.ts";
9
+ import { TaxCategoryUpdateHandler } from "./actions.ts";
10
+ import { taxRateFromTaxRateDraft } from "./helpers.ts";
11
11
 
12
12
  export class TaxCategoryRepository extends AbstractResourceRepository<"tax-category"> {
13
13
  constructor(config: Config) {
@@ -12,10 +12,10 @@ import type {
12
12
  TypeSetDescriptionAction,
13
13
  TypeUpdateAction,
14
14
  } from "@commercetools/platform-sdk";
15
- import { CommercetoolsError } from "~src/exceptions";
16
- import type { Writable } from "~src/types";
17
- import type { RepositoryContext } from "../abstract";
18
- import { AbstractUpdateHandler } from "../abstract";
15
+ import { CommercetoolsError } from "#src/exceptions.ts";
16
+ import type { Writable } from "#src/types.ts";
17
+ import type { RepositoryContext } from "../abstract.ts";
18
+ import { AbstractUpdateHandler } from "../abstract.ts";
19
19
 
20
20
  type TypeUpdateHandlerMethod<T> = (
21
21
  context: RepositoryContext,
@@ -1,9 +1,9 @@
1
1
  import type { Type, TypeDraft } from "@commercetools/platform-sdk";
2
- import type { Config } from "~src/config";
3
- import { getBaseResourceProperties } from "~src/helpers";
4
- import type { RepositoryContext } from "../abstract";
5
- import { AbstractResourceRepository } from "../abstract";
6
- import { TypeUpdateHandler } from "./actions";
2
+ import type { Config } from "#src/config.ts";
3
+ import { getBaseResourceProperties } from "#src/helpers.ts";
4
+ import type { RepositoryContext } from "../abstract.ts";
5
+ import { AbstractResourceRepository } from "../abstract.ts";
6
+ import { TypeUpdateHandler } from "./actions.ts";
7
7
 
8
8
  export class TypeRepository extends AbstractResourceRepository<"type"> {
9
9
  constructor(config: Config) {
@@ -7,9 +7,9 @@ import type {
7
7
  ZoneSetKeyAction,
8
8
  } from "@commercetools/platform-sdk";
9
9
  import { describe, expect, test } from "vitest";
10
- import type { Config } from "~src/config";
11
- import { InMemoryStorage } from "~src/storage";
12
- import { ZoneRepository } from "./zone";
10
+ import type { Config } from "#src/config.ts";
11
+ import { InMemoryStorage } from "#src/storage/index.ts";
12
+ import { ZoneRepository } from "./zone.ts";
13
13
 
14
14
  describe("Zone Repository", () => {
15
15
  const storage = new InMemoryStorage();
@@ -8,11 +8,14 @@ import type {
8
8
  ZoneSetKeyAction,
9
9
  ZoneUpdateAction,
10
10
  } from "@commercetools/platform-sdk";
11
- import type { Config } from "~src/config";
12
- import { getBaseResourceProperties } from "../helpers";
13
- import type { Writable } from "../types";
14
- import type { RepositoryContext, UpdateHandlerInterface } from "./abstract";
15
- import { AbstractResourceRepository, AbstractUpdateHandler } from "./abstract";
11
+ import type { Config } from "#src/config.ts";
12
+ import { getBaseResourceProperties } from "../helpers.ts";
13
+ import type { Writable } from "../types.ts";
14
+ import type { RepositoryContext, UpdateHandlerInterface } from "./abstract.ts";
15
+ import {
16
+ AbstractResourceRepository,
17
+ AbstractUpdateHandler,
18
+ } from "./abstract.ts";
16
19
 
17
20
  export class ZoneRepository extends AbstractResourceRepository<"zone"> {
18
21
  constructor(config: Config) {
package/src/server.ts CHANGED
@@ -1,7 +1,6 @@
1
- import { CommercetoolsMock } from "./index";
1
+ import { CommercetoolsMock } from "./index.ts";
2
2
 
3
3
  process.on("SIGINT", () => {
4
- console.info("Stopping server...");
5
4
  process.exit();
6
5
  });
7
6
 
@@ -10,6 +9,8 @@ const instance = new CommercetoolsMock();
10
9
  let port = 3000;
11
10
 
12
11
  if (process.env.HTTP_SERVER_PORT)
13
- port = Number.parseInt(process.env.HTTP_SERVER_PORT);
12
+ port = Number.parseInt(process.env.HTTP_SERVER_PORT, 10);
14
13
 
14
+ // biome-ignore lint: lint/correctness/noConsoleLog
15
+ console.info("Starting commercetools-mock on http://localhost:" + port);
15
16
  instance.runServer(port);
@@ -1,14 +1,14 @@
1
1
  import type { Update } from "@commercetools/platform-sdk";
2
2
  import { type Request, type Response, Router } from "express";
3
3
  import type { ParsedQs } from "qs";
4
- import { updateRequestSchema } from "~src/schemas/update-request";
5
- import { validateData } from "~src/validate";
6
- import { queryParamsArray } from "../helpers";
4
+ import { updateRequestSchema } from "#src/schemas/update-request.ts";
5
+ import { validateData } from "#src/validate.ts";
6
+ import { queryParamsArray } from "../helpers.ts";
7
7
  import type {
8
8
  AbstractResourceRepository,
9
9
  QueryParams,
10
- } from "../repositories/abstract";
11
- import { getRepositoryContext } from "../repositories/helpers";
10
+ } from "../repositories/abstract.ts";
11
+ import { getRepositoryContext } from "../repositories/helpers.ts";
12
12
 
13
13
  export default abstract class AbstractService {
14
14
  public abstract repository: AbstractResourceRepository<any>;
@@ -1,6 +1,6 @@
1
1
  import supertest from "supertest";
2
2
  import { describe, expect, test } from "vitest";
3
- import { CommercetoolsMock } from "../index";
3
+ import { CommercetoolsMock } from "../index.ts";
4
4
 
5
5
  const ctMock = new CommercetoolsMock();
6
6
  const projectKey = "dummy";
@@ -1,6 +1,6 @@
1
1
  import { Router } from "express";
2
- import type { CartRepository } from "../repositories/cart";
3
- import AbstractService from "./abstract";
2
+ import type { CartRepository } from "../repositories/cart/index.ts";
3
+ import AbstractService from "./abstract.ts";
4
4
 
5
5
  export class AsAssociateCartService extends AbstractService {
6
6
  public repository: CartRepository;
@@ -2,7 +2,7 @@ import assert from "node:assert";
2
2
  import type { Order } from "@commercetools/platform-sdk";
3
3
  import supertest from "supertest";
4
4
  import { afterEach, beforeEach, describe, expect, test } from "vitest";
5
- import { CommercetoolsMock } from "../index";
5
+ import { CommercetoolsMock } from "../index.ts";
6
6
 
7
7
  describe("Order Query", () => {
8
8
  const ctMock = new CommercetoolsMock();
@@ -1,6 +1,6 @@
1
1
  import { Router } from "express";
2
- import type { MyOrderRepository } from "../repositories/my-order";
3
- import AbstractService from "./abstract";
2
+ import type { MyOrderRepository } from "../repositories/my-order.ts";
3
+ import AbstractService from "./abstract.ts";
4
4
 
5
5
  export class AsAssociateOrderService extends AbstractService {
6
6
  public repository: MyOrderRepository;
@@ -1,7 +1,6 @@
1
1
  import { Router } from "express";
2
- import type { MyQuoteRequestRepository } from "~src/repositories/my-quote-request";
3
- import type { MyOrderRepository } from "../repositories/my-order";
4
- import AbstractService from "./abstract";
2
+ import type { MyQuoteRequestRepository } from "#src/repositories/my-quote-request.ts";
3
+ import AbstractService from "./abstract.ts";
5
4
 
6
5
  export class AsAssociateQuoteRequestService extends AbstractService {
7
6
  public repository: MyQuoteRequestRepository;
@@ -1,6 +1,6 @@
1
1
  import supertest from "supertest";
2
2
  import { describe, expect, test } from "vitest";
3
- import { CommercetoolsMock } from "../index";
3
+ import { CommercetoolsMock } from "../index.ts";
4
4
 
5
5
  const ctMock = new CommercetoolsMock();
6
6
  const projectKey = "dummy";
@@ -3,10 +3,10 @@ import type {
3
3
  AsAssociateCartRepository,
4
4
  AsAssociateOrderRepository,
5
5
  AsAssociateQuoteRequestRepository,
6
- } from "~src/repositories/as-associate";
7
- import { AsAssociateCartService } from "./as-associate-cart";
8
- import { AsAssociateOrderService } from "./as-associate-order";
9
- import { AsAssociateQuoteRequestService } from "./as-associate-quote-request";
6
+ } from "#src/repositories/as-associate.ts";
7
+ import { AsAssociateCartService } from "./as-associate-cart.ts";
8
+ import { AsAssociateOrderService } from "./as-associate-order.ts";
9
+ import { AsAssociateQuoteRequestService } from "./as-associate-quote-request.ts";
10
10
 
11
11
  type Repositories = {
12
12
  cart: AsAssociateCartRepository;
@@ -1,7 +1,7 @@
1
1
  import type { AssociateRole } from "@commercetools/platform-sdk";
2
2
  import supertest from "supertest";
3
3
  import { afterEach, beforeEach, describe, expect, test } from "vitest";
4
- import { CommercetoolsMock } from "../ctMock";
4
+ import { CommercetoolsMock } from "../ctMock.ts";
5
5
 
6
6
  describe("Associate roles query", () => {
7
7
  const ctMock = new CommercetoolsMock();
@@ -1,6 +1,6 @@
1
1
  import type { Router } from "express";
2
- import type { AssociateRoleRepository } from "../repositories/associate-role";
3
- import AbstractService from "./abstract";
2
+ import type { AssociateRoleRepository } from "../repositories/associate-role.ts";
3
+ import AbstractService from "./abstract.ts";
4
4
 
5
5
  export class AssociateRoleServices extends AbstractService {
6
6
  public repository: AssociateRoleRepository;
@@ -1,7 +1,7 @@
1
1
  import type { AttributeGroupDraft } from "@commercetools/platform-sdk";
2
2
  import supertest from "supertest";
3
3
  import { describe, expect, test } from "vitest";
4
- import { CommercetoolsMock } from "../index";
4
+ import { CommercetoolsMock } from "../index.ts";
5
5
 
6
6
  const ctMock = new CommercetoolsMock();
7
7
 
@@ -1,6 +1,6 @@
1
1
  import type { Router } from "express";
2
- import type { AttributeGroupRepository } from "../repositories/attribute-group";
3
- import AbstractService from "./abstract";
2
+ import type { AttributeGroupRepository } from "../repositories/attribute-group.ts";
3
+ import AbstractService from "./abstract.ts";
4
4
 
5
5
  export class AttributeGroupService extends AbstractService {
6
6
  public repository: AttributeGroupRepository;
@@ -1,10 +1,10 @@
1
- import type { BusinessUnit, CompanyDraft } from "@commercetools/platform-sdk";
1
+ import type { BusinessUnit } from "@commercetools/platform-sdk";
2
2
  import supertest from "supertest";
3
3
  import { afterEach, beforeEach, describe, expect, test } from "vitest";
4
- import { businessUnitDraftFactory } from "~src/testing/business-unit";
5
- import { customerDraftFactory } from "~src/testing/customer";
6
- import { typeDraftFactory } from "~src/testing/type";
7
- import { CommercetoolsMock } from "../ctMock";
4
+ import { businessUnitDraftFactory } from "#src/testing/business-unit.ts";
5
+ import { customerDraftFactory } from "#src/testing/customer.ts";
6
+ import { typeDraftFactory } from "#src/testing/type.ts";
7
+ import { CommercetoolsMock } from "../ctMock.ts";
8
8
 
9
9
  describe("Business units query", () => {
10
10
  const ctMock = new CommercetoolsMock();
@@ -1,6 +1,6 @@
1
1
  import type { Router } from "express";
2
- import type { BusinessUnitRepository } from "../repositories/business-unit";
3
- import AbstractService from "./abstract";
2
+ import type { BusinessUnitRepository } from "../repositories/business-unit.ts";
3
+ import AbstractService from "./abstract.ts";
4
4
 
5
5
  export class BusinessUnitServices extends AbstractService {
6
6
  public repository: BusinessUnitRepository;
@@ -1,6 +1,6 @@
1
1
  import type { Router } from "express";
2
- import type { CartDiscountRepository } from "../repositories/cart-discount";
3
- import AbstractService from "./abstract";
2
+ import type { CartDiscountRepository } from "../repositories/cart-discount/index.ts";
3
+ import AbstractService from "./abstract.ts";
4
4
 
5
5
  export class CartDiscountService extends AbstractService {
6
6
  public repository: CartDiscountRepository;
@@ -13,8 +13,8 @@ import type {
13
13
  } from "@commercetools/platform-sdk";
14
14
  import supertest from "supertest";
15
15
  import { afterEach, beforeEach, describe, expect, test } from "vitest";
16
- import { customerDraftFactory } from "~src/testing/customer";
17
- import { CommercetoolsMock } from "../index";
16
+ import { customerDraftFactory } from "#src/testing/customer.ts";
17
+ import { CommercetoolsMock } from "../index.ts";
18
18
 
19
19
  describe("Carts Query", () => {
20
20
  const ctMock = new CommercetoolsMock();
@@ -711,6 +711,217 @@ describe("Cart Update Actions", () => {
711
711
  ]);
712
712
  });
713
713
 
714
+ test("setLineItemPrice sets an external price for a line item", async () => {
715
+ const product = await supertest(ctMock.app)
716
+ .post("/dummy/products")
717
+ .send(productDraft)
718
+ .then((x) => x.body);
719
+
720
+ assert(product, "product not created");
721
+
722
+ const baseCartResponse = await supertest(ctMock.app)
723
+ .post("/dummy/carts")
724
+ .send({ currency: "EUR" });
725
+ expect(baseCartResponse.status).toBe(201);
726
+ const baseCart = baseCartResponse.body as Cart;
727
+
728
+ const addLineItemResponse = await supertest(ctMock.app)
729
+ .post(`/dummy/carts/${baseCart.id}`)
730
+ .send({
731
+ version: baseCart.version,
732
+ actions: [
733
+ {
734
+ action: "addLineItem",
735
+ sku: product.masterData.current.masterVariant.sku,
736
+ quantity: 2,
737
+ key: "line-item-key",
738
+ },
739
+ ],
740
+ });
741
+ expect(addLineItemResponse.status).toBe(200);
742
+ const cartWithLineItem = addLineItemResponse.body as Cart;
743
+ const lineItem = cartWithLineItem.lineItems[0];
744
+ assert(lineItem, "lineItem not created");
745
+
746
+ const externalPrice: CentPrecisionMoney = {
747
+ type: "centPrecision",
748
+ currencyCode: "EUR",
749
+ centAmount: 2500,
750
+ fractionDigits: 2,
751
+ };
752
+
753
+ const response = await supertest(ctMock.app)
754
+ .post(`/dummy/carts/${cartWithLineItem.id}`)
755
+ .send({
756
+ version: cartWithLineItem.version,
757
+ actions: [
758
+ {
759
+ action: "setLineItemPrice",
760
+ lineItemKey: lineItem.key,
761
+ externalPrice,
762
+ },
763
+ ],
764
+ });
765
+
766
+ expect(response.status).toBe(200);
767
+ expect(response.body.version).toBe(cartWithLineItem.version + 1);
768
+ expect(response.body.lineItems).toHaveLength(1);
769
+
770
+ const updatedLineItem = response.body.lineItems[0];
771
+ expect(updatedLineItem.priceMode).toBe("ExternalPrice");
772
+ expect(updatedLineItem.price.value.centAmount).toBe(
773
+ externalPrice.centAmount,
774
+ );
775
+ expect(updatedLineItem.price.value.currencyCode).toBe(
776
+ externalPrice.currencyCode,
777
+ );
778
+ expect(updatedLineItem.totalPrice.centAmount).toBe(
779
+ externalPrice.centAmount * updatedLineItem.quantity,
780
+ );
781
+ expect(response.body.totalPrice.centAmount).toBe(
782
+ externalPrice.centAmount * updatedLineItem.quantity,
783
+ );
784
+ });
785
+
786
+ test("setLineItemPrice fails when the money uses another currency", async () => {
787
+ const product = await supertest(ctMock.app)
788
+ .post("/dummy/products")
789
+ .send(productDraft)
790
+ .then((x) => x.body);
791
+
792
+ assert(product, "product not created");
793
+
794
+ const baseCartResponse = await supertest(ctMock.app)
795
+ .post("/dummy/carts")
796
+ .send({ currency: "EUR" });
797
+ expect(baseCartResponse.status).toBe(201);
798
+ const baseCart = baseCartResponse.body as Cart;
799
+
800
+ const addLineItemResponse = await supertest(ctMock.app)
801
+ .post(`/dummy/carts/${baseCart.id}`)
802
+ .send({
803
+ version: baseCart.version,
804
+ actions: [
805
+ {
806
+ action: "addLineItem",
807
+ sku: product.masterData.current.masterVariant.sku,
808
+ quantity: 1,
809
+ },
810
+ ],
811
+ });
812
+ expect(addLineItemResponse.status).toBe(200);
813
+ const cartWithLineItem = addLineItemResponse.body as Cart;
814
+ const lineItem = cartWithLineItem.lineItems[0];
815
+ assert(lineItem, "lineItem not created");
816
+
817
+ const response = await supertest(ctMock.app)
818
+ .post(`/dummy/carts/${cartWithLineItem.id}`)
819
+ .send({
820
+ version: cartWithLineItem.version,
821
+ actions: [
822
+ {
823
+ action: "setLineItemPrice",
824
+ lineItemId: lineItem.id,
825
+ externalPrice: {
826
+ type: "centPrecision",
827
+ currencyCode: "USD",
828
+ centAmount: 5000,
829
+ fractionDigits: 2,
830
+ },
831
+ },
832
+ ],
833
+ });
834
+
835
+ expect(response.status).toBe(400);
836
+ expect(response.body.message).toContain("Currency mismatch");
837
+ });
838
+
839
+ test("setLineItemPrice removes external price when no value is provided", async () => {
840
+ const product = await supertest(ctMock.app)
841
+ .post("/dummy/products")
842
+ .send(productDraft)
843
+ .then((x) => x.body);
844
+
845
+ assert(product, "product not created");
846
+
847
+ const baseCartResponse = await supertest(ctMock.app)
848
+ .post("/dummy/carts")
849
+ .send({ currency: "EUR" });
850
+ expect(baseCartResponse.status).toBe(201);
851
+ const baseCart = baseCartResponse.body as Cart;
852
+
853
+ const addLineItemResponse = await supertest(ctMock.app)
854
+ .post(`/dummy/carts/${baseCart.id}`)
855
+ .send({
856
+ version: baseCart.version,
857
+ actions: [
858
+ {
859
+ action: "addLineItem",
860
+ sku: product.masterData.current.masterVariant.sku,
861
+ quantity: 1,
862
+ },
863
+ ],
864
+ });
865
+ expect(addLineItemResponse.status).toBe(200);
866
+ const cartWithLineItem = addLineItemResponse.body as Cart;
867
+ const lineItem = cartWithLineItem.lineItems[0];
868
+ assert(lineItem, "lineItem not created");
869
+
870
+ const externalPrice: CentPrecisionMoney = {
871
+ type: "centPrecision",
872
+ currencyCode: "EUR",
873
+ centAmount: 1000,
874
+ fractionDigits: 2,
875
+ };
876
+
877
+ const setExternalPriceResponse = await supertest(ctMock.app)
878
+ .post(`/dummy/carts/${cartWithLineItem.id}`)
879
+ .send({
880
+ version: cartWithLineItem.version,
881
+ actions: [
882
+ {
883
+ action: "setLineItemPrice",
884
+ lineItemId: lineItem.id,
885
+ externalPrice,
886
+ },
887
+ ],
888
+ });
889
+ expect(setExternalPriceResponse.status).toBe(200);
890
+ const cartWithExternalPrice = setExternalPriceResponse.body as Cart;
891
+ expect(cartWithExternalPrice.lineItems[0].priceMode).toBe("ExternalPrice");
892
+
893
+ const resetResponse = await supertest(ctMock.app)
894
+ .post(`/dummy/carts/${cartWithExternalPrice.id}`)
895
+ .send({
896
+ version: cartWithExternalPrice.version,
897
+ actions: [
898
+ {
899
+ action: "setLineItemPrice",
900
+ lineItemId: lineItem.id,
901
+ },
902
+ ],
903
+ });
904
+
905
+ expect(resetResponse.status).toBe(200);
906
+ expect(resetResponse.body.version).toBe(cartWithExternalPrice.version + 1);
907
+ expect(resetResponse.body.lineItems).toHaveLength(1);
908
+
909
+ const revertedLineItem = resetResponse.body.lineItems[0];
910
+ const expectedCentAmount =
911
+ product.masterData.current.masterVariant.prices?.[0].value.centAmount;
912
+ if (typeof expectedCentAmount !== "number") {
913
+ throw new Error("product price not found");
914
+ }
915
+ expect(revertedLineItem.priceMode).toBe("Platform");
916
+ expect(revertedLineItem.price.value.centAmount).toBe(expectedCentAmount);
917
+ expect(revertedLineItem.totalPrice.centAmount).toBe(
918
+ expectedCentAmount * revertedLineItem.quantity,
919
+ );
920
+ expect(resetResponse.body.totalPrice.centAmount).toBe(
921
+ expectedCentAmount * revertedLineItem.quantity,
922
+ );
923
+ });
924
+
714
925
  test("setLineItemCustomField", async () => {
715
926
  const product = await supertest(ctMock.app)
716
927
  .post("/dummy/products")
@@ -1,9 +1,9 @@
1
1
  import type { Cart, CartDraft, Order } from "@commercetools/platform-sdk";
2
2
  import type { Request, Response, Router } from "express";
3
- import type { CartRepository } from "../repositories/cart";
4
- import { getRepositoryContext } from "../repositories/helpers";
5
- import type { OrderRepository } from "../repositories/order";
6
- import AbstractService from "./abstract";
3
+ import type { CartRepository } from "../repositories/cart/index.ts";
4
+ import { getRepositoryContext } from "../repositories/helpers.ts";
5
+ import type { OrderRepository } from "../repositories/order/index.ts";
6
+ import AbstractService from "./abstract.ts";
7
7
 
8
8
  export class CartService extends AbstractService {
9
9
  public repository: CartRepository;
@@ -31,7 +31,6 @@ export class CartService extends AbstractService {
31
31
  replicate(request: Request, response: Response) {
32
32
  const context = getRepositoryContext(request);
33
33
 
34
- // @ts-ignore
35
34
  const cartOrOrder: Cart | Order | null =
36
35
  request.body.reference.typeId === "order"
37
36
  ? this.orderRepository.get(context, request.body.reference.id)
@@ -6,7 +6,7 @@ import type {
6
6
  } from "@commercetools/platform-sdk";
7
7
  import supertest from "supertest";
8
8
  import { afterEach, beforeEach, describe, expect, test } from "vitest";
9
- import { CommercetoolsMock } from "../index";
9
+ import { CommercetoolsMock } from "../index.ts";
10
10
 
11
11
  describe("Categories Query", () => {
12
12
  const ctMock = new CommercetoolsMock();
@@ -1,6 +1,6 @@
1
1
  import type { Router } from "express";
2
- import type { CategoryRepository } from "../repositories/category/index";
3
- import AbstractService from "./abstract";
2
+ import type { CategoryRepository } from "../repositories/category/index.ts";
3
+ import AbstractService from "./abstract.ts";
4
4
 
5
5
  export class CategoryServices extends AbstractService {
6
6
  public repository: CategoryRepository;
@@ -1,7 +1,7 @@
1
1
  import type { ChannelDraft } from "@commercetools/platform-sdk";
2
2
  import supertest from "supertest";
3
3
  import { describe, expect, test } from "vitest";
4
- import { CommercetoolsMock } from "../index";
4
+ import { CommercetoolsMock } from "../index.ts";
5
5
 
6
6
  const ctMock = new CommercetoolsMock();
7
7
 
@@ -1,6 +1,6 @@
1
1
  import type { Router } from "express";
2
- import type { ChannelRepository } from "../repositories/channel";
3
- import AbstractService from "./abstract";
2
+ import type { ChannelRepository } from "../repositories/channel.ts";
3
+ import AbstractService from "./abstract.ts";
4
4
 
5
5
  export class ChannelService extends AbstractService {
6
6
  public repository: ChannelRepository;
@@ -1,8 +1,8 @@
1
1
  import type { CustomObject } from "@commercetools/platform-sdk";
2
2
  import supertest from "supertest";
3
3
  import { afterEach, beforeEach, describe, expect, test } from "vitest";
4
- import { getBaseResourceProperties } from "../helpers";
5
- import { CommercetoolsMock } from "../index";
4
+ import { getBaseResourceProperties } from "../helpers.ts";
5
+ import { CommercetoolsMock } from "../index.ts";
6
6
 
7
7
  describe("CustomObject create", () => {
8
8
  const ctMock = new CommercetoolsMock();
@@ -1,8 +1,8 @@
1
1
  import type { CustomObjectDraft } from "@commercetools/platform-sdk";
2
2
  import type { Request, Response, Router } from "express";
3
- import type { CustomObjectRepository } from "../repositories/custom-object";
4
- import { getRepositoryContext } from "../repositories/helpers";
5
- import AbstractService from "./abstract";
3
+ import type { CustomObjectRepository } from "../repositories/custom-object.ts";
4
+ import { getRepositoryContext } from "../repositories/helpers.ts";
5
+ import AbstractService from "./abstract.ts";
6
6
 
7
7
  export class CustomObjectService extends AbstractService {
8
8
  public repository: CustomObjectRepository;
@@ -1,7 +1,7 @@
1
1
  import type { CustomerGroupDraft } from "@commercetools/platform-sdk";
2
2
  import supertest from "supertest";
3
3
  import { describe, expect, test } from "vitest";
4
- import { CommercetoolsMock } from "../index";
4
+ import { CommercetoolsMock } from "../index.ts";
5
5
 
6
6
  const ctMock = new CommercetoolsMock();
7
7
 
@@ -1,6 +1,6 @@
1
1
  import type { Router } from "express";
2
- import type { CustomerGroupRepository } from "../repositories/customer-group";
3
- import AbstractService from "./abstract";
2
+ import type { CustomerGroupRepository } from "../repositories/customer-group.ts";
3
+ import AbstractService from "./abstract.ts";
4
4
 
5
5
  export class CustomerGroupService extends AbstractService {
6
6
  public repository: CustomerGroupRepository;
@@ -6,9 +6,9 @@ import type {
6
6
  } from "@commercetools/platform-sdk";
7
7
  import supertest from "supertest";
8
8
  import { afterEach, beforeEach, describe, expect, test } from "vitest";
9
- import { hashPassword } from "~src/lib/password";
10
- import { customerDraftFactory } from "~src/testing/customer";
11
- import { CommercetoolsMock, getBaseResourceProperties } from "../index";
9
+ import { hashPassword } from "#src/lib/password.ts";
10
+ import { customerDraftFactory } from "#src/testing/customer.ts";
11
+ import { CommercetoolsMock, getBaseResourceProperties } from "../index.ts";
12
12
 
13
13
  const ctMock = new CommercetoolsMock();
14
14
 
@@ -1,9 +1,8 @@
1
1
  import type { CustomerSignInResult } from "@commercetools/platform-sdk";
2
- import type { Router } from "express";
3
- import type { Request, Response } from "express";
4
- import type { CustomerRepository } from "../repositories/customer";
5
- import { getRepositoryContext } from "../repositories/helpers";
6
- import AbstractService from "./abstract";
2
+ import type { Request, Response, Router } from "express";
3
+ import type { CustomerRepository } from "../repositories/customer/index.ts";
4
+ import { getRepositoryContext } from "../repositories/helpers.ts";
5
+ import AbstractService from "./abstract.ts";
7
6
 
8
7
  export class CustomerService extends AbstractService {
9
8
  public repository: CustomerRepository;