@labdigital/commercetools-mock 2.17.1 → 2.18.1

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 (180) hide show
  1. package/dist/index.cjs +4351 -4099
  2. package/dist/index.cjs.map +1 -1
  3. package/dist/index.d.cts +266 -413
  4. package/dist/index.d.ts +266 -413
  5. package/dist/index.js +4351 -4099
  6. package/dist/index.js.map +1 -1
  7. package/package.json +47 -47
  8. package/src/constants.ts +2 -2
  9. package/src/ctMock.test.ts +11 -11
  10. package/src/ctMock.ts +141 -127
  11. package/src/deprecation.ts +8 -0
  12. package/src/exceptions.ts +17 -15
  13. package/src/helpers.ts +32 -32
  14. package/src/index.test.ts +128 -128
  15. package/src/index.ts +3 -3
  16. package/src/lib/expandParser.ts +13 -13
  17. package/src/lib/haversine.test.ts +9 -9
  18. package/src/lib/haversine.ts +11 -11
  19. package/src/lib/masking.ts +11 -11
  20. package/src/lib/parser.ts +2 -2
  21. package/src/lib/password.ts +23 -3
  22. package/src/lib/predicateParser.test.ts +185 -183
  23. package/src/lib/predicateParser.ts +234 -234
  24. package/src/lib/projectionSearchFilter.test.ts +103 -101
  25. package/src/lib/projectionSearchFilter.ts +152 -150
  26. package/src/lib/proxy.ts +5 -5
  27. package/src/oauth/errors.ts +4 -4
  28. package/src/oauth/helpers.ts +6 -6
  29. package/src/oauth/server.test.ts +86 -86
  30. package/src/oauth/server.ts +158 -144
  31. package/src/oauth/store.ts +44 -43
  32. package/src/priceSelector.test.ts +35 -35
  33. package/src/priceSelector.ts +30 -30
  34. package/src/product-projection-search.ts +136 -134
  35. package/src/projectAPI.test.ts +7 -7
  36. package/src/projectAPI.ts +24 -22
  37. package/src/repositories/abstract.ts +168 -116
  38. package/src/repositories/associate-role.ts +90 -77
  39. package/src/repositories/attribute-group.ts +51 -40
  40. package/src/repositories/business-unit.ts +168 -148
  41. package/src/repositories/cart/actions.ts +489 -0
  42. package/src/repositories/cart/helpers.ts +30 -0
  43. package/src/repositories/cart/index.ts +180 -0
  44. package/src/repositories/cart-discount/actions.ts +148 -0
  45. package/src/repositories/cart-discount/index.ts +86 -0
  46. package/src/repositories/category/actions.ts +231 -0
  47. package/src/repositories/category/index.ts +52 -0
  48. package/src/repositories/channel.ts +88 -90
  49. package/src/repositories/custom-object.ts +46 -45
  50. package/src/repositories/customer/actions.ts +165 -0
  51. package/src/repositories/customer/index.ts +79 -0
  52. package/src/repositories/customer-group.ts +66 -55
  53. package/src/repositories/discount-code/actions.ts +149 -0
  54. package/src/repositories/discount-code/index.ts +50 -0
  55. package/src/repositories/errors.ts +10 -10
  56. package/src/repositories/extension.ts +64 -62
  57. package/src/repositories/helpers.ts +117 -118
  58. package/src/repositories/index.ts +80 -79
  59. package/src/repositories/inventory-entry/actions.ts +84 -0
  60. package/src/repositories/inventory-entry/index.ts +44 -0
  61. package/src/repositories/my-customer.ts +114 -0
  62. package/src/repositories/my-order.ts +8 -8
  63. package/src/repositories/order/actions.ts +281 -0
  64. package/src/repositories/{order.test.ts → order/index.test.ts} +77 -77
  65. package/src/repositories/order/index.ts +260 -0
  66. package/src/repositories/order-edit.ts +10 -23
  67. package/src/repositories/payment/actions.ts +305 -0
  68. package/src/repositories/payment/helpers.ts +17 -0
  69. package/src/repositories/payment/index.ts +56 -0
  70. package/src/repositories/product/actions.ts +943 -0
  71. package/src/repositories/product/helpers.ts +98 -0
  72. package/src/repositories/product/index.ts +130 -0
  73. package/src/repositories/product-discount.ts +127 -117
  74. package/src/repositories/product-projection.ts +56 -62
  75. package/src/repositories/product-selection.ts +31 -28
  76. package/src/repositories/product-type.ts +136 -134
  77. package/src/repositories/project.ts +133 -118
  78. package/src/repositories/quote-request.ts +7 -19
  79. package/src/repositories/quote.ts +7 -22
  80. package/src/repositories/review.ts +13 -26
  81. package/src/repositories/shipping-method/actions.ts +198 -0
  82. package/src/repositories/shipping-method/helpers.ts +10 -0
  83. package/src/repositories/shipping-method/index.ts +138 -0
  84. package/src/repositories/shopping-list/actions.ts +295 -0
  85. package/src/repositories/shopping-list/index.ts +122 -0
  86. package/src/repositories/staged-quote.ts +7 -20
  87. package/src/repositories/standalone-price.ts +57 -44
  88. package/src/repositories/state.ts +113 -68
  89. package/src/repositories/store.ts +106 -94
  90. package/src/repositories/subscription.ts +46 -22
  91. package/src/repositories/tax-category/actions.ts +94 -0
  92. package/src/repositories/tax-category/helpers.ts +8 -0
  93. package/src/repositories/tax-category/index.ts +25 -0
  94. package/src/repositories/type/actions.ts +162 -0
  95. package/src/repositories/type/index.ts +24 -0
  96. package/src/repositories/zone.ts +62 -58
  97. package/src/schemas/update-request.ts +12 -0
  98. package/src/server.ts +9 -9
  99. package/src/services/abstract.ts +85 -72
  100. package/src/services/associate-roles.test.ts +27 -27
  101. package/src/services/associate-roles.ts +7 -7
  102. package/src/services/attribute-group.ts +7 -7
  103. package/src/services/business-units.test.ts +28 -28
  104. package/src/services/business-units.ts +7 -7
  105. package/src/services/cart-discount.test.ts +199 -199
  106. package/src/services/cart-discount.ts +7 -7
  107. package/src/services/cart.test.ts +261 -261
  108. package/src/services/cart.ts +22 -21
  109. package/src/services/category.test.ts +121 -121
  110. package/src/services/category.ts +7 -7
  111. package/src/services/channel.ts +7 -7
  112. package/src/services/custom-object.test.ts +130 -130
  113. package/src/services/custom-object.ts +34 -31
  114. package/src/services/customer-group.ts +7 -7
  115. package/src/services/customer.test.ts +205 -205
  116. package/src/services/customer.ts +23 -36
  117. package/src/services/discount-code.ts +7 -7
  118. package/src/services/extension.ts +7 -7
  119. package/src/services/index.ts +85 -81
  120. package/src/services/inventory-entry.test.ts +106 -106
  121. package/src/services/inventory-entry.ts +7 -7
  122. package/src/services/my-cart.test.ts +56 -56
  123. package/src/services/my-cart.ts +20 -20
  124. package/src/services/my-customer.test.ts +155 -104
  125. package/src/services/my-customer.ts +66 -75
  126. package/src/services/my-order.ts +16 -16
  127. package/src/services/my-payment.test.ts +40 -40
  128. package/src/services/my-payment.ts +7 -7
  129. package/src/services/my-shopping-list.ts +7 -7
  130. package/src/services/order.test.ts +243 -243
  131. package/src/services/order.ts +23 -18
  132. package/src/services/payment.test.ts +40 -40
  133. package/src/services/payment.ts +7 -7
  134. package/src/services/product-discount.ts +7 -7
  135. package/src/services/product-projection.test.ts +190 -190
  136. package/src/services/product-projection.ts +34 -32
  137. package/src/services/product-selection.test.ts +19 -19
  138. package/src/services/product-selection.ts +7 -7
  139. package/src/services/product-type.test.ts +38 -38
  140. package/src/services/product-type.ts +7 -7
  141. package/src/services/product.test.ts +658 -656
  142. package/src/services/product.ts +7 -7
  143. package/src/services/project.test.ts +29 -24
  144. package/src/services/project.ts +22 -17
  145. package/src/services/reviews.ts +7 -7
  146. package/src/services/shipping-method.test.ts +78 -78
  147. package/src/services/shipping-method.ts +16 -16
  148. package/src/services/shopping-list.test.ts +170 -170
  149. package/src/services/shopping-list.ts +7 -7
  150. package/src/services/standalone-price.test.ts +112 -112
  151. package/src/services/standalone-price.ts +7 -7
  152. package/src/services/state.test.ts +30 -30
  153. package/src/services/state.ts +7 -7
  154. package/src/services/store.test.ts +40 -40
  155. package/src/services/store.ts +7 -7
  156. package/src/services/subscription.ts +7 -7
  157. package/src/services/tax-category.test.ts +43 -43
  158. package/src/services/tax-category.ts +7 -7
  159. package/src/services/type.ts +7 -7
  160. package/src/services/zone.ts +7 -7
  161. package/src/shippingCalculator.test.ts +43 -43
  162. package/src/shippingCalculator.ts +23 -23
  163. package/src/storage/abstract.ts +36 -34
  164. package/src/storage/in-memory.ts +237 -233
  165. package/src/storage/index.ts +2 -2
  166. package/src/types.ts +91 -91
  167. package/src/validate.ts +18 -0
  168. package/src/repositories/cart-discount.ts +0 -219
  169. package/src/repositories/cart.ts +0 -659
  170. package/src/repositories/category.ts +0 -256
  171. package/src/repositories/customer.ts +0 -228
  172. package/src/repositories/discount-code.ts +0 -181
  173. package/src/repositories/inventory-entry.ts +0 -109
  174. package/src/repositories/order.ts +0 -514
  175. package/src/repositories/payment.ts +0 -342
  176. package/src/repositories/product.ts +0 -1106
  177. package/src/repositories/shipping-method.ts +0 -312
  178. package/src/repositories/shopping-list.ts +0 -392
  179. package/src/repositories/tax-category.ts +0 -111
  180. package/src/repositories/type.ts +0 -172
