@labdigital/commercetools-mock 1.5.0 → 1.6.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 (129) hide show
  1. package/README.md +5 -4
  2. package/dist/index.cjs +117 -17
  3. package/dist/index.cjs.map +1 -1
  4. package/dist/index.d.cts +30 -7
  5. package/dist/index.d.ts +30 -7
  6. package/dist/index.js +117 -17
  7. package/dist/index.js.map +1 -1
  8. package/package.json +4 -3
  9. package/src/constants.ts +2 -2
  10. package/src/ctMock.ts +176 -176
  11. package/src/exceptions.ts +10 -10
  12. package/src/helpers.ts +26 -26
  13. package/src/index.test.ts +173 -173
  14. package/src/index.ts +3 -3
  15. package/src/lib/expandParser.ts +19 -19
  16. package/src/lib/haversine.test.ts +13 -13
  17. package/src/lib/haversine.ts +14 -14
  18. package/src/lib/masking.ts +15 -15
  19. package/src/lib/parser.ts +2 -2
  20. package/src/lib/predicateParser.test.ts +204 -204
  21. package/src/lib/predicateParser.ts +398 -398
  22. package/src/lib/projectionSearchFilter.test.ts +168 -168
  23. package/src/lib/projectionSearchFilter.ts +272 -269
  24. package/src/lib/proxy.ts +8 -8
  25. package/src/oauth/errors.ts +4 -4
  26. package/src/oauth/helpers.ts +6 -6
  27. package/src/oauth/server.ts +103 -101
  28. package/src/oauth/store.ts +27 -27
  29. package/src/priceSelector.test.ts +68 -68
  30. package/src/priceSelector.ts +70 -70
  31. package/src/product-projection-search.ts +296 -296
  32. package/src/projectAPI.test.ts +3 -3
  33. package/src/projectAPI.ts +46 -46
  34. package/src/repositories/abstract.ts +190 -190
  35. package/src/repositories/associate-role.ts +10 -7
  36. package/src/repositories/attribute-group.ts +63 -8
  37. package/src/repositories/business-unit.ts +10 -7
  38. package/src/repositories/cart-discount.ts +134 -134
  39. package/src/repositories/cart.ts +517 -514
  40. package/src/repositories/category.ts +170 -167
  41. package/src/repositories/channel.ts +114 -111
  42. package/src/repositories/custom-object.ts +66 -63
  43. package/src/repositories/customer-group.ts +72 -69
  44. package/src/repositories/customer.ts +90 -90
  45. package/src/repositories/discount-code.ts +171 -168
  46. package/src/repositories/errors.ts +15 -15
  47. package/src/repositories/extension.ts +79 -76
  48. package/src/repositories/helpers.ts +180 -180
  49. package/src/repositories/index.ts +39 -39
  50. package/src/repositories/inventory-entry.ts +98 -95
  51. package/src/repositories/my-order.ts +11 -11
  52. package/src/repositories/order-edit.ts +29 -29
  53. package/src/repositories/order.test.ts +191 -191
  54. package/src/repositories/order.ts +393 -393
  55. package/src/repositories/payment.ts +155 -155
  56. package/src/repositories/product-discount.ts +149 -149
  57. package/src/repositories/product-projection.ts +135 -50
  58. package/src/repositories/product-selection.ts +31 -31
  59. package/src/repositories/product-type.ts +156 -156
  60. package/src/repositories/product.ts +600 -597
  61. package/src/repositories/project.ts +136 -135
  62. package/src/repositories/quote-request.ts +19 -19
  63. package/src/repositories/quote.ts +19 -19
  64. package/src/repositories/review.ts +24 -24
  65. package/src/repositories/shipping-method.ts +217 -217
  66. package/src/repositories/shopping-list.ts +49 -49
  67. package/src/repositories/staged-quote.ts +20 -20
  68. package/src/repositories/standalone-price.ts +72 -61
  69. package/src/repositories/state.ts +84 -84
  70. package/src/repositories/store.ts +114 -114
  71. package/src/repositories/subscription.ts +40 -40
  72. package/src/repositories/tax-category.ts +98 -98
  73. package/src/repositories/type.ts +157 -157
  74. package/src/repositories/zone.ts +71 -71
  75. package/src/server.ts +2 -2
  76. package/src/services/abstract.ts +173 -173
  77. package/src/services/attribute-group.ts +16 -0
  78. package/src/services/cart-discount.ts +8 -8
  79. package/src/services/cart.test.ts +409 -409
  80. package/src/services/cart.ts +50 -50
  81. package/src/services/category.test.ts +25 -25
  82. package/src/services/category.ts +8 -8
  83. package/src/services/channel.ts +8 -8
  84. package/src/services/custom-object.test.ts +184 -184
  85. package/src/services/custom-object.ts +48 -48
  86. package/src/services/customer-group.ts +8 -8
  87. package/src/services/customer.test.ts +151 -151
  88. package/src/services/customer.ts +27 -27
  89. package/src/services/discount-code.ts +8 -8
  90. package/src/services/extension.ts +8 -8
  91. package/src/services/index.ts +52 -44
  92. package/src/services/inventory-entry.test.ts +162 -162
  93. package/src/services/inventory-entry.ts +8 -8
  94. package/src/services/my-cart.test.ts +78 -78
  95. package/src/services/my-cart.ts +28 -28
  96. package/src/services/my-customer.test.ts +44 -44
  97. package/src/services/my-customer.ts +53 -53
  98. package/src/services/my-order.ts +20 -20
  99. package/src/services/my-payment.test.ts +65 -65
  100. package/src/services/my-payment.ts +8 -8
  101. package/src/services/order.test.ts +527 -527
  102. package/src/services/order.ts +31 -31
  103. package/src/services/payment.test.ts +65 -65
  104. package/src/services/payment.ts +8 -8
  105. package/src/services/product-discount.ts +8 -8
  106. package/src/services/product-projection.test.ts +502 -428
  107. package/src/services/product-projection.ts +32 -18
  108. package/src/services/product-type.test.ts +56 -56
  109. package/src/services/product-type.ts +8 -8
  110. package/src/services/product.test.ts +510 -510
  111. package/src/services/product.ts +8 -8
  112. package/src/services/project.ts +34 -34
  113. package/src/services/shipping-method.test.ts +81 -81
  114. package/src/services/shipping-method.ts +12 -12
  115. package/src/services/shopping-list.ts +8 -8
  116. package/src/services/standalone-price.test.ts +256 -256
  117. package/src/services/standalone-price.ts +8 -8
  118. package/src/services/state.test.ts +42 -42
  119. package/src/services/state.ts +8 -8
  120. package/src/services/store.test.ts +57 -57
  121. package/src/services/store.ts +8 -8
  122. package/src/services/subscription.ts +8 -8
  123. package/src/services/tax-category.test.ts +61 -61
  124. package/src/services/tax-category.ts +8 -8
  125. package/src/services/type.ts +8 -8
  126. package/src/services/zone.ts +8 -8
  127. package/src/storage/abstract.ts +58 -58
  128. package/src/storage/in-memory.ts +419 -419
  129. package/src/types.ts +82 -82
