@labdigital/commercetools-mock 1.5.0 → 1.6.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 (129) hide show
  1. package/README.md +5 -4
  2. package/dist/index.cjs +105 -17
  3. package/dist/index.cjs.map +1 -1
  4. package/dist/index.d.cts +29 -7
  5. package/dist/index.d.ts +29 -7
  6. package/dist/index.js +105 -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 +116 -52
  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 +492 -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
@@ -6,54 +6,54 @@ import type { OrderRepository } from '../repositories/order.js'
6
6
  import AbstractService from './abstract.js'
7
7
 
8
8
  export class CartService extends AbstractService {
9
- public repository: CartRepository
10
- public orderRepository: OrderRepository
11
-
12
- constructor(
13
- parent: Router,
14
- cartRepository: CartRepository,
15
- orderRepository: OrderRepository
16
- ) {
17
- super(parent)
18
- this.repository = cartRepository
19
- this.orderRepository = orderRepository
20
- }
21
-
22
- getBasePath() {
23
- return 'carts'
24
- }
25
-
26
- extraRoutes(parent: Router) {
27
- parent.post('/replicate', this.replicate.bind(this))
28
- }
29
-
30
- replicate(request: Request, response: Response) {
31
- const context = getRepositoryContext(request)
32
-
33
- // @ts-ignore
34
- const cartOrOrder: Cart | Order | null =
35
- request.body.reference.typeId === 'order'
36
- ? this.orderRepository.get(context, request.body.reference.id)
37
- : this.repository.get(context, request.body.reference.id)
38
-
39
- if (!cartOrOrder) {
40
- return response.status(400).send()
41
- }
42
-
43
- const cartDraft: CartDraft = {
44
- ...cartOrOrder,
45
- currency: cartOrOrder.totalPrice.currencyCode,
46
- discountCodes: [],
47
- shipping: [], // TODO: cartOrOrder.shipping,
48
- lineItems: cartOrOrder.lineItems.map((lineItem) => ({
49
- ...lineItem,
50
- variantId: lineItem.variant.id,
51
- sku: lineItem.variant.sku,
52
- })),
53
- }
54
-
55
- const newCart = this.repository.create(context, cartDraft)
56
-
57
- return response.status(200).send(newCart)
58
- }
9
+ public repository: CartRepository
10
+ public orderRepository: OrderRepository
11
+
12
+ constructor(
13
+ parent: Router,
14
+ cartRepository: CartRepository,
15
+ orderRepository: OrderRepository
16
+ ) {
17
+ super(parent)
18
+ this.repository = cartRepository
19
+ this.orderRepository = orderRepository
20
+ }
21
+
22
+ getBasePath() {
23
+ return 'carts'
24
+ }
25
+
26
+ extraRoutes(parent: Router) {
27
+ parent.post('/replicate', this.replicate.bind(this))
28
+ }
29
+
30
+ replicate(request: Request, response: Response) {
31
+ const context = getRepositoryContext(request)
32
+
33
+ // @ts-ignore
34
+ const cartOrOrder: Cart | Order | null =
35
+ request.body.reference.typeId === 'order'
36
+ ? this.orderRepository.get(context, request.body.reference.id)
37
+ : this.repository.get(context, request.body.reference.id)
38
+
39
+ if (!cartOrOrder) {
40
+ return response.status(400).send()
41
+ }
42
+
43
+ const cartDraft: CartDraft = {
44
+ ...cartOrOrder,
45
+ currency: cartOrOrder.totalPrice.currencyCode,
46
+ discountCodes: [],
47
+ shipping: [], // TODO: cartOrOrder.shipping,
48
+ lineItems: cartOrOrder.lineItems.map((lineItem) => ({
49
+ ...lineItem,
50
+ variantId: lineItem.variant.id,
51
+ sku: lineItem.variant.sku,
52
+ })),
53
+ }
54
+
55
+ const newCart = this.repository.create(context, cartDraft)
56
+
57
+ return response.status(200).send(newCart)
58
+ }
59
59
  }