@@ -1,99 +1,99 @@
1
- import type { Cart, MyCartDraft } from '@commercetools/platform-sdk'
2
- import supertest from 'supertest'
3
- import { afterEach, beforeEach, describe, expect, test } from 'vitest'
4
- import { CommercetoolsMock } from '../index.js'
1
+ import type { Cart, MyCartDraft } from "@commercetools/platform-sdk";
2
+ import supertest from "supertest";
3
+ import { afterEach, beforeEach, describe, expect, test } from "vitest";
4
+ import { CommercetoolsMock } from "../index";
5
5
 
6
- const ctMock = new CommercetoolsMock()
6
+ const ctMock = new CommercetoolsMock();
7
7
 
8
- describe('MyCart', () => {
8
+ describe("MyCart", () => {
9
9
  beforeEach(async () => {
10
10
  const response = await supertest(ctMock.app)
11
- .post('/dummy/types')
11
+ .post("/dummy/types")
12
12
  .send({
13
- key: 'custom-payment',
13
+ key: "custom-payment",
14
14
  name: {
15
- 'nl-NL': 'custom-payment',
15
+ "nl-NL": "custom-payment",
16
16
  },
17
- resourceTypeIds: ['payment'],
18
- })
19
- expect(response.status).toBe(201)
20
- })
17
+ resourceTypeIds: ["payment"],
18
+ });
19
+ expect(response.status).toBe(201);
20
+ });
21
21
 