@@ -3,41 +3,41 @@ import { CartRepository } from '../repositories/cart.js'
3
3
  import AbstractService from './abstract.js'
4
4
 
5
5
  export class MyCartService extends AbstractService {
6
- public repository: CartRepository
6
+ public repository: CartRepository
7
7
 
8
- constructor(parent: Router, repository: CartRepository) {
9
- super(parent)
10
- this.repository = repository
11
- }
8
+ constructor(parent: Router, repository: CartRepository) {
9
+ super(parent)
10
+ this.repository = repository
11
+ }
12
12
 
13
- getBasePath() {
14
- return 'me'
15
- }
13
+ getBasePath() {
14
+ return 'me'
15
+ }
16
16
 
17
- registerRoutes(parent: Router) {
18
- // Overwrite this function to be able to handle /me/active-cart path.
19
- const basePath = this.getBasePath()
20
- const router = Router({ mergeParams: true })
17
+ registerRoutes(parent: Router) {
18
+ // Overwrite this function to be able to handle /me/active-cart path.
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)
34
- }
33
+ parent.use(`/${basePath}`, router)
34
+ }
35
35
 
36
- activeCart(request: Request, response: Response) {
37
- const resource = this.repository.getActiveCart(request.params.projectKey)
38
- if (!resource) {
39
- return response.status(404).send('Not found')
40
- }
41
- return response.status(200).send(resource)
42
- }
36
+ activeCart(request: Request, response: Response) {
37
+ const resource = this.repository.getActiveCart(request.params.projectKey)
38
+ if (!resource) {
39
+ return response.status(404).send('Not found')
40
+ }
41
+ return response.status(200).send(resource)
42
+ }
43
43
  }