@@ -4,34 +4,34 @@ import { beforeEach, describe, expect, test } from 'vitest'
4
4
  import { CommercetoolsMock } from '../index.js'
5
5
 
6
6
  describe('Categories Query', () => {
7
- const ctMock = new CommercetoolsMock()
7
+ const ctMock = new CommercetoolsMock()
8
8
 
9
- beforeEach(async () => {
10
- const response = await supertest(ctMock.app)
11
- .post('/dummy/categories')
12
- .send({
13
- name: {
14
- en: 'Top hat',
15
- },
16
- slug: {
17
- en: 'top-hat',
18
- },
19
- orderHint: '0.1',
20
- })
21
- expect(response.status).toBe(201)
22
- })
9
+ beforeEach(async () => {
10
+ const response = await supertest(ctMock.app)
11
+ .post('/dummy/categories')
12
+ .send({
13
+ name: {
14
+ en: 'Top hat',
15
+ },
16
+ slug: {
17
+ en: 'top-hat',
18
+ },
19
+ orderHint: '0.1',
20
+ })
21
+ expect(response.status).toBe(201)
22
+ })
23
23
 
24
- test('no filter', async () => {
25
- const response = await supertest(ctMock.app)
26
- .get('/dummy/categories')
27
- .query({})
28
- .send()
24
+ test('no filter', async () => {
25
+ const response = await supertest(ctMock.app)
26
+ .get('/dummy/categories')
27
+ .query({})
28
+ .send()
29
29
 
30
- expect(response.status).toBe(200)
31
- expect(response.body.count).toBe(1)
30
+ expect(response.status).toBe(200)
31
+ expect(response.body.count).toBe(1)
32
32
 
33
- const category = response.body.results[0] as Category
33
+ const category = response.body.results[0] as Category
34
34
 
35
- expect(category.name.en).toBe('Top hat')
36
- })
35
+ expect(category.name.en).toBe('Top hat')
36
+ })
37
37
  })
@@ -3,14 +3,14 @@ import { CategoryRepository } from '../repositories/category.js'
3
3
  import AbstractService from './abstract.js'
4
4
 
5
5
  export class CategoryServices extends AbstractService {
6
- public repository: CategoryRepository
6
+ public repository: CategoryRepository
7
7
 
8
- constructor(parent: Router, repository: CategoryRepository) {
9
- super(parent)
10
- this.repository = repository
11
- }
8
+ constructor(parent: Router, repository: CategoryRepository) {
9
+ super(parent)
10
+ this.repository = repository
11
+ }
12
12
 
13
- getBasePath() {
14
- return 'categories'
15
- }
13
+ getBasePath() {
14
+ return 'categories'
15
+ }
16
16
  }
@@ -3,14 +3,14 @@ import { ChannelRepository } from '../repositories/channel.js'
3
3
  import AbstractService from './abstract.js'
4
4
 
5
5
  export class ChannelService extends AbstractService {
6
- public repository: ChannelRepository
6
+ public repository: ChannelRepository
7
7
 
8
- constructor(parent: Router, repository: ChannelRepository) {
9
- super(parent)
10
- this.repository = repository
11
- }
8
+ constructor(parent: Router, repository: ChannelRepository) {
9
+ super(parent)
10
+ this.repository = repository
11
+ }
12
12
 
13
- getBasePath() {
14
- return 'channels'
15
- }
13
+ getBasePath() {
14
+ return 'channels'
15
+ }
16
16
  }
@@ -5,191 +5,191 @@ import { afterEach, beforeEach, describe, expect, test } from 'vitest'
5
5
  import { CommercetoolsMock } from '../index.js'
6
6
 