22
22
  afterEach(() => {
23
- ctMock.clear()
24
- })
23
+ ctMock.clear();
24
+ });
25
25
 
26
- test('Create my cart', async () => {
26
+ test("Create my cart", async () => {
27
27
  const draft: MyCartDraft = {
28
- currency: 'EUR',
29
- }
28
+ currency: "EUR",
29
+ };
30
30
 
31
31
  const response = await supertest(ctMock.app)
32
- .post('/dummy/me/carts')
33
- .send(draft)
32
+ .post("/dummy/me/carts")
33
+ .send(draft);
34
34
 
35
- expect(response.status).toBe(201)
35
+ expect(response.status).toBe(201);
36
36
  expect(response.body).toEqual({
37
37
  id: expect.anything(),
38
38
  createdAt: expect.anything(),
39
39
  lastModifiedAt: expect.anything(),
40
40
  version: 1,
41
- cartState: 'Active',
41
+ cartState: "Active",
42
42
  discountCodes: [],
43
43
  directDiscounts: [],
44
- inventoryMode: 'None',
44
+ inventoryMode: "None",
45
45
  itemShippingAddresses: [],
46
46
  lineItems: [],
47
47
  customLineItems: [],
48
48
  shipping: [],
49
- shippingMode: 'Single',
49
+ shippingMode: "Single",
50
50
  totalPrice: {
51
- type: 'centPrecision',
51
+ type: "centPrecision",
52
52
  centAmount: 0,
53
- currencyCode: 'EUR',
53
+ currencyCode: "EUR",
54
54
  fractionDigits: 0,
55
55
  },
56
- taxMode: 'Platform',
57
- taxRoundingMode: 'HalfEven',
58
- taxCalculationMode: 'LineItemLevel',
56
+ taxMode: "Platform",
57
+ taxRoundingMode: "HalfEven",
58
+ taxCalculationMode: "LineItemLevel",
59
59
  refusedGifts: [],
60
- origin: 'Customer',
61
- } as Cart)
62
- })
60
+ origin: "Customer",
61
+ } as Cart);
62
+ });
63
63
 
