@labdigital/commercetools-mock 0.5.11 → 0.5.14

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 (115) hide show
  1. package/README.md +30 -12
  2. package/dist/commercetools-mock.cjs.development.js +3190 -1574
  3. package/dist/commercetools-mock.cjs.development.js.map +1 -1
  4. package/dist/commercetools-mock.cjs.production.min.js +1 -1
  5. package/dist/commercetools-mock.cjs.production.min.js.map +1 -1
  6. package/dist/commercetools-mock.esm.js +3190 -1574
  7. package/dist/commercetools-mock.esm.js.map +1 -1
  8. package/dist/ctMock.d.ts +1 -0
  9. package/dist/lib/filterParser.d.ts +1 -0
  10. package/dist/repositories/abstract.d.ts +11 -7
  11. package/dist/repositories/cart-discount.d.ts +9 -0
  12. package/dist/repositories/cart.d.ts +16 -3
  13. package/dist/repositories/category.d.ts +18 -0
  14. package/dist/repositories/channel.d.ts +6 -0
  15. package/dist/repositories/custom-object.d.ts +2 -2
  16. package/dist/repositories/customer-group.d.ts +11 -0
  17. package/dist/repositories/customer.d.ts +2 -2
  18. package/dist/repositories/discount-code.d.ts +8 -0
  19. package/dist/repositories/errors.d.ts +2 -2
  20. package/dist/repositories/extension.d.ts +8 -0
  21. package/dist/repositories/inventory-entry.d.ts +2 -2
  22. package/dist/repositories/order.d.ts +2 -2
  23. package/dist/repositories/payment.d.ts +4 -3
  24. package/dist/repositories/product-projection.d.ts +10 -0
  25. package/dist/repositories/product-type.d.ts +5 -4
  26. package/dist/repositories/product.d.ts +2 -2
  27. package/dist/repositories/project.d.ts +8 -0
  28. package/dist/repositories/shipping-method.d.ts +7 -5
  29. package/dist/repositories/shopping-list.d.ts +6 -0
  30. package/dist/repositories/state.d.ts +5 -4
  31. package/dist/repositories/store.d.ts +6 -3
  32. package/dist/repositories/subscription.d.ts +6 -0
  33. package/dist/repositories/tax-category.d.ts +6 -5
  34. package/dist/repositories/type.d.ts +5 -3
  35. package/dist/repositories/zone.d.ts +8 -0
  36. package/dist/services/abstract.d.ts +4 -3
  37. package/dist/services/cart-discount.d.ts +9 -0
  38. package/dist/services/category.d.ts +9 -0
  39. package/dist/services/channel.d.ts +9 -0
  40. package/dist/services/custom-object.d.ts +2 -0
  41. package/dist/services/customer-group.d.ts +9 -0
  42. package/dist/services/discount-code.d.ts +9 -0
  43. package/dist/services/extension.d.ts +9 -0
  44. package/dist/services/my-cart.d.ts +11 -0
  45. package/dist/services/product-projection.d.ts +11 -0
  46. package/dist/services/project.d.ts +11 -0
  47. package/dist/services/shopping-list.d.ts +9 -0
  48. package/dist/services/subscription.d.ts +9 -0
  49. package/dist/services/zone.d.ts +9 -0
  50. package/dist/storage.d.ts +27 -16
  51. package/dist/types.d.ts +9 -4
  52. package/package.json +20 -20
  53. package/src/ctMock.ts +49 -15
  54. package/src/lib/filterParser.test.ts +15 -0
  55. package/src/lib/filterParser.ts +17 -0
  56. package/src/oauth/server.ts +3 -1
  57. package/src/repositories/abstract.ts +49 -34
  58. package/src/repositories/cart-discount.ts +140 -0
  59. package/src/repositories/cart.ts +247 -3
  60. package/src/repositories/category.ts +140 -0
  61. package/src/repositories/channel.ts +23 -0
  62. package/src/repositories/custom-object.ts +5 -2
  63. package/src/repositories/customer-group.ts +42 -0
  64. package/src/repositories/customer.ts +2 -2
  65. package/src/repositories/discount-code.ts +143 -0
  66. package/src/repositories/errors.ts +7 -2
  67. package/src/repositories/extension.ts +65 -0
  68. package/src/repositories/inventory-entry.ts +2 -2
  69. package/src/repositories/order.ts +2 -2
  70. package/src/repositories/payment.ts +10 -6
  71. package/src/repositories/product-projection.ts +74 -0
  72. package/src/repositories/product-type.ts +57 -4
  73. package/src/repositories/product.ts +4 -2
  74. package/src/repositories/project.ts +150 -0
  75. package/src/repositories/shipping-method.ts +149 -13
  76. package/src/repositories/shopping-list.ts +50 -0
  77. package/src/repositories/state.ts +48 -4
  78. package/src/repositories/store.ts +69 -4
  79. package/src/repositories/subscription.ts +50 -0
  80. package/src/repositories/tax-category.ts +80 -6
  81. package/src/repositories/type.ts +133 -3
  82. package/src/repositories/zone.ts +77 -0
  83. package/src/server.ts +6 -1
  84. package/src/services/abstract.ts +26 -18
  85. package/src/services/cart-discount.ts +17 -0
  86. package/src/services/cart.test.ts +314 -3
  87. package/src/services/category.test.ts +37 -0
  88. package/src/services/category.ts +17 -0
  89. package/src/services/channel.ts +17 -0
  90. package/src/services/custom-object.test.ts +53 -3
  91. package/src/services/custom-object.ts +30 -0
  92. package/src/services/customer-group.ts +17 -0
  93. package/src/services/discount-code.ts +17 -0
  94. package/src/services/extension.ts +17 -0
  95. package/src/services/inventory-entry.test.ts +3 -3
  96. package/src/services/my-cart.test.ts +93 -0
  97. package/src/services/my-cart.ts +44 -0
  98. package/src/services/my-payment.test.ts +2 -2
  99. package/src/services/my-payment.ts +1 -1
  100. package/src/services/order.test.ts +4 -4
  101. package/src/services/payment.test.ts +2 -2
  102. package/src/services/product-projection.test.ts +105 -0
  103. package/src/services/product-projection.ts +29 -0
  104. package/src/services/product-type.test.ts +2 -2
  105. package/src/services/product.test.ts +6 -2
  106. package/src/services/project.ts +42 -0
  107. package/src/services/shipping-method.test.ts +3 -3
  108. package/src/services/shopping-list.ts +17 -0
  109. package/src/services/state.test.ts +2 -2
  110. package/src/services/store.test.ts +60 -0
  111. package/src/services/subscription.ts +17 -0
  112. package/src/services/tax-category.test.ts +3 -3
  113. package/src/services/zone.ts +17 -0
  114. package/src/storage.ts +127 -31
  115. package/src/types.ts +9 -3
