@labdigital/commercetools-mock 2.17.1 → 2.18.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 (178) hide show
  1. package/dist/index.cjs +4186 -3974
  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 +4186 -3974
  6. package/dist/index.js.map +1 -1
  7. package/package.json +44 -46
  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/server.ts +9 -9
  98. package/src/services/abstract.ts +75 -72
  99. package/src/services/associate-roles.test.ts +27 -27
  100. package/src/services/associate-roles.ts +7 -7
  101. package/src/services/attribute-group.ts +7 -7
  102. package/src/services/business-units.test.ts +28 -28
  103. package/src/services/business-units.ts +7 -7
  104. package/src/services/cart-discount.test.ts +199 -199
  105. package/src/services/cart-discount.ts +7 -7
  106. package/src/services/cart.test.ts +261 -261
  107. package/src/services/cart.ts +22 -21
  108. package/src/services/category.test.ts +121 -121
  109. package/src/services/category.ts +7 -7
  110. package/src/services/channel.ts +7 -7
  111. package/src/services/custom-object.test.ts +130 -130
  112. package/src/services/custom-object.ts +34 -31
  113. package/src/services/customer-group.ts +7 -7
  114. package/src/services/customer.test.ts +205 -205
  115. package/src/services/customer.ts +23 -36
  116. package/src/services/discount-code.ts +7 -7
  117. package/src/services/extension.ts +7 -7
  118. package/src/services/index.ts +85 -81
  119. package/src/services/inventory-entry.test.ts +106 -106
  120. package/src/services/inventory-entry.ts +7 -7
  121. package/src/services/my-cart.test.ts +56 -56
  122. package/src/services/my-cart.ts +20 -20
  123. package/src/services/my-customer.test.ts +155 -104
  124. package/src/services/my-customer.ts +61 -75
  125. package/src/services/my-order.ts +16 -16
  126. package/src/services/my-payment.test.ts +40 -40
  127. package/src/services/my-payment.ts +7 -7
  128. package/src/services/my-shopping-list.ts +7 -7
  129. package/src/services/order.test.ts +243 -243
  130. package/src/services/order.ts +23 -18
  131. package/src/services/payment.test.ts +40 -40
  132. package/src/services/payment.ts +7 -7
  133. package/src/services/product-discount.ts +7 -7
  134. package/src/services/product-projection.test.ts +190 -190
  135. package/src/services/product-projection.ts +34 -32
  136. package/src/services/product-selection.test.ts +19 -19
  137. package/src/services/product-selection.ts +7 -7
  138. package/src/services/product-type.test.ts +38 -38
  139. package/src/services/product-type.ts +7 -7
  140. package/src/services/product.test.ts +658 -656
  141. package/src/services/product.ts +7 -7
  142. package/src/services/project.test.ts +24 -24
  143. package/src/services/project.ts +17 -17
  144. package/src/services/reviews.ts +7 -7
  145. package/src/services/shipping-method.test.ts +78 -78
  146. package/src/services/shipping-method.ts +16 -16
  147. package/src/services/shopping-list.test.ts +170 -170
  148. package/src/services/shopping-list.ts +7 -7
  149. package/src/services/standalone-price.test.ts +112 -112
  150. package/src/services/standalone-price.ts +7 -7
  151. package/src/services/state.test.ts +30 -30
  152. package/src/services/state.ts +7 -7
  153. package/src/services/store.test.ts +40 -40
  154. package/src/services/store.ts +7 -7
  155. package/src/services/subscription.ts +7 -7
  156. package/src/services/tax-category.test.ts +43 -43
  157. package/src/services/tax-category.ts +7 -7
  158. package/src/services/type.ts +7 -7
  159. package/src/services/zone.ts +7 -7
  160. package/src/shippingCalculator.test.ts +43 -43
  161. package/src/shippingCalculator.ts +23 -23
  162. package/src/storage/abstract.ts +36 -34
  163. package/src/storage/in-memory.ts +237 -233
  164. package/src/storage/index.ts +2 -2
  165. package/src/types.ts +91 -91
  166. package/src/repositories/cart-discount.ts +0 -219
  167. package/src/repositories/cart.ts +0 -659
  168. package/src/repositories/category.ts +0 -256
  169. package/src/repositories/customer.ts +0 -228
  170. package/src/repositories/discount-code.ts +0 -181
  171. package/src/repositories/inventory-entry.ts +0 -109
  172. package/src/repositories/order.ts +0 -514
  173. package/src/repositories/payment.ts +0 -342
  174. package/src/repositories/product.ts +0 -1106
  175. package/src/repositories/shipping-method.ts +0 -312
  176. package/src/repositories/shopping-list.ts +0 -392
  177. package/src/repositories/tax-category.ts +0 -111
  178. 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
+ });