64
- test('Get my cart by ID', async () => {
64
+ test("Get my cart by ID", async () => {
65
65
  const draft: MyCartDraft = {
66
- currency: 'EUR',
67
- }
66
+ currency: "EUR",
67
+ };
68
68
  const createResponse = await supertest(ctMock.app)
69
- .post('/dummy/me/carts')
70
- .send(draft)
69
+ .post("/dummy/me/carts")
70
+ .send(draft);
71
71
 
72
72
  const response = await supertest(ctMock.app).get(
73
- `/dummy/me/carts/${createResponse.body.id}`
74
- )
73
+ `/dummy/me/carts/${createResponse.body.id}`,
74
+ );
75
75
 
76
- expect(response.status).toBe(200)
77
- expect(response.body).toEqual(createResponse.body)
78
- })
76
+ expect(response.status).toBe(200);
77
+ expect(response.body).toEqual(createResponse.body);
78
+ });
79
79
 
80
- test('Get my active cart', async () => {
80
+ test("Get my active cart", async () => {
81
81
  const draft: MyCartDraft = {
82
- currency: 'EUR',
83
- }
82
+ currency: "EUR",
83
+ };
84
84
  const createResponse = await supertest(ctMock.app)
85
- .post('/dummy/me/carts')
86
- .send(draft)
85
+ .post("/dummy/me/carts")
86
+ .send(draft);
87
87
 
88
- const response = await supertest(ctMock.app).get(`/dummy/me/active-cart`)
88
+ const response = await supertest(ctMock.app).get(`/dummy/me/active-cart`);
89
89
 
90
- expect(response.status).toBe(200)
91
- expect(response.body).toEqual(createResponse.body)
92
- })
90
+ expect(response.status).toBe(200);
91
+ expect(response.body).toEqual(createResponse.body);
92
+ });
93
93
 