@@ -6,48 +6,48 @@ import { CommercetoolsMock } from '../index.js'
6
6
  const ctMock = new CommercetoolsMock()
7
7
 
8
8
  describe('Me', () => {
9
- afterEach(() => {
10
- ctMock.clear()
11
- })
12
-
13
- test('Create me', async () => {
14
- const draft: MyCustomerDraft = {
15
- email: 'test@example.org',
16
- password: 'p4ssw0rd',
17
- }
18
-
19
- const response = await supertest(ctMock.app)
20
- .post('/dummy/me/signup')
21
- .send(draft)
22
-
23
- expect(response.status).toBe(201)
24
- expect(response.body).toEqual({
25
- customer: {
26
- ...draft,
27
- password: 'cDRzc3cwcmQ=',
28
- authenticationMode: 'Password',
29
- version: 1,
30
- isEmailVerified: false,
31
- addresses: [],
32
- id: expect.anything(),
33
- createdAt: expect.anything(),
34
- lastModifiedAt: expect.anything(),
35
- }
36
- })
37
- })
38
-
39
- test('Get me', async () => {
40
- const draft: MyCustomerDraft = {
41
- email: 'test@example.org',
42
- password: 'p4ssw0rd',
43
- }
44
- const createResponse = await supertest(ctMock.app)
45
- .post('/dummy/me/signup')
46
- .send(draft)
47
-
48
- const response = await supertest(ctMock.app).get(`/dummy/me`)
49
-
50
- expect(response.status).toBe(200)
51
- expect(response.body).toEqual(createResponse.body.customer)
52
- })
9
+ afterEach(() => {
10
+ ctMock.clear()
11
+ })
12
+
13
+ test('Create me', async () => {
14
+ const draft: MyCustomerDraft = {
15
+ email: 'test@example.org',
16
+ password: 'p4ssw0rd',
17
+ }
18
+
19
+ const response = await supertest(ctMock.app)
20
+ .post('/dummy/me/signup')
21
+ .send(draft)
22
+
23
+ expect(response.status).toBe(201)
24
+ expect(response.body).toEqual({
25
+ customer: {
26
+ ...draft,
27
+ password: 'cDRzc3cwcmQ=',
28
+ authenticationMode: 'Password',
29
+ version: 1,
30
+ isEmailVerified: false,
31
+ addresses: [],
32
+ id: expect.anything(),
33
+ createdAt: expect.anything(),
34
+ lastModifiedAt: expect.anything(),
35
+ },
36
+ })
37
+ })
38
+
39
+ test('Get me', async () => {
40
+ const draft: MyCustomerDraft = {
41
+ email: 'test@example.org',
42
+ password: 'p4ssw0rd',
43
+ }
44
+ const createResponse = await supertest(ctMock.app)
45
+ .post('/dummy/me/signup')
46
+ .send(draft)
47
+
48
+ const response = await supertest(ctMock.app).get(`/dummy/me`)
49
+
50
+ expect(response.status).toBe(200)
51
+ expect(response.body).toEqual(createResponse.body.customer)
52
+ })
53
53
  })