7
7
  describe('CustomObject create', () => {
8
- const ctMock = new CommercetoolsMock()
9
-
10
- test('Create new object', async () => {
11
- const response = await supertest(ctMock.app)
12
- .post('/dummy/custom-objects')
13
- .send({
14
- container: 'my-container',
15
- key: 'my-key',
16
- value: 'my-value',
17
- })
18
-
19
- expect(response.status).toBe(201)
20
- const customObject = response.body
21
- expect(customObject.container).toBe('my-container')
22
- expect(customObject.key).toBe('my-key')
23
- expect(customObject.value).toBe('my-value')
24
- })
8
+ const ctMock = new CommercetoolsMock()
9
+
10
+ test('Create new object', async () => {
11
+ const response = await supertest(ctMock.app)
12
+ .post('/dummy/custom-objects')
13
+ .send({
14
+ container: 'my-container',
15
+ key: 'my-key',
16
+ value: 'my-value',
17
+ })
18
+
19
+ expect(response.status).toBe(201)
20
+ const customObject = response.body
21
+ expect(customObject.container).toBe('my-container')
22
+ expect(customObject.key).toBe('my-key')
23
+ expect(customObject.value).toBe('my-value')
24
+ })
25
25
  })
26
26
 
27
27
  describe('CustomObject retrieve', () => {
28
- const ctMock = new CommercetoolsMock()
29
- let customObject: CustomObject
30
-
31
- beforeEach(async () => {
32
- const response = await supertest(ctMock.app)
33
- .post('/dummy/custom-objects')
34
- .send({
35
- container: 'my-container',
36
- key: 'my-key',
37
- value: 'my-value',
38
- })
39
-
40
- expect(response.status).toBe(201)
41
- customObject = response.body
42
- expect(customObject.container).toBe('my-container')
43
- expect(customObject.key).toBe('my-key')
44
- expect(customObject.value).toBe('my-value')
45
- })
46
- afterEach(async () => {
47
- ctMock.clear()
48
- })
49
-
50
- test('createget', async () => {
51
- const response = await supertest(ctMock.app)
52
- .get('/dummy/custom-objects/my-container/my-key')
53
- .send()
54
-
55
- expect(response.status).toBe(200)
56
- const customObject = response.body
57
- expect(customObject.container).toBe('my-container')
58
- expect(customObject.key).toBe('my-key')
59
- expect(customObject.value).toBe('my-value')
60
- })
61
-
62
- test('Update match current (no conflict)', async () => {
63
- const response = await supertest(ctMock.app)
64
- .post('/dummy/custom-objects')
65
- .send({
66
- container: 'my-container',
67
- key: 'my-key',
68
- value: 'my-value',
69
- })
70
-
71
- expect(response.status).toBe(201)
72
- })
73
-
74
- test('New with version (errors)', async () => {
75
- const response = await supertest(ctMock.app)
76
- .post('/dummy/custom-objects')
77
- .send({
78
- container: 'my-new-container',
79
- key: 'my-new-key',
80
- value: 'my-value',
81
- version: 2,
82
- })
83
-
84
- expect(response.status).toBe(400)
85
- expect(response.body).toStrictEqual({
86
- statusCode: 400,
87
- message: 'version on create must be 0',
88
- errors: [
89
- {
90
- code: 'InvalidOperation',
91
- message: 'version on create must be 0',
92
- },
93
- ],
94
- })
95
- })
96
-
97
- test('Update match current with version (conflict)', async () => {
98
- const response = await supertest(ctMock.app)
99
- .post('/dummy/custom-objects')
100
- .send({
101
- container: 'my-container',
102
- key: 'my-key',
103
- value: 'my-value',
104
- version: 2,
105
- })
106
-
107
- expect(response.status).toBe(409)
108
- expect(response.body).toStrictEqual({
109
- statusCode: 409,
110
- message: `Object ${customObject.id} has a different version than expected. Expected: 2 - Actual: 1.`,
111
- errors: [
112
- {
113
- code: 'ConcurrentModification',
114
- currentVersion: 1,
115
- message: `Object ${customObject.id} has a different version than expected. Expected: 2 - Actual: 1.`,
116
- },
117
- ],
118
- })
119
- })
120
-
121
- test('can use the add function with the custom object name', async () => {
122
- ctMock.project('dummy').add('key-value-document', {
123
- ...getBaseResourceProperties(),
124
- container: 'my-container',
125
- key: 'my-key',
126
- value: 'my-value',
127
- version: 2,
128
- })
129
-
130
- const response = await supertest(ctMock.app)
131
- .get('/dummy/custom-objects/my-container/my-key')
132
- .send()
133
-
134
- expect(response.status).toEqual(200)
135
- expect(response.body).toEqual({
136
- container: 'my-container',
137
- createdAt: expect.anything(),
138
- id: expect.anything(),
139
- key: 'my-key',
140
- lastModifiedAt: expect.anything(),
141
- value: 'my-value',
142
- version: 1,
143
- })
144
- })
145
-
146
- test('update with container and key', async () => {
147
- ctMock.project('dummy').add('key-value-document', {
148
- ...getBaseResourceProperties(),
149
- container: 'my-other-container',
150
- key: 'my-key',
151
- value: 'my-value',
152
- version: 2,
153
- })
154
-
155
- const response = await supertest(ctMock.app)
156
- .post('/dummy/custom-objects/my-other-container/my-key')
157
- .send({
158
- value: 'new-value',
159
- })
160
-
161
- expect(response.status).toEqual(200)
162
- expect(response.body).toEqual({
163
- container: 'my-other-container',
164
- createdAt: expect.anything(),
165
- id: expect.anything(),
166
- key: 'my-key',
167
- lastModifiedAt: expect.anything(),
168
- value: 'new-value',
169
- version: 3,
170
- })
171
- })
172
-
173
- test('delete with container and key', async () => {
174
- const response = await supertest(ctMock.app)
175
- .delete('/dummy/custom-objects/my-container/my-key')
176
- .send()
177
-
178
- expect(response.status).toEqual(200)
179
- expect(response.body).toEqual({
180
- container: 'my-container',
181
- createdAt: expect.anything(),
182
- id: expect.anything(),
183
- key: 'my-key',
184
- lastModifiedAt: expect.anything(),
185
- value: 'my-value',
186
- version: 1,
187
- })
188
-
189
- const fetchRes = await supertest(ctMock.app)
190
- .get('/dummy/custom-objects/my-container/my-key')
191
- .send()
192
-
193
- expect(fetchRes.status).toEqual(404)
194
- })
28
+ const ctMock = new CommercetoolsMock()
29
+ let customObject: CustomObject
30
+
31
+ beforeEach(async () => {
32
+ const response = await supertest(ctMock.app)
33
+ .post('/dummy/custom-objects')
34
+ .send({
35
+ container: 'my-container',
36
+ key: 'my-key',
37
+ value: 'my-value',
38
+ })
39
+
40
+ expect(response.status).toBe(201)
41
+ customObject = response.body
42
+ expect(customObject.container).toBe('my-container')
43
+ expect(customObject.key).toBe('my-key')
44
+ expect(customObject.value).toBe('my-value')
45
+ })
46
+ afterEach(async () => {
47
+ ctMock.clear()
48
+ })
49
+
50
+ test('createget', async () => {
51
+ const response = await supertest(ctMock.app)
52
+ .get('/dummy/custom-objects/my-container/my-key')
53
+ .send()
54
+
55
+ expect(response.status).toBe(200)
56
+ const customObject = response.body
57
+ expect(customObject.container).toBe('my-container')
58
+ expect(customObject.key).toBe('my-key')
59
+ expect(customObject.value).toBe('my-value')
60
+ })
61
+
62
+ test('Update match current (no conflict)', async () => {
63
+ const response = await supertest(ctMock.app)
64
+ .post('/dummy/custom-objects')
65
+ .send({
66
+ container: 'my-container',
67
+ key: 'my-key',
68
+ value: 'my-value',
69
+ })
70
+
71
+ expect(response.status).toBe(201)
72
+ })
73
+
74
+ test('New with version (errors)', async () => {
75
+ const response = await supertest(ctMock.app)
76
+ .post('/dummy/custom-objects')
77
+ .send({
78
+ container: 'my-new-container',
79
+ key: 'my-new-key',
80
+ value: 'my-value',
81
+ version: 2,
82
+ })
83
+
84
+ expect(response.status).toBe(400)
85
+ expect(response.body).toStrictEqual({
86
+ statusCode: 400,
87
+ message: 'version on create must be 0',
88
+ errors: [
89
+ {
90
+ code: 'InvalidOperation',
91
+ message: 'version on create must be 0',
92
+ },
93
+ ],
94
+ })
95
+ })
96
+
97
+ test('Update match current with version (conflict)', async () => {
98
+ const response = await supertest(ctMock.app)
99
+ .post('/dummy/custom-objects')
100
+ .send({
101
+ container: 'my-container',
102
+ key: 'my-key',
103
+ value: 'my-value',
104
+ version: 2,
105
+ })
106
+
107
+ expect(response.status).toBe(409)
108
+ expect(response.body).toStrictEqual({
109
+ statusCode: 409,
110
+ message: `Object ${customObject.id} has a different version than expected. Expected: 2 - Actual: 1.`,
111
+ errors: [
112
+ {
113
+ code: 'ConcurrentModification',
114
+ currentVersion: 1,
115
+ message: `Object ${customObject.id} has a different version than expected. Expected: 2 - Actual: 1.`,
116
+ },
117
+ ],
118
+ })
119
+ })
120
+
121
+ test('can use the add function with the custom object name', async () => {
122
+ ctMock.project('dummy').add('key-value-document', {
123
+ ...getBaseResourceProperties(),
124
+ container: 'my-container',
125
+ key: 'my-key',
126
+ value: 'my-value',
127
+ version: 2,
128
+ })
129
+
130
+ const response = await supertest(ctMock.app)
131
+ .get('/dummy/custom-objects/my-container/my-key')
132
+ .send()
133
+
134
+ expect(response.status).toEqual(200)
135
+ expect(response.body).toEqual({
136
+ container: 'my-container',
137
+ createdAt: expect.anything(),
138
+ id: expect.anything(),
139
+ key: 'my-key',
140
+ lastModifiedAt: expect.anything(),
141
+ value: 'my-value',
142
+ version: 1,
143
+ })
144
+ })
145
+
146
+ test('update with container and key', async () => {
147
+ ctMock.project('dummy').add('key-value-document', {
148
+ ...getBaseResourceProperties(),
149
+ container: 'my-other-container',
150
+ key: 'my-key',
151
+ value: 'my-value',
152
+ version: 2,
153
+ })
154
+
155
+ const response = await supertest(ctMock.app)
156
+ .post('/dummy/custom-objects/my-other-container/my-key')
157
+ .send({
158
+ value: 'new-value',
159
+ })
160
+
161
+ expect(response.status).toEqual(200)
162
+ expect(response.body).toEqual({
163
+ container: 'my-other-container',
164
+ createdAt: expect.anything(),
165
+ id: expect.anything(),
166
+ key: 'my-key',
167
+ lastModifiedAt: expect.anything(),
168
+ value: 'new-value',
169
+ version: 3,
170
+ })
171
+ })
172
+
173
+ test('delete with container and key', async () => {
174
+ const response = await supertest(ctMock.app)
175
+ .delete('/dummy/custom-objects/my-container/my-key')
176
+ .send()
177
+
178
+ expect(response.status).toEqual(200)
179
+ expect(response.body).toEqual({
180
+ container: 'my-container',
181
+ createdAt: expect.anything(),
182
+ id: expect.anything(),
183
+ key: 'my-key',
184
+ lastModifiedAt: expect.anything(),
185
+ value: 'my-value',
186
+ version: 1,
187
+ })
188
+
189
+ const fetchRes = await supertest(ctMock.app)
190
+ .get('/dummy/custom-objects/my-container/my-key')
191
+ .send()
192
+
193
+ expect(fetchRes.status).toEqual(404)
194
+ })
195
195
  })