94
- test('Get my active cart which doesnt exists', async () => {
95
- const response = await supertest(ctMock.app).get(`/dummy/me/active-cart`)
94
+ test("Get my active cart which doesnt exists", async () => {
95
+ const response = await supertest(ctMock.app).get(`/dummy/me/active-cart`);
96
96
 
97
- expect(response.status).toBe(404)
98
- })
99
- })
97
+ expect(response.status).toBe(404);
98
+ });
99
+ });
@@ -1,43 +1,43 @@
1
- import { Request, Response, Router } from 'express'
2
- import { CartRepository } from '../repositories/cart.js'
3
- import AbstractService from './abstract.js'
1
+ import { Request, Response, Router } from "express";
2
+ import { CartRepository } from "../repositories/cart";
3
+ import AbstractService from "./abstract";
4
4
 
5
5
  export class MyCartService extends AbstractService {
6
- public repository: CartRepository
6
+ public repository: CartRepository;
7
7
 
8
8
  constructor(parent: Router, repository: CartRepository) {
9
- super(parent)
10
- this.repository = repository
9
+ super(parent);
10
+ this.repository = repository;
11
11
  }
12
12
 
13
13
  getBasePath() {
14
- return 'me'
14
+ return "me";
15
15
  }
16
16
 
17
17
  registerRoutes(parent: Router) {
18
18
  // Overwrite this function to be able to handle /me/active-cart path.
19
- const basePath = this.getBasePath()
20
- const router = Router({ mergeParams: true })
19
+ const basePath = this.getBasePath();
20
+ const router = Router({ mergeParams: true });
21
21
 
22
- this.extraRoutes(router)
22
+ this.extraRoutes(router);
23
23
 
24
- router.get('/active-cart', this.activeCart.bind(this))
25
- router.get('/carts/', this.get.bind(this))
26
- router.get('/carts/:id', this.getWithId.bind(this))
24
+ router.get("/active-cart", this.activeCart.bind(this));
25
+ router.get("/carts/", this.get.bind(this));
26
+ router.get("/carts/:id", this.getWithId.bind(this));
27
27
 
28
- router.delete('/carts/:id', this.deleteWithId.bind(this))
28
+ router.delete("/carts/:id", this.deleteWithId.bind(this));
29
29
 
30
- router.post('/carts/', this.post.bind(this))
31
- router.post('/carts/:id', this.postWithId.bind(this))
30
+ router.post("/carts/", this.post.bind(this));
31
+ router.post("/carts/:id", this.postWithId.bind(this));
32
32
 
33
- parent.use(`/${basePath}`, router)
33
+ parent.use(`/${basePath}`, router);
34
34
  }
35
35
 
36
36
  activeCart(request: Request, response: Response) {
37
- const resource = this.repository.getActiveCart(request.params.projectKey)
37
+ const resource = this.repository.getActiveCart(request.params.projectKey);
38
38
  if (!resource) {
39
- return response.status(404).send('Not found')
39
+ return response.status(404).send("Not found");
40
40
  }
41
- return response.status(200).send(resource)
41
+ return response.status(200).send(resource);
42
42
  }
43
43
  }
@@ -1,35 +1,36 @@
1
1
  import type {
2
2
  CustomerChangePassword,
3
+ CustomerToken,
3
4
  MyCustomerDraft,
4
- } from '@commercetools/platform-sdk'
5
- import supertest from 'supertest'
6
- import { afterEach, beforeEach, describe, expect, test } from 'vitest'
7
- import { CommercetoolsMock, getBaseResourceProperties } from '../index.js'
8
- import { hashPassword } from '../lib/password.js'
5
+ } from "@commercetools/platform-sdk";
6
+ import supertest from "supertest";
7
+ import { afterEach, beforeEach, describe, expect, test } from "vitest";
8
+ import { CommercetoolsMock, getBaseResourceProperties } from "../index";
9
+ import { hashPassword } from "../lib/password";
9
10
 