@@ -4,71 +4,71 @@ import { getRepositoryContext } from '../repositories/helpers.js'
4
4
  import AbstractService from './abstract.js'
5
5
 
6
6
  export class MyCustomerService extends AbstractService {
7
- public repository: CustomerRepository
7
+ public repository: CustomerRepository
8
8
 
9
- constructor(parent: Router, repository: CustomerRepository) {
10
- super(parent)
11
- this.repository = repository
12
- }
9
+ constructor(parent: Router, repository: CustomerRepository) {
10
+ super(parent)
11
+ this.repository = repository
12
+ }
13
13
 
14
- getBasePath() {
15
- return 'me'
16
- }
14
+ getBasePath() {
15
+ return 'me'
16
+ }
17
17
 
18
- registerRoutes(parent: Router) {
19
- // Overwrite this function to be able to handle /me path.
20
- const basePath = this.getBasePath()
21
- const router = Router({ mergeParams: true })
18
+ registerRoutes(parent: Router) {
19
+ // Overwrite this function to be able to handle /me path.
20
+ const basePath = this.getBasePath()
21
+ const router = Router({ mergeParams: true })
22
22
 
23
- this.extraRoutes(router)
23
+ this.extraRoutes(router)
24
24
 
25
- router.get('', this.getMe.bind(this))
25
+ router.get('', this.getMe.bind(this))
26
26
 
27
- router.post('/signup', this.signUp.bind(this))
27
+ router.post('/signup', this.signUp.bind(this))
28
28
 
29
- router.post('/login', this.signIn.bind(this))
29
+ router.post('/login', this.signIn.bind(this))
30
30
 
31
- parent.use(`/${basePath}`, router)
32
- }
31
+ parent.use(`/${basePath}`, router)
32
+ }
33
33
 
34
- getMe(request: Request, response: Response) {
35
- const resource = this.repository.getMe(getRepositoryContext(request))
36
- if (!resource) {
37
- return response.status(404).send('Not found')
38
- }
39
- return response.status(200).send(resource)
40
- }
34
+ getMe(request: Request, response: Response) {
35
+ const resource = this.repository.getMe(getRepositoryContext(request))
36
+ if (!resource) {
37
+ return response.status(404).send('Not found')
38
+ }
39
+ return response.status(200).send(resource)
40
+ }
41
41
 
42
- signUp(request: Request, response: Response) {
43
- const draft = request.body
44
- const resource = this.repository.create(
45
- getRepositoryContext(request),
46
- draft
47
- )
48
- const result = this._expandWithId(request, resource.id)
49
- return response.status(this.createStatusCode).send({ customer: result })
50
- }
42
+ signUp(request: Request, response: Response) {
43
+ const draft = request.body
44
+ const resource = this.repository.create(
45
+ getRepositoryContext(request),
46
+ draft
47
+ )
48
+ const result = this._expandWithId(request, resource.id)
49
+ return response.status(this.createStatusCode).send({ customer: result })
50
+ }
51
51
 
52
- signIn(request: Request, response: Response) {
53
- const { email, password } = request.body
54
- const encodedPassword = Buffer.from(password).toString('base64')
52
+ signIn(request: Request, response: Response) {
53
+ const { email, password } = request.body
54
+ const encodedPassword = Buffer.from(password).toString('base64')
55
55
 
56
- const result = this.repository.query(getRepositoryContext(request), {
57
- where: [`email = "${email}"`, `password = "${encodedPassword}"`],
58
- })
56
+ const result = this.repository.query(getRepositoryContext(request), {
57
+ where: [`email = "${email}"`, `password = "${encodedPassword}"`],
58
+ })
59
59
 
60
- if (result.count === 0) {
61
- return response.status(400).send({
62
- message: 'Account with the given credentials not found.',
63
- errors: [
64
- {
65
- code: 'InvalidCredentials',
66
- message: 'Account with the given credentials not found.',
67
- },
68
- ],
69
- })
70
- }
60
+ if (result.count === 0) {
61
+ return response.status(400).send({
62
+ message: 'Account with the given credentials not found.',
63
+ errors: [
64
+ {
65
+ code: 'InvalidCredentials',
66
+ message: 'Account with the given credentials not found.',
67
+ },
68
+ ],
69
+ })
70
+ }
71
71
 
72
- return response.status(200).send({ customer: result.results[0] })
73
- }
72
+ return response.status(200).send({ customer: result.results[0] })
73
+ }
74
74
  }