package/src/storage.ts CHANGED
@@ -2,6 +2,7 @@ import assert from 'assert'
2
2
  import {
3
3
  BaseResource,
4
4
  Cart,
5
+ Category,
5
6
  Customer,
6
7
  CustomObject,
7
8
  InventoryEntry,
@@ -9,20 +10,29 @@ import {
9
10
  PagedQueryResponse,
10
11
  QueryParam,
11
12
  Reference,
12
- ReferenceTypeId,
13
13
  ResourceIdentifier,
14
14
  Product,
15
15
  Store,
16
16
  Type,
17
17
  Payment,
18
+ Project,
18
19
  State,
19
20
  TaxCategory,
20
21
  ShippingMethod,
21
22
  ProductType,
22
23
  InvalidInputError,
24
+ ProductProjection,
25
+ ShoppingList,
26
+ Extension,
27
+ CartDiscount,
28
+ CustomerGroup,
29
+ DiscountCode,
30
+ Zone,
31
+ Channel,
32
+ Subscription,
23
33
  } from '@commercetools/platform-sdk'
24
34
  import { parseExpandClause } from './lib/expandParser'
25
- import { ResourceMap, Writable } from './types'
35
+ import { RepositoryTypes, ResourceMap, Writable } from './types'
26
36
  import { parseQueryExpression } from './lib/predicateParser'
27
37
  import { CommercetoolsError } from './exceptions'
28
38
 
@@ -43,33 +53,44 @@ type QueryParams = {
43
53
  export abstract class AbstractStorage {
44
54
  abstract clear(): void
45
55
 
46
- abstract assertStorage(typeId: ReferenceTypeId): void
56
+ abstract assertStorage(typeId: RepositoryTypes): void
47
57
 
48
- abstract all(projectKey: string, typeId: ReferenceTypeId): Array<BaseResource>
58
+ abstract all(projectKey: string, typeId: RepositoryTypes): Array<BaseResource>
49
59
 
50
- abstract add<ReferenceTypeId extends keyof ResourceMap>(
60
+ abstract add<RepositoryTypes extends keyof ResourceMap>(
51
61
  projectKey: string,
52
- typeId: ReferenceTypeId,
53
- obj: ResourceMap[ReferenceTypeId]
62
+ typeId: RepositoryTypes,
63
+ obj: ResourceMap[RepositoryTypes]
54
64
  ): void
55
65
 
56
- abstract get<ReferenceTypeId extends keyof ResourceMap>(
66
+ abstract get<RepositoryTypes extends keyof ResourceMap>(
57
67
  projectKey: string,
58
- typeId: ReferenceTypeId,
68
+ typeId: RepositoryTypes,
59
69
  id: string,
60
70
  params: GetParams
61
- ): ResourceMap[ReferenceTypeId] | null
71
+ ): ResourceMap[RepositoryTypes] | null
72
+
73
+ abstract getByKey<RepositoryTypes extends keyof ResourceMap>(
74
+ projectKey: string,
75
+ typeId: RepositoryTypes,
76
+ key: string,
77
+ params: GetParams
78
+ ): ResourceMap[RepositoryTypes] | null
79
+
80
+ abstract addProject(projectKey: string): Project
81
+ abstract getProject(projectKey: string): Project
82
+ abstract saveProject(project: Project): Project
62
83
 
63
84
  abstract delete(
64
85
  projectKey: string,
65
- typeId: ReferenceTypeId,
86
+ typeId: RepositoryTypes,
66
87
  id: string,
67
88
  params: GetParams
68
89
  ): BaseResource | null
69
90
 
70
91
  abstract query(
71
92
  projectKey: string,
72
- typeId: ReferenceTypeId,
93
+ typeId: RepositoryTypes,
73
94
  params: QueryParams
74
95
  ): PagedQueryResponse
75
96
 
@@ -81,7 +102,7 @@ export abstract class AbstractStorage {
81
102
 
82
103
  type ProjectStorage = Partial<
83
104
  {
84
- [index in ReferenceTypeId]: Map<string, BaseResource>
105
+ [index in RepositoryTypes]: Map<string, BaseResource>
85
106
  }
86
107
  >
87
108
 
@@ -90,23 +111,40 @@ export class InMemoryStorage extends AbstractStorage {
90
111
  [projectKey: string]: ProjectStorage
91
112
  } = {}
92
113
 
114
+ protected projects: {
115
+ [projectKey: string]: Project
116
+ } = {}
117
+
93
118
  private forProjectKey(projectKey: string) {
119
+ this.addProject(projectKey)
120
+
94
121
  let projectStorage = this.resources[projectKey]
95
122
  if (!projectStorage) {
96
123
  projectStorage = this.resources[projectKey] = {
97
124
  cart: new Map<string, Cart>(),
125
+ 'cart-discount': new Map<string, CartDiscount>(),
126
+ category: new Map<string, Category>(),
127
+ channel: new Map<string, Channel>(),
98
128
  customer: new Map<string, Customer>(),
129
+ 'customer-group': new Map<string, CustomerGroup>(),
130
+ 'discount-code': new Map<string, DiscountCode>(),
131
+ extension: new Map<string, Extension>(),
99
132
  'inventory-entry': new Map<string, InventoryEntry>(),
100
133
  'key-value-document': new Map<string, CustomObject>(),
101
134
  order: new Map<string, Order>(),
102
135
  payment: new Map<string, Payment>(),
103
136
  'product-type': new Map<string, ProductType>(),
104
137
  product: new Map<string, Product>(),
138
+ 'product-selection': new Map<string, any>(),
139
+ 'product-projection': new Map<string, ProductProjection>(),
105
140
  'shipping-method': new Map<string, ShippingMethod>(),
106
141
  state: new Map<string, State>(),
107
142
  store: new Map<string, Store>(),
143
+ 'shopping-list': new Map<string, ShoppingList>(),
144
+ subscription: new Map<string, Subscription>(),
108
145
  'tax-category': new Map<string, TaxCategory>(),
109
146
  type: new Map<string, Type>(),
147
+ zone: new Map<string, Zone>(),
110
148
  }
111
149
  }
112
150
  return projectStorage
@@ -120,9 +158,9 @@ export class InMemoryStorage extends AbstractStorage {
120
158
  }
121
159
  }
122
160
 
123
- assertStorage(typeId: ReferenceTypeId) {}
161
+ assertStorage(typeId: RepositoryTypes) {}
124
162
 
125
- all(projectKey: string, typeId: ReferenceTypeId) {
163
+ all(projectKey: string, typeId: RepositoryTypes) {
126
164
  const store = this.forProjectKey(projectKey)[typeId]
127
165
  if (store) {
128
166
  return Array.from(store.values())
@@ -130,12 +168,12 @@ export class InMemoryStorage extends AbstractStorage {
130
168
  return []
131
169
  }
132
170
 
133
- add<ReferenceTypeId extends keyof ResourceMap>(
171
+ add<RepositoryTypes extends keyof ResourceMap>(
134
172
  projectKey: string,
135
- typeId: ReferenceTypeId,
136
- obj: ResourceMap[ReferenceTypeId],
173
+ typeId: RepositoryTypes,
174
+ obj: ResourceMap[RepositoryTypes],
137
175
  params: GetParams = {}
138
- ): ResourceMap[ReferenceTypeId] {
176
+ ): ResourceMap[RepositoryTypes] {
139
177
  this.forProjectKey(projectKey)[typeId]?.set(obj.id, obj)
140
178
 
141
179
  const resource = this.get(projectKey, typeId, obj.id, params)
@@ -143,44 +181,62 @@ export class InMemoryStorage extends AbstractStorage {
143
181
  return resource
144
182
  }
145
183
 
146
- get<ReferenceTypeId extends keyof ResourceMap>(
184
+ get<RepositoryTypes extends keyof ResourceMap>(
147
185
  projectKey: string,
148
- typeId: ReferenceTypeId,
186
+ typeId: RepositoryTypes,
149
187
  id: string,
150
188
  params: GetParams = {}
151
- ): ResourceMap[ReferenceTypeId] | null {
189
+ ): ResourceMap[RepositoryTypes] | null {
152
190
  const resource = this.forProjectKey(projectKey)[typeId]?.get(id)
153
191
  if (resource) {
154
192
  return this.expand(
155
193
  projectKey,
156
194
  resource,
157
195
  params.expand
158
- ) as ResourceMap[ReferenceTypeId]
196
+ ) as ResourceMap[RepositoryTypes]
159
197
  }
160
198
  return null
161
199
  }
162
200
 
201
+ getByKey<RepositoryTypes extends keyof ResourceMap>(
202
+ projectKey: string,
203
+ typeId: RepositoryTypes,
204
+ key: string,
205
+ params: GetParams = {}
206
+ ): ResourceMap[RepositoryTypes] | null {
207
+ const store = this.forProjectKey(projectKey)[typeId]
208
+ if (!store) {
209
+ throw new Error('No type')
210
+ }
211
+
212
+ const resources: any[] = Array.from(store.values())
213
+ const resource = resources.find(e => e.key === key)
214
+ if (params.expand) return this.expand(projectKey, resource, params.expand)
215
+ return resource
216
+ }
217
+
163
218
  delete(
164
219
  projectKey: string,
165
- typeId: ReferenceTypeId,
220
+ typeId: RepositoryTypes,
166
221
  id: string,
167
222
  params: GetParams = {}
168
223
  ): BaseResource | null {
169
224
  const resource = this.get(projectKey, typeId, id)
225
+
170
226
  if (resource) {
171
227
  this.forProjectKey(projectKey)[typeId]?.delete(id)
172
228
  return this.expand(
173
229
  projectKey,
174
230
  resource,
175
231
  params.expand
176
- ) as ResourceMap[ReferenceTypeId]
232
+ ) as ResourceMap[RepositoryTypes]
177
233
  }
178
234
  return resource
179
235
  }
180
236
 
181
237
  query(
182
238
  projectKey: string,
183
- typeId: ReferenceTypeId,
239
+ typeId: RepositoryTypes,
184
240
  params: QueryParams
185
241
  ): PagedQueryResponse {
186
242
  const store = this.forProjectKey(projectKey)[typeId]
@@ -199,7 +255,7 @@ export class InMemoryStorage extends AbstractStorage {
199
255
  throw new CommercetoolsError<InvalidInputError>(
200
256
  {
201
257
  code: 'InvalidInput',
202
- message: err.message,
258
+ message: (err as any).message,
203
259
  },
204
260
  400
205
261
  )
@@ -230,14 +286,14 @@ export class InMemoryStorage extends AbstractStorage {
230
286
  }
231
287
  }
232
288
 
233
- getByResourceIdentifier<ReferenceTypeId extends keyof ResourceMap>(
289
+ getByResourceIdentifier<RepositoryTypes extends keyof ResourceMap>(
234
290
  projectKey: string,
235
291
  identifier: ResourceIdentifier
236
- ): ResourceMap[ReferenceTypeId] | undefined {
292
+ ): ResourceMap[RepositoryTypes] | undefined {
237
293
  if (identifier.id) {
238
294
  const resource = this.get(projectKey, identifier.typeId, identifier.id)
239
295
  if (resource) {
240
- return resource as ResourceMap[ReferenceTypeId]
296
+ return resource as ResourceMap[RepositoryTypes]
241
297
  }
242
298
  console.error(
243
299
  `No resource found with typeId=${identifier.typeId}, id=${identifier.id}`
@@ -256,7 +312,7 @@ export class InMemoryStorage extends AbstractStorage {
256
312
  r => r.key === identifier.key
257
313
  )
258
314
  if (resource) {
259
- return resource as ResourceMap[ReferenceTypeId]
315
+ return resource as ResourceMap[RepositoryTypes]
260
316
  }
261
317
  } else {
262
318
  throw new Error(
@@ -267,6 +323,46 @@ export class InMemoryStorage extends AbstractStorage {
267
323
  return undefined
268
324
  }
269
325
 
326
+ addProject = (projectKey: string): Project => {
327
+ if (!this.projects[projectKey]) {
328
+ this.projects[projectKey] = {
329
+ key: projectKey,
330
+ name: '',
331
+ countries: [],
332
+ currencies: [],
333
+ languages: [],
334
+ createdAt: '2018-10-04T11:32:12.603Z',
335
+ trialUntil: '2018-12',
336
+ carts: {
337
+ countryTaxRateFallbackEnabled: false,
338
+ deleteDaysAfterLastModification: 90,
339
+ },
340
+ messages: { enabled: false, deleteDaysAfterCreation: 15 },
341
+ shippingRateInputType: undefined,
342
+ externalOAuth: undefined,
343
+ searchIndexing: {
344
+ products: {
345
+ status: 'Deactivated',
346
+ },
347
+ orders: {
348
+ status: 'Deactivated',
349
+ },
350
+ },
351
+ version: 1,
352
+ }
353
+ }
354
+ return this.projects[projectKey]
355
+ }
356
+
357
+ saveProject = (project: Project): Project => {
358
+ this.projects[project.key] = project
359
+ return project
360
+ }
361
+
362
+ getProject = (projectKey: string): Project => {
363
+ return this.addProject(projectKey)
364
+ }
365
+
270
366
  private expand = <T>(
271
367
  projectKey: string,
272
368
  obj: T,
package/src/types.ts CHANGED
@@ -1,3 +1,5 @@
1
+ import { ProductProjectionRepository } from './repositories/product-projection'
2
+ import { ShoppingListRepository } from './repositories/shopping-list'
1
3
  import * as ctp from '@commercetools/platform-sdk'
2
4
  import { ReferenceTypeId } from '@commercetools/platform-sdk'
3
5
  import AbstractService from './services/abstract'
@@ -15,11 +17,12 @@ import { TaxCategoryRepository } from './repositories/tax-category'
15
17
 
16
18
  export type Writable<T> = { -readonly [P in keyof T]: Writable<T[P]> }
17
19
 
18
- type serviceTypes = ReferenceTypeId | 'my-payment'
20
+ export type RepositoryTypes = ReferenceTypeId | 'product-projection'
21
+ export type ServiceTypes = RepositoryTypes | 'my-cart' | 'my-payment'
19
22
 
20
23
  export type Services = Partial<
21
24
  {
22
- [index in serviceTypes]: AbstractService
25
+ [index in ServiceTypes]: AbstractService
23
26
  }
24
27
  >
25
28
 
@@ -39,6 +42,8 @@ export type ResourceMap = {
39
42
  payment: ctp.Payment
40
43
  product: ctp.Product
41
44
  'product-discount': ctp.ProductDiscount
45
+ 'product-projection': ctp.ProductProjection
46
+ 'product-selection': ctp.ProductSelection
42
47
  'product-type': ctp.ProductType
43
48
  review: ctp.Review
44
49
  'shipping-method': ctp.ShippingMethod
@@ -94,11 +99,12 @@ export type RepositoryMap = {
94
99
  'order-edit': never
95
100
  payment: PaymentRepository
96
101
  product: ProductRepository
102
+ 'product-projection': ProductProjectionRepository
97
103
  'product-discount': never
98
104
  'product-type': ProductTypeRepository
99
105
  review: never
100
106
  'shipping-method': ShippingMethodRepository
101
- 'shopping-list': never
107
+ 'shopping-list': ShoppingListRepository
102
108
  state: StateRepository
103
109
  store: never
104
110
  subscription: never