10
- const ctMock = new CommercetoolsMock()
11
+ const ctMock = new CommercetoolsMock();
11
12
 
12
- describe('Me', () => {
13
+ describe("Me", () => {
13
14
  afterEach(() => {
14
- ctMock.clear()
15
- })
15
+ ctMock.clear();
16
+ });
16
17
 
17
- test('Create me', async () => {
18
+ test("Create me", async () => {
18
19
  const draft: MyCustomerDraft = {
19
- email: 'test@example.org',
20
- password: 'p4ssw0rd',
21
- }
20
+ email: "test@example.org",
21
+ password: "p4ssw0rd",
22
+ };
22
23
 
23
24
  const response = await supertest(ctMock.app)
24
- .post('/dummy/me/signup')
25
- .send(draft)
25
+ .post("/dummy/me/signup")
26
+ .send(draft);
26
27
 
27
- expect(response.status).toBe(201)
28
+ expect(response.status).toBe(201);
28
29
  expect(response.body).toEqual({
29
30
  customer: {
30
31
  ...draft,
31
- password: 'cDRzc3cwcmQ=',
32
- authenticationMode: 'Password',
32
+ password: "cDRzc3cwcmQ=",
33
+ authenticationMode: "Password",
33
34
  version: 1,
34
35
  isEmailVerified: false,
35
36
  addresses: [],
@@ -37,151 +38,201 @@ describe('Me', () => {
37
38
  createdAt: expect.anything(),
38
39
  lastModifiedAt: expect.anything(),
39
40
  },
40
- })
41
- })
41
+ });
42
+ });
42
43
 
43
- test('Get me', async () => {
44
+ test("Get me", async () => {
44
45
  const draft: MyCustomerDraft = {
45
- email: 'test@example.org',
46
- password: 'p4ssw0rd',
47
- }
46
+ email: "test@example.org",
47
+ password: "p4ssw0rd",
48
+ };
48
49
  const createResponse = await supertest(ctMock.app)
49
- .post('/dummy/me/signup')
50
- .send(draft)
50
+ .post("/dummy/me/signup")
51
+ .send(draft);
51
52
 
52
- const response = await supertest(ctMock.app).get(`/dummy/me`)
53
+ const response = await supertest(ctMock.app).get(`/dummy/me`);
53
54
 
54
- expect(response.status).toBe(200)
55
- expect(response.body).toEqual(createResponse.body.customer)
56
- })
57
- })
55
+ expect(response.status).toBe(200);
56
+ expect(response.body).toEqual(createResponse.body.customer);
57
+ });
58
+ });
58
59
 
59
- describe('/me', () => {
60
+ describe("/me", () => {
60
61
  afterEach(() => {
61
- ctMock.clear()
62
- })
62
+ ctMock.clear();
63
+ });
63
64
 
64
65
  beforeEach(() => {
65
- ctMock.project('dummy').add('customer', {
66
- id: '123',
67
- createdAt: '2021-03-18T14:00:00.000Z',
66
+ ctMock.project("dummy").add("customer", {
67
+ id: "123",
68
+ createdAt: "2021-03-18T14:00:00.000Z",
68
69
  version: 2,
69
- lastModifiedAt: '2021-03-18T14:00:00.000Z',
70
- email: 'foo@example.org',
70
+ lastModifiedAt: "2021-03-18T14:00:00.000Z",
71
+ email: "foo@example.org",
71
72
  addresses: [],
72
73
  isEmailVerified: true,
73
- authenticationMode: 'password',
74
- custom: { type: { typeId: 'type', id: '' }, fields: {} },
75
- })
76
- })
74
+ authenticationMode: "password",
75
+ custom: { type: { typeId: "type", id: "" }, fields: {} },
76
+ });
77
+ });
77
78
 