@@ -3,32 +3,32 @@ import { MyOrderRepository } from '../repositories/my-order.js'
3
3
  import AbstractService from './abstract.js'
4
4
 
5
5
  export class MyOrderService extends AbstractService {
6
- public repository: MyOrderRepository
6
+ public repository: MyOrderRepository
7
7
 
8
- constructor(parent: Router, repository: MyOrderRepository) {
9
- super(parent)
10
- this.repository = repository
11
- }
8
+ constructor(parent: Router, repository: MyOrderRepository) {
9
+ super(parent)
10
+ this.repository = repository
11
+ }
12
12
 
13
- getBasePath() {
14
- return 'me'
15
- }
13
+ getBasePath() {
14
+ return 'me'
15
+ }
16
16
 
17
- registerRoutes(parent: Router) {
18
- // Overwrite this function to be able to handle /me/active-cart path.
19
- const basePath = this.getBasePath()
20
- const router = Router({ mergeParams: true })
17
+ registerRoutes(parent: Router) {
18
+ // Overwrite this function to be able to handle /me/active-cart path.
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('/orders/', this.get.bind(this))
25
- router.get('/orders/:id', this.getWithId.bind(this))
24
+ router.get('/orders/', this.get.bind(this))
25
+ router.get('/orders/:id', this.getWithId.bind(this))
26
26
 
27
- router.delete('/orders/:id', this.deleteWithId.bind(this))
27
+ router.delete('/orders/:id', this.deleteWithId.bind(this))
28
28
 
29
- router.post('/orders/', this.post.bind(this))
30
- router.post('/orders/:id', this.postWithId.bind(this))
29
+ router.post('/orders/', this.post.bind(this))
30
+ router.post('/orders/:id', this.postWithId.bind(this))
31
31
 
32
- parent.use(`/${basePath}`, router)
33
- }
32
+ parent.use(`/${basePath}`, router)
33
+ }
34
34
  }
@@ -6,73 +6,73 @@ import { CommercetoolsMock } from '../index.js'
6
6
  const ctMock = new CommercetoolsMock()
7
7
 
8
8
  describe('MyPayment', () => {
9
- 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)
20
- })
9
+ 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)
20
+ })
21
21
 