78
- test('Get me', async () => {
79
- const response = await supertest(ctMock.app).get('/dummy/me')
79
+ test("Get me", async () => {
80
+ const response = await supertest(ctMock.app).get("/dummy/me");
80
81
 
81
- expect(response.status).toBe(200)
82
+ expect(response.status).toBe(200);
82
83
  expect(response.body).toEqual({
83
- id: '123',
84
- createdAt: '2021-03-18T14:00:00.000Z',
84
+ id: "123",
85
+ createdAt: "2021-03-18T14:00:00.000Z",
85
86
  version: 2,
86
- lastModifiedAt: '2021-03-18T14:00:00.000Z',
87
- email: 'foo@example.org',
87
+ lastModifiedAt: "2021-03-18T14:00:00.000Z",
88
+ email: "foo@example.org",
88
89
  addresses: [],
89
90
  isEmailVerified: true,
90
- authenticationMode: 'password',
91
+ authenticationMode: "password",
91
92
  custom: {
92
93
  fields: {},
93
94
  type: {
94
- id: '',
95
- typeId: 'type',
95
+ id: "",
96
+ typeId: "type",
96
97
  },
97
98
  },
98
- })
99
- })
99
+ });
100
+ });
100
101
 
101
- test('Delete me', async () => {
102
- const response = await supertest(ctMock.app).delete('/dummy/me')
102
+ test("Delete me", async () => {
103
+ const response = await supertest(ctMock.app).delete("/dummy/me");
103
104
 
104
- expect(response.status).toBe(200)
105
+ expect(response.status).toBe(200);
105
106
  expect(response.body).toEqual({
106
- id: '123',
107
- createdAt: '2021-03-18T14:00:00.000Z',
107
+ id: "123",
108
+ createdAt: "2021-03-18T14:00:00.000Z",
108
109
  version: 2,
109
- lastModifiedAt: '2021-03-18T14:00:00.000Z',
110
- email: 'foo@example.org',
110
+ lastModifiedAt: "2021-03-18T14:00:00.000Z",
111
+ email: "foo@example.org",
111
112
  addresses: [],
112
113
  isEmailVerified: true,
113
- authenticationMode: 'password',
114
+ authenticationMode: "password",
114
115
  custom: {
115
116
  fields: {},
116
117
  type: {
117
- id: '',
118
- typeId: 'type',
118
+ id: "",
119
+ typeId: "type",
119
120
  },
120
121
  },
121
- })
122
+ });
122
123
 
123
- const newResponse = await supertest(ctMock.app).get('/dummy/me')
124
- expect(newResponse.status).toBe(404)
125
- })
124
+ const newResponse = await supertest(ctMock.app).get("/dummy/me");
125
+ expect(newResponse.status).toBe(404);
126
+ });
126
127
 
127
- test('Change my password', async () => {
128
+ test("Change my password", async () => {
128
129
  const customer = {
129
130
  ...getBaseResourceProperties(),
130
- id: 'customer-uuid',
131
- email: 'user@example.com',
132
- password: hashPassword('p4ssw0rd'),
131
+ id: "customer-uuid",
132
+ email: "user@example.com",
133
+ password: hashPassword("p4ssw0rd"),
133
134
  addresses: [],
134
135
  isEmailVerified: true,
135
- authenticationMode: 'Password', //default in Commercetools
136
+ authenticationMode: "Password", //default in Commercetools
136
137
  version: 1,
137
- }
138
- ctMock.project('dummy').add('customer', customer)
138
+ };
139
+ ctMock.project("dummy").add("customer", customer);
139
140
 
140
141
  const draft: CustomerChangePassword = {
141
142
  id: customer.id,
142
143
  version: customer.version,
143
- newPassword: 'newP4ssw0rd',
144
- currentPassword: 'p4ssw0rd',
145
- }
144
+ newPassword: "newP4ssw0rd",
145
+ currentPassword: "p4ssw0rd",
146
+ };
146
147
  const response = await supertest(ctMock.app)
147
- .post('/dummy/me/password')
148
- .send(draft)
148
+ .post("/dummy/me/password")
149
+ .send(draft);
149
150
 
150
- expect(response.status).toBe(200)
151
- })
151
+ expect(response.status).toBe(200);
152
+ });
152
153
 
153
- test('Fail to change password', async () => {
154
+ test("Fail to change password", async () => {
154
155
  const draft: CustomerChangePassword = {
155
- id: 'foo',
156
+ id: "foo",
156
157
  version: 1,
157
- newPassword: 'newP4ssw0rd',
158
- currentPassword: 'p4ssw0rd',
159
- }
158
+ newPassword: "newP4ssw0rd",
159
+ currentPassword: "p4ssw0rd",
160
+ };
160
161
  const response = await supertest(ctMock.app)
161
- .post('/dummy/me/password')
162
- .send(draft)
162
+ .post("/dummy/me/password")
163
+ .send(draft);
163
164
 
164
- expect(response.status).toBe(404)
165
+ expect(response.status).toBe(400);
165
166
  expect(response.body).toEqual({
167
+ message: "Account with the given credentials not found.",
168
+ statusCode: 400,
166
169
  errors: [
167
170
  {
168
- code: 'InvalidCurrentPassword',
169
- message: 'Account with the given credentials not found.',
171
+ code: "InvalidCurrentPassword",
172
+ message: "Account with the given credentials not found.",
170
173
  },
171
174
  ],
172
- message: 'Account with the given credentials not found.',
173
- })
174
- })
175
+ });
176
+ });
177
+
178
+ test("reset password flow", async () => {
179
+ const customer = {
180
+ ...getBaseResourceProperties(),
181
+ id: "customer-uuid",
182
+ email: "user@example.com",
183
+ password: hashPassword("p4ssw0rd"),
184
+ addresses: [],
185
+ isEmailVerified: true,
186
+ authenticationMode: "Password", //default in Commercetools
187
+ version: 1,
188
+ };
189
+ ctMock.project("dummy").add("customer", customer);
190
+
191
+ const token = await supertest(ctMock.app)
192
+ .post("/dummy/customers/password-token")
193
+ .send({
194
+ email: "user@example.com",
195
+ })
196
+ .then((response) => response.body as CustomerToken);
175
197
 
176
- test('setCustomField', async () => {
198
+ const response = await supertest(ctMock.app)
199
+ .post("/dummy/me/password/reset")
200
+ .send({
201
+ tokenValue: token.value,
202
+ newPassword: "somethingNew",
203
+ });
204
+ expect(response.status).toBe(200);
205
+ });
206
+
207
+ test("fail reset password flow", async () => {
208
+ const response = await supertest(ctMock.app)
209
+ .post("/dummy/me/password/reset")
210
+ .send({
211
+ tokenValue: "invalid-token",
212
+ newPassword: "somethingNew",
213
+ });
214
+ expect(response.status).toBe(400);
215
+ expect(response.body).toEqual({
216
+ message: `The Customer with ID 'Token(invalid-token)' was not found.`,
217
+ statusCode: 400,
218
+ errors: [
219
+ {
220
+ code: "ResourceNotFound",
221
+ message: `The Customer with ID 'Token(invalid-token)' was not found.`,
222
+ },
223
+ ],
224
+ });
225
+ });
226
+
227
+ test("setCustomField", async () => {
177
228
  const response = await supertest(ctMock.app)
178
229
  .post(`/dummy/me`)
179
230
  .send({
180
231
  version: 2,
181
- actions: [{ action: 'setCustomField', name: 'foobar', value: true }],
182
- })
183
- expect(response.status).toBe(200)
184
- expect(response.body.version).toBe(3)
185
- expect(response.body.custom.fields.foobar).toBe(true)
186
- })
187
- })
232
+ actions: [{ action: "setCustomField", name: "foobar", value: true }],
233
+ });
234
+ expect(response.status).toBe(200);
235
+ expect(response.body.version).toBe(3);
236
+ expect(response.body.custom.fields.foobar).toBe(true);
237
+ });
238
+ });