22
- test('Create payment', async () => {
23
- const draft: MyPaymentDraft = {
24
- amountPlanned: { currencyCode: 'EUR', centAmount: 1337 },
25
- custom: {
26
- type: { typeId: 'type', key: 'custom-payment' },
27
- fields: {
28
- foo: 'bar',
29
- },
30
- },
31
- }
32
- const response = await supertest(ctMock.app)
33
- .post('/dummy/me/payments')
34
- .send(draft)
22
+ test('Create payment', async () => {
23
+ const draft: MyPaymentDraft = {
24
+ amountPlanned: { currencyCode: 'EUR', centAmount: 1337 },
25
+ custom: {
26
+ type: { typeId: 'type', key: 'custom-payment' },
27
+ fields: {
28
+ foo: 'bar',
29
+ },
30
+ },
31
+ }
32
+ const response = await supertest(ctMock.app)
33
+ .post('/dummy/me/payments')
34
+ .send(draft)
35
35
 
36
- expect(response.status).toBe(201)
37
- expect(response.body).toEqual({
38
- id: expect.anything(),
39
- createdAt: expect.anything(),
40
- lastModifiedAt: expect.anything(),
41
- version: 1,
42
- amountPlanned: {
43
- type: 'centPrecision',
44
- fractionDigits: 2,
45
- currencyCode: 'EUR',
46
- centAmount: 1337,
47
- },
48
- paymentStatus: {},
49
- transactions: [],
50
- interfaceInteractions: [],
51
- custom: {
52
- type: { typeId: 'type', id: expect.anything() },
53
- fields: { foo: 'bar' },
54
- },
55
- })
56
- })
57
- test('Get payment', async () => {
58
- const draft: MyPaymentDraft = {
59
- amountPlanned: { currencyCode: 'EUR', centAmount: 1337 },
60
- custom: {
61
- type: { typeId: 'type', key: 'custom-payment' },
62
- fields: {
63
- foo: 'bar',
64
- },
65
- },
66
- }
67
- const createResponse = await supertest(ctMock.app)
68
- .post('/dummy/me/payments')
69
- .send(draft)
36
+ expect(response.status).toBe(201)
37
+ expect(response.body).toEqual({
38
+ id: expect.anything(),
39
+ createdAt: expect.anything(),
40
+ lastModifiedAt: expect.anything(),
41
+ version: 1,
42
+ amountPlanned: {
43
+ type: 'centPrecision',
44
+ fractionDigits: 2,
45
+ currencyCode: 'EUR',
46
+ centAmount: 1337,
47
+ },
48
+ paymentStatus: {},
49
+ transactions: [],
50
+ interfaceInteractions: [],
51
+ custom: {
52
+ type: { typeId: 'type', id: expect.anything() },
53
+ fields: { foo: 'bar' },
54
+ },
55
+ })
56
+ })
57
+ test('Get payment', async () => {
58
+ const draft: MyPaymentDraft = {
59
+ amountPlanned: { currencyCode: 'EUR', centAmount: 1337 },
60
+ custom: {
61
+ type: { typeId: 'type', key: 'custom-payment' },
62
+ fields: {
63
+ foo: 'bar',
64
+ },
65
+ },
66
+ }
67
+ const createResponse = await supertest(ctMock.app)
68
+ .post('/dummy/me/payments')
69
+ .send(draft)
70
70
 
71
- const response = await supertest(ctMock.app).get(
72
- `/dummy/me/payments/${createResponse.body.id}`
73
- )
71
+ const response = await supertest(ctMock.app).get(
72
+ `/dummy/me/payments/${createResponse.body.id}`
73
+ )
74
74
 
75
- expect(response.status).toBe(200)
76
- expect(response.body).toEqual(createResponse.body)
77
- })
75
+ expect(response.status).toBe(200)
76
+ expect(response.body).toEqual(createResponse.body)
77
+ })
78
78
  })
@@ -3,14 +3,14 @@ import { PaymentRepository } from '../repositories/payment.js'
3
3
  import AbstractService from './abstract.js'
4
4
 
5
5
  export class MyPaymentService extends AbstractService {
6
- public repository: PaymentRepository
6
+ public repository: PaymentRepository
7
7
 
8
- constructor(parent: Router, repository: PaymentRepository) {
9
- super(parent)
10
- this.repository = repository
11
- }
8
+ constructor(parent: Router, repository: PaymentRepository) {
9
+ super(parent)
10
+ this.repository = repository
11
+ }
12
12
 
13
- getBasePath() {
14
- return 'me/payments'
15
- }
13
+ getBasePath() {
14
+ return 'me/payments'
15
+ }
16
16
  }