@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.
- package/README.md +30 -12
- package/dist/commercetools-mock.cjs.development.js +3190 -1574
- package/dist/commercetools-mock.cjs.development.js.map +1 -1
- package/dist/commercetools-mock.cjs.production.min.js +1 -1
- package/dist/commercetools-mock.cjs.production.min.js.map +1 -1
- package/dist/commercetools-mock.esm.js +3190 -1574
- package/dist/commercetools-mock.esm.js.map +1 -1
- package/dist/ctMock.d.ts +1 -0
- package/dist/lib/filterParser.d.ts +1 -0
- package/dist/repositories/abstract.d.ts +11 -7
- package/dist/repositories/cart-discount.d.ts +9 -0
- package/dist/repositories/cart.d.ts +16 -3
- package/dist/repositories/category.d.ts +18 -0
- package/dist/repositories/channel.d.ts +6 -0
- package/dist/repositories/custom-object.d.ts +2 -2
- package/dist/repositories/customer-group.d.ts +11 -0
- package/dist/repositories/customer.d.ts +2 -2
- package/dist/repositories/discount-code.d.ts +8 -0
- package/dist/repositories/errors.d.ts +2 -2
- package/dist/repositories/extension.d.ts +8 -0
- package/dist/repositories/inventory-entry.d.ts +2 -2
- package/dist/repositories/order.d.ts +2 -2
- package/dist/repositories/payment.d.ts +4 -3
- package/dist/repositories/product-projection.d.ts +10 -0
- package/dist/repositories/product-type.d.ts +5 -4
- package/dist/repositories/product.d.ts +2 -2
- package/dist/repositories/project.d.ts +8 -0
- package/dist/repositories/shipping-method.d.ts +7 -5
- package/dist/repositories/shopping-list.d.ts +6 -0
- package/dist/repositories/state.d.ts +5 -4
- package/dist/repositories/store.d.ts +6 -3
- package/dist/repositories/subscription.d.ts +6 -0
- package/dist/repositories/tax-category.d.ts +6 -5
- package/dist/repositories/type.d.ts +5 -3
- package/dist/repositories/zone.d.ts +8 -0
- package/dist/services/abstract.d.ts +4 -3
- package/dist/services/cart-discount.d.ts +9 -0
- package/dist/services/category.d.ts +9 -0
- package/dist/services/channel.d.ts +9 -0
- package/dist/services/custom-object.d.ts +2 -0
- package/dist/services/customer-group.d.ts +9 -0
- package/dist/services/discount-code.d.ts +9 -0
- package/dist/services/extension.d.ts +9 -0
- package/dist/services/my-cart.d.ts +11 -0
- package/dist/services/product-projection.d.ts +11 -0
- package/dist/services/project.d.ts +11 -0
- package/dist/services/shopping-list.d.ts +9 -0
- package/dist/services/subscription.d.ts +9 -0
- package/dist/services/zone.d.ts +9 -0
- package/dist/storage.d.ts +27 -16
- package/dist/types.d.ts +9 -4
- package/package.json +20 -20
- package/src/ctMock.ts +49 -15
- package/src/lib/filterParser.test.ts +15 -0
- package/src/lib/filterParser.ts +17 -0
- package/src/oauth/server.ts +3 -1
- package/src/repositories/abstract.ts +49 -34
- package/src/repositories/cart-discount.ts +140 -0
- package/src/repositories/cart.ts +247 -3
- package/src/repositories/category.ts +140 -0
- package/src/repositories/channel.ts +23 -0
- package/src/repositories/custom-object.ts +5 -2
- package/src/repositories/customer-group.ts +42 -0
- package/src/repositories/customer.ts +2 -2
- package/src/repositories/discount-code.ts +143 -0
- package/src/repositories/errors.ts +7 -2
- package/src/repositories/extension.ts +65 -0
- package/src/repositories/inventory-entry.ts +2 -2
- package/src/repositories/order.ts +2 -2
- package/src/repositories/payment.ts +10 -6
- package/src/repositories/product-projection.ts +74 -0
- package/src/repositories/product-type.ts +57 -4
- package/src/repositories/product.ts +4 -2
- package/src/repositories/project.ts +150 -0
- package/src/repositories/shipping-method.ts +149 -13
- package/src/repositories/shopping-list.ts +50 -0
- package/src/repositories/state.ts +48 -4
- package/src/repositories/store.ts +69 -4
- package/src/repositories/subscription.ts +50 -0
- package/src/repositories/tax-category.ts +80 -6
- package/src/repositories/type.ts +133 -3
- package/src/repositories/zone.ts +77 -0
- package/src/server.ts +6 -1
- package/src/services/abstract.ts +26 -18
- package/src/services/cart-discount.ts +17 -0
- package/src/services/cart.test.ts +314 -3
- package/src/services/category.test.ts +37 -0
- package/src/services/category.ts +17 -0
- package/src/services/channel.ts +17 -0
- package/src/services/custom-object.test.ts +53 -3
- package/src/services/custom-object.ts +30 -0
- package/src/services/customer-group.ts +17 -0
- package/src/services/discount-code.ts +17 -0
- package/src/services/extension.ts +17 -0
- package/src/services/inventory-entry.test.ts +3 -3
- package/src/services/my-cart.test.ts +93 -0
- package/src/services/my-cart.ts +44 -0
- package/src/services/my-payment.test.ts +2 -2
- package/src/services/my-payment.ts +1 -1
- package/src/services/order.test.ts +4 -4
- package/src/services/payment.test.ts +2 -2
- package/src/services/product-projection.test.ts +105 -0
- package/src/services/product-projection.ts +29 -0
- package/src/services/product-type.test.ts +2 -2
- package/src/services/product.test.ts +6 -2
- package/src/services/project.ts +42 -0
- package/src/services/shipping-method.test.ts +3 -3
- package/src/services/shopping-list.ts +17 -0
- package/src/services/state.test.ts +2 -2
- package/src/services/store.test.ts +60 -0
- package/src/services/subscription.ts +17 -0
- package/src/services/tax-category.test.ts +3 -3
- package/src/services/zone.ts +17 -0
- package/src/storage.ts +127 -31
- package/src/types.ts +9 -3
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
import AbstractService from './abstract'
|
|
2
|
+
import { Router } from 'express'
|
|
3
|
+
import { AbstractStorage } from '../storage'
|
|
4
|
+
import { ExtensionRepository } from '../repositories/extension'
|
|
5
|
+
|
|
6
|
+
export class ExtensionServices extends AbstractService {
|
|
7
|
+
public repository: ExtensionRepository
|
|
8
|
+
|
|
9
|
+
constructor(parent: Router, storage: AbstractStorage) {
|
|
10
|
+
super(parent)
|
|
11
|
+
this.repository = new ExtensionRepository(storage)
|
|
12
|
+
}
|
|
13
|
+
|
|
14
|
+
getBasePath() {
|
|
15
|
+
return 'extensions'
|
|
16
|
+
}
|
|
17
|
+
}
|
|
@@ -14,7 +14,7 @@ describe('Inventory Entry Query', () => {
|
|
|
14
14
|
sku: '1337',
|
|
15
15
|
quantityOnStock: 100,
|
|
16
16
|
})
|
|
17
|
-
expect(response.status).toBe(
|
|
17
|
+
expect(response.status).toBe(201)
|
|
18
18
|
inventoryEntry = response.body
|
|
19
19
|
})
|
|
20
20
|
|
|
@@ -65,7 +65,7 @@ describe('Inventory Entry Update Actions', () => {
|
|
|
65
65
|
sku: '1337',
|
|
66
66
|
quantityOnStock: 100,
|
|
67
67
|
})
|
|
68
|
-
expect(response.status).toBe(
|
|
68
|
+
expect(response.status).toBe(201)
|
|
69
69
|
inventoryEntry = response.body
|
|
70
70
|
|
|
71
71
|
response = await supertest(ctMock.app)
|
|
@@ -77,7 +77,7 @@ describe('Inventory Entry Update Actions', () => {
|
|
|
77
77
|
},
|
|
78
78
|
resourceTypeIds: ['inventory-entry'],
|
|
79
79
|
})
|
|
80
|
-
expect(response.status).toBe(
|
|
80
|
+
expect(response.status).toBe(201)
|
|
81
81
|
customType = response.body
|
|
82
82
|
})
|
|
83
83
|
|
|
@@ -0,0 +1,93 @@
|
|
|
1
|
+
import { MyCartDraft } from '@commercetools/platform-sdk'
|
|
2
|
+
import supertest from 'supertest'
|
|
3
|
+
import { CommercetoolsMock } from '../index'
|
|
4
|
+
|
|
5
|
+
const ctMock = new CommercetoolsMock()
|
|
6
|
+
|
|
7
|
+
describe('MyCart', () => {
|
|
8
|
+
beforeEach(async () => {
|
|
9
|
+
const response = await supertest(ctMock.app)
|
|
10
|
+
.post('/dummy/types')
|
|
11
|
+
.send({
|
|
12
|
+
key: 'custom-payment',
|
|
13
|
+
name: {
|
|
14
|
+
'nl-NL': 'custom-payment',
|
|
15
|
+
},
|
|
16
|
+
resourceTypeIds: ['payment'],
|
|
17
|
+
})
|
|
18
|
+
expect(response.status).toBe(201)
|
|
19
|
+
})
|
|
20
|
+
|
|
21
|
+
afterEach(() => {
|
|
22
|
+
ctMock.clear()
|
|
23
|
+
})
|
|
24
|
+
|
|
25
|
+
test('Create my cart', async () => {
|
|
26
|
+
const draft: MyCartDraft = {
|
|
27
|
+
currency: 'EUR',
|
|
28
|
+
}
|
|
29
|
+
|
|
30
|
+
const response = await supertest(ctMock.app)
|
|
31
|
+
.post('/dummy/me/carts')
|
|
32
|
+
.send(draft)
|
|
33
|
+
|
|
34
|
+
expect(response.status).toBe(201)
|
|
35
|
+
expect(response.body).toEqual({
|
|
36
|
+
id: expect.anything(),
|
|
37
|
+
createdAt: expect.anything(),
|
|
38
|
+
lastModifiedAt: expect.anything(),
|
|
39
|
+
version: 1,
|
|
40
|
+
cartState: 'Active',
|
|
41
|
+
lineItems: [],
|
|
42
|
+
customLineItems: [],
|
|
43
|
+
totalPrice: {
|
|
44
|
+
type: 'centPrecision',
|
|
45
|
+
centAmount: 0,
|
|
46
|
+
currencyCode: 'EUR',
|
|
47
|
+
fractionDigits: 0,
|
|
48
|
+
},
|
|
49
|
+
taxMode: 'Platform',
|
|
50
|
+
taxRoundingMode: 'HalfEven',
|
|
51
|
+
taxCalculationMode: 'LineItemLevel',
|
|
52
|
+
|
|
53
|
+
refusedGifts: [],
|
|
54
|
+
origin: 'Customer',
|
|
55
|
+
})
|
|
56
|
+
})
|
|
57
|
+
|
|
58
|
+
test('Get my cart by ID', async () => {
|
|
59
|
+
const draft: MyCartDraft = {
|
|
60
|
+
currency: 'EUR',
|
|
61
|
+
}
|
|
62
|
+
const createResponse = await supertest(ctMock.app)
|
|
63
|
+
.post('/dummy/me/carts')
|
|
64
|
+
.send(draft)
|
|
65
|
+
|
|
66
|
+
const response = await supertest(ctMock.app).get(
|
|
67
|
+
`/dummy/me/carts/${createResponse.body.id}`
|
|
68
|
+
)
|
|
69
|
+
|
|
70
|
+
expect(response.status).toBe(200)
|
|
71
|
+
expect(response.body).toEqual(createResponse.body)
|
|
72
|
+
})
|
|
73
|
+
|
|
74
|
+
test('Get my active cart', async () => {
|
|
75
|
+
const draft: MyCartDraft = {
|
|
76
|
+
currency: 'EUR',
|
|
77
|
+
}
|
|
78
|
+
const createResponse = await supertest(ctMock.app)
|
|
79
|
+
.post('/dummy/me/carts')
|
|
80
|
+
.send(draft)
|
|
81
|
+
|
|
82
|
+
const response = await supertest(ctMock.app).get(`/dummy/me/active-cart`)
|
|
83
|
+
|
|
84
|
+
expect(response.status).toBe(200)
|
|
85
|
+
expect(response.body).toEqual(createResponse.body)
|
|
86
|
+
})
|
|
87
|
+
|
|
88
|
+
test('Get my active cart which doesnt exists', async () => {
|
|
89
|
+
const response = await supertest(ctMock.app).get(`/dummy/me/active-cart`)
|
|
90
|
+
|
|
91
|
+
expect(response.status).toBe(404)
|
|
92
|
+
})
|
|
93
|
+
})
|
|
@@ -0,0 +1,44 @@
|
|
|
1
|
+
import AbstractService from './abstract'
|
|
2
|
+
import { Request, Response, Router } from 'express'
|
|
3
|
+
import { AbstractStorage } from '../storage'
|
|
4
|
+
import { CartRepository } from '../repositories/cart'
|
|
5
|
+
|
|
6
|
+
export class MyCartService extends AbstractService {
|
|
7
|
+
public repository: CartRepository
|
|
8
|
+
|
|
9
|
+
constructor(parent: Router, storage: AbstractStorage) {
|
|
10
|
+
super(parent)
|
|
11
|
+
this.repository = new CartRepository(storage)
|
|
12
|
+
}
|
|
13
|
+
|
|
14
|
+
getBasePath() {
|
|
15
|
+
return 'me'
|
|
16
|
+
}
|
|
17
|
+
|
|
18
|
+
registerRoutes(parent: Router) {
|
|
19
|
+
// Overwrite this function to be able to handle /me/active-cart path.
|
|
20
|
+
const basePath = this.getBasePath()
|
|
21
|
+
const router = Router({ mergeParams: true })
|
|
22
|
+
|
|
23
|
+
this.extraRoutes(router)
|
|
24
|
+
|
|
25
|
+
router.get('/active-cart', this.activeCart.bind(this))
|
|
26
|
+
router.get('/carts/', this.get.bind(this))
|
|
27
|
+
router.get('/carts/:id', this.getWithId.bind(this))
|
|
28
|
+
|
|
29
|
+
router.delete('/carts/:id', this.deletewithId.bind(this))
|
|
30
|
+
|
|
31
|
+
router.post('/carts/', this.post.bind(this))
|
|
32
|
+
router.post('/carts/:id', this.postWithId.bind(this))
|
|
33
|
+
|
|
34
|
+
parent.use(`/${basePath}`, router)
|
|
35
|
+
}
|
|
36
|
+
|
|
37
|
+
activeCart(request: Request, response: Response) {
|
|
38
|
+
const resource = this.repository.getActiveCart(request.params.projectKey)
|
|
39
|
+
if (!resource) {
|
|
40
|
+
return response.status(404).send('Not found')
|
|
41
|
+
}
|
|
42
|
+
return response.status(200).send(resource)
|
|
43
|
+
}
|
|
44
|
+
}
|
|
@@ -15,7 +15,7 @@ describe('MyPayment', () => {
|
|
|
15
15
|
},
|
|
16
16
|
resourceTypeIds: ['payment'],
|
|
17
17
|
})
|
|
18
|
-
expect(response.status).toBe(
|
|
18
|
+
expect(response.status).toBe(201)
|
|
19
19
|
})
|
|
20
20
|
|
|
21
21
|
test('Create payment', async () => {
|
|
@@ -32,7 +32,7 @@ describe('MyPayment', () => {
|
|
|
32
32
|
.post('/dummy/me/payments')
|
|
33
33
|
.send(draft)
|
|
34
34
|
|
|
35
|
-
expect(response.status).toBe(
|
|
35
|
+
expect(response.status).toBe(201)
|
|
36
36
|
expect(response.body).toEqual({
|
|
37
37
|
id: expect.anything(),
|
|
38
38
|
createdAt: expect.anything(),
|
|
@@ -4,7 +4,7 @@ import { AbstractStorage } from '../storage'
|
|
|
4
4
|
import { PaymentRepository } from '../repositories/payment'
|
|
5
5
|
|
|
6
6
|
export class MyPaymentService extends AbstractService {
|
|
7
|
-
public repository: PaymentRepository
|
|
7
|
+
public repository: PaymentRepository
|
|
8
8
|
|
|
9
9
|
constructor(parent: Router, storage: AbstractStorage) {
|
|
10
10
|
super(parent)
|
|
@@ -21,7 +21,7 @@ describe('Order Query', () => {
|
|
|
21
21
|
},
|
|
22
22
|
},
|
|
23
23
|
})
|
|
24
|
-
expect(response.status).toBe(
|
|
24
|
+
expect(response.status).toBe(201)
|
|
25
25
|
const cart = response.body
|
|
26
26
|
|
|
27
27
|
response = await supertest(ctMock.app)
|
|
@@ -33,7 +33,7 @@ describe('Order Query', () => {
|
|
|
33
33
|
},
|
|
34
34
|
orderNumber: 'foobar',
|
|
35
35
|
})
|
|
36
|
-
expect(response.status).toBe(
|
|
36
|
+
expect(response.status).toBe(201)
|
|
37
37
|
order = response.body
|
|
38
38
|
})
|
|
39
39
|
|
|
@@ -279,7 +279,7 @@ describe('Order Update Actions', () => {
|
|
|
279
279
|
.send({
|
|
280
280
|
currency: 'EUR',
|
|
281
281
|
})
|
|
282
|
-
expect(response.status).toBe(
|
|
282
|
+
expect(response.status).toBe(201)
|
|
283
283
|
const cart = response.body
|
|
284
284
|
|
|
285
285
|
response = await supertest(ctMock.app)
|
|
@@ -290,7 +290,7 @@ describe('Order Update Actions', () => {
|
|
|
290
290
|
id: cart.id,
|
|
291
291
|
},
|
|
292
292
|
})
|
|
293
|
-
expect(response.status).toBe(
|
|
293
|
+
expect(response.status).toBe(201)
|
|
294
294
|
order = response.body
|
|
295
295
|
})
|
|
296
296
|
|
|
@@ -15,7 +15,7 @@ describe('Payment', () => {
|
|
|
15
15
|
},
|
|
16
16
|
resourceTypeIds: ['payment'],
|
|
17
17
|
})
|
|
18
|
-
expect(response.status).toBe(
|
|
18
|
+
expect(response.status).toBe(201)
|
|
19
19
|
})
|
|
20
20
|
|
|
21
21
|
test('Create payment', async () => {
|
|
@@ -32,7 +32,7 @@ describe('Payment', () => {
|
|
|
32
32
|
.post('/dummy/payments')
|
|
33
33
|
.send(draft)
|
|
34
34
|
|
|
35
|
-
expect(response.status).toBe(
|
|
35
|
+
expect(response.status).toBe(201)
|
|
36
36
|
expect(response.body).toEqual({
|
|
37
37
|
id: expect.anything(),
|
|
38
38
|
createdAt: expect.anything(),
|
|
@@ -0,0 +1,105 @@
|
|
|
1
|
+
import { ProductDraft, ProductProjection } from '@commercetools/platform-sdk'
|
|
2
|
+
import supertest from 'supertest'
|
|
3
|
+
import { CommercetoolsMock } from '../index'
|
|
4
|
+
import * as qs from 'querystring'
|
|
5
|
+
|
|
6
|
+
const ctMock = new CommercetoolsMock()
|
|
7
|
+
|
|
8
|
+
describe('Product Projection', () => {
|
|
9
|
+
afterEach(() => {
|
|
10
|
+
ctMock.clear()
|
|
11
|
+
})
|
|
12
|
+
|
|
13
|
+
test('Create product projection', async () => {
|
|
14
|
+
const draft: ProductDraft = {
|
|
15
|
+
key: '1337357',
|
|
16
|
+
masterVariant: {
|
|
17
|
+
sku: '1337',
|
|
18
|
+
},
|
|
19
|
+
name: {
|
|
20
|
+
'nl-NL': 'test product',
|
|
21
|
+
},
|
|
22
|
+
productType: {
|
|
23
|
+
typeId: 'product-type',
|
|
24
|
+
id: 'some-uuid',
|
|
25
|
+
},
|
|
26
|
+
slug: {
|
|
27
|
+
'nl-NL': 'test-product',
|
|
28
|
+
},
|
|
29
|
+
}
|
|
30
|
+
const response = await supertest(ctMock.app)
|
|
31
|
+
.post('/dummy/product-projections')
|
|
32
|
+
.send(draft)
|
|
33
|
+
|
|
34
|
+
const projection: ProductProjection = response.body
|
|
35
|
+
expect(projection).toEqual({
|
|
36
|
+
createdAt: expect.anything(),
|
|
37
|
+
id: expect.anything(),
|
|
38
|
+
lastModifiedAt: expect.anything(),
|
|
39
|
+
name: {
|
|
40
|
+
'nl-NL': 'test product',
|
|
41
|
+
},
|
|
42
|
+
slug: {
|
|
43
|
+
'nl-NL': 'test-product',
|
|
44
|
+
},
|
|
45
|
+
categories: [],
|
|
46
|
+
version: 1,
|
|
47
|
+
masterVariant: {
|
|
48
|
+
id: 0,
|
|
49
|
+
sku: '1337',
|
|
50
|
+
},
|
|
51
|
+
productType: {
|
|
52
|
+
id: 'some-uuid',
|
|
53
|
+
typeId: 'product-type',
|
|
54
|
+
},
|
|
55
|
+
variants: [],
|
|
56
|
+
})
|
|
57
|
+
})
|
|
58
|
+
|
|
59
|
+
test('Search product projection', async () => {
|
|
60
|
+
ctMock.project('dummy').add('product-projection', {
|
|
61
|
+
id: '',
|
|
62
|
+
version: 1,
|
|
63
|
+
productType: {
|
|
64
|
+
id: 'fake',
|
|
65
|
+
typeId: 'product-type',
|
|
66
|
+
},
|
|
67
|
+
name: { 'nl-NL': 'test-prod' },
|
|
68
|
+
slug: {},
|
|
69
|
+
variants: [],
|
|
70
|
+
masterVariant: { id: 1, sku: '1337' },
|
|
71
|
+
createdAt: '',
|
|
72
|
+
lastModifiedAt: '',
|
|
73
|
+
categories: [],
|
|
74
|
+
})
|
|
75
|
+
|
|
76
|
+
const response = await supertest(ctMock.app).get(
|
|
77
|
+
'/dummy/product-projections/search?' +
|
|
78
|
+
qs.stringify({
|
|
79
|
+
filter: ['masterVariant.sku:"1337"'],
|
|
80
|
+
})
|
|
81
|
+
)
|
|
82
|
+
|
|
83
|
+
const projection: ProductProjection = response.body
|
|
84
|
+
expect(projection).toEqual({
|
|
85
|
+
count: 1,
|
|
86
|
+
limit: 20,
|
|
87
|
+
offset: 0,
|
|
88
|
+
total: 1,
|
|
89
|
+
results: [
|
|
90
|
+
{
|
|
91
|
+
categories: [],
|
|
92
|
+
createdAt: '',
|
|
93
|
+
id: '',
|
|
94
|
+
lastModifiedAt: '',
|
|
95
|
+
masterVariant: { id: 1, sku: '1337' },
|
|
96
|
+
name: { 'nl-NL': 'test-prod' },
|
|
97
|
+
productType: { id: 'fake', typeId: 'product-type' },
|
|
98
|
+
slug: {},
|
|
99
|
+
variants: [],
|
|
100
|
+
version: 1,
|
|
101
|
+
},
|
|
102
|
+
],
|
|
103
|
+
})
|
|
104
|
+
})
|
|
105
|
+
})
|
|
@@ -0,0 +1,29 @@
|
|
|
1
|
+
import { ProductProjectionRepository } from './../repositories/product-projection'
|
|
2
|
+
import AbstractService from './abstract'
|
|
3
|
+
import { AbstractStorage } from '../storage'
|
|
4
|
+
import { Request, Response, Router } from 'express'
|
|
5
|
+
|
|
6
|
+
export class ProductProjectionService extends AbstractService {
|
|
7
|
+
public repository: ProductProjectionRepository
|
|
8
|
+
|
|
9
|
+
constructor(parent: Router, storage: AbstractStorage) {
|
|
10
|
+
super(parent)
|
|
11
|
+
this.repository = new ProductProjectionRepository(storage)
|
|
12
|
+
}
|
|
13
|
+
|
|
14
|
+
getBasePath() {
|
|
15
|
+
return 'product-projections'
|
|
16
|
+
}
|
|
17
|
+
|
|
18
|
+
extraRoutes(router: Router) {
|
|
19
|
+
router.get('/search', this.search.bind(this))
|
|
20
|
+
}
|
|
21
|
+
|
|
22
|
+
search(request: Request, response: Response) {
|
|
23
|
+
const resource = this.repository.search(
|
|
24
|
+
request.params.projectKey,
|
|
25
|
+
request.query
|
|
26
|
+
)
|
|
27
|
+
return response.status(200).send(resource)
|
|
28
|
+
}
|
|
29
|
+
}
|
|
@@ -22,7 +22,7 @@ describe('Product type', () => {
|
|
|
22
22
|
.post('/dummy/product-types')
|
|
23
23
|
.send(draft)
|
|
24
24
|
|
|
25
|
-
expect(response.status).toBe(
|
|
25
|
+
expect(response.status).toBe(201)
|
|
26
26
|
|
|
27
27
|
expect(response.body).toEqual({
|
|
28
28
|
attributes: [
|
|
@@ -58,7 +58,7 @@ describe('Product type', () => {
|
|
|
58
58
|
.post('/dummy/product-types')
|
|
59
59
|
.send(draft)
|
|
60
60
|
|
|
61
|
-
expect(createResponse.status).toBe(
|
|
61
|
+
expect(createResponse.status).toBe(201)
|
|
62
62
|
|
|
63
63
|
const response = await supertest(ctMock.app).get(
|
|
64
64
|
`/dummy/product-types/${createResponse.body.id}`
|
|
@@ -1,4 +1,8 @@
|
|
|
1
|
-
import {
|
|
1
|
+
import {
|
|
2
|
+
CentPrecisionMoney,
|
|
3
|
+
Product,
|
|
4
|
+
ProductDraft,
|
|
5
|
+
} from '@commercetools/platform-sdk'
|
|
2
6
|
import supertest from 'supertest'
|
|
3
7
|
import { CommercetoolsMock } from '../index'
|
|
4
8
|
import assert from 'assert'
|
|
@@ -88,7 +92,7 @@ describe('Product update actions', () => {
|
|
|
88
92
|
.post('/dummy/products')
|
|
89
93
|
.send(draft)
|
|
90
94
|
|
|
91
|
-
expect(response.status).toBe(
|
|
95
|
+
expect(response.status).toBe(201)
|
|
92
96
|
product = response.body
|
|
93
97
|
})
|
|
94
98
|
|
|
@@ -0,0 +1,42 @@
|
|
|
1
|
+
import { Router } from 'express'
|
|
2
|
+
import { Request, Response } from 'express'
|
|
3
|
+
import { AbstractStorage } from '../storage'
|
|
4
|
+
import { ProjectRepository } from '../repositories/project'
|
|
5
|
+
import { Update } from '@commercetools/platform-sdk'
|
|
6
|
+
|
|
7
|
+
export class ProjectService {
|
|
8
|
+
public repository: ProjectRepository
|
|
9
|
+
|
|
10
|
+
constructor(parent: Router, storage: AbstractStorage) {
|
|
11
|
+
this.repository = new ProjectRepository(storage)
|
|
12
|
+
this.registerRoutes(parent)
|
|
13
|
+
}
|
|
14
|
+
|
|
15
|
+
registerRoutes(parent: Router) {
|
|
16
|
+
parent.get('', this.get.bind(this))
|
|
17
|
+
parent.post('', this.post.bind(this))
|
|
18
|
+
}
|
|
19
|
+
|
|
20
|
+
get(request: Request, response: Response) {
|
|
21
|
+
const projectKey = request.params.projectKey
|
|
22
|
+
const project = this.repository.get(projectKey)
|
|
23
|
+
return response.status(200).send(project)
|
|
24
|
+
}
|
|
25
|
+
|
|
26
|
+
post(request: Request, response: Response) {
|
|
27
|
+
const updateRequest: Update = request.body
|
|
28
|
+
const project = this.repository.get(request.params.projectKey)
|
|
29
|
+
|
|
30
|
+
if (!project) {
|
|
31
|
+
return response.status(404).send({})
|
|
32
|
+
}
|
|
33
|
+
|
|
34
|
+
const updatedResource = this.repository.processUpdateActions(
|
|
35
|
+
request.params.projectKey,
|
|
36
|
+
project,
|
|
37
|
+
updateRequest.actions
|
|
38
|
+
)
|
|
39
|
+
|
|
40
|
+
return response.status(200).send({})
|
|
41
|
+
}
|
|
42
|
+
}
|
|
@@ -17,7 +17,7 @@ describe('Shipping method', () => {
|
|
|
17
17
|
const createResponse = await supertest(ctMock.app)
|
|
18
18
|
.post('/dummy/tax-categories')
|
|
19
19
|
.send(draft)
|
|
20
|
-
expect(createResponse.status).toEqual(
|
|
20
|
+
expect(createResponse.status).toEqual(201)
|
|
21
21
|
})
|
|
22
22
|
|
|
23
23
|
afterEach(async () => {
|
|
@@ -35,7 +35,7 @@ describe('Shipping method', () => {
|
|
|
35
35
|
.post('/dummy/shipping-methods')
|
|
36
36
|
.send(draft)
|
|
37
37
|
|
|
38
|
-
expect(response.status).toBe(
|
|
38
|
+
expect(response.status).toBe(201)
|
|
39
39
|
|
|
40
40
|
expect(response.body).toEqual({
|
|
41
41
|
createdAt: expect.anything(),
|
|
@@ -63,7 +63,7 @@ describe('Shipping method', () => {
|
|
|
63
63
|
.post('/dummy/shipping-methods')
|
|
64
64
|
.send(draft)
|
|
65
65
|
|
|
66
|
-
expect(createResponse.status).toBe(
|
|
66
|
+
expect(createResponse.status).toBe(201)
|
|
67
67
|
|
|
68
68
|
const response = await supertest(ctMock.app).get(
|
|
69
69
|
`/dummy/shipping-methods/${createResponse.body.id}`
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
import { ShoppingListRepository } from './../repositories/shopping-list'
|
|
2
|
+
import AbstractService from './abstract'
|
|
3
|
+
import { Router } from 'express'
|
|
4
|
+
import { AbstractStorage } from '../storage'
|
|
5
|
+
|
|
6
|
+
export class ShoppingListService extends AbstractService {
|
|
7
|
+
public repository: ShoppingListRepository
|
|
8
|
+
|
|
9
|
+
constructor(parent: Router, storage: AbstractStorage) {
|
|
10
|
+
super(parent)
|
|
11
|
+
this.repository = new ShoppingListRepository(storage)
|
|
12
|
+
}
|
|
13
|
+
|
|
14
|
+
getBasePath() {
|
|
15
|
+
return 'shopping-lists'
|
|
16
|
+
}
|
|
17
|
+
}
|
|
@@ -14,7 +14,7 @@ describe('State', () => {
|
|
|
14
14
|
.post('/dummy/states')
|
|
15
15
|
.send(draft)
|
|
16
16
|
|
|
17
|
-
expect(response.status).toBe(
|
|
17
|
+
expect(response.status).toBe(201)
|
|
18
18
|
|
|
19
19
|
expect(response.body).toEqual({
|
|
20
20
|
builtIn: false,
|
|
@@ -38,7 +38,7 @@ describe('State', () => {
|
|
|
38
38
|
.post('/dummy/states')
|
|
39
39
|
.send(draft)
|
|
40
40
|
|
|
41
|
-
expect(createResponse.status).toBe(
|
|
41
|
+
expect(createResponse.status).toBe(201)
|
|
42
42
|
|
|
43
43
|
const response = await supertest(ctMock.app).get(
|
|
44
44
|
`/dummy/states/${createResponse.body.id}`
|
|
@@ -0,0 +1,60 @@
|
|
|
1
|
+
import supertest from 'supertest'
|
|
2
|
+
import { CommercetoolsMock } from '../index'
|
|
3
|
+
|
|
4
|
+
const ctMock = new CommercetoolsMock()
|
|
5
|
+
|
|
6
|
+
describe('Store', () => {
|
|
7
|
+
beforeAll(() => {
|
|
8
|
+
ctMock.start()
|
|
9
|
+
})
|
|
10
|
+
|
|
11
|
+
afterEach(() => {
|
|
12
|
+
ctMock.clear()
|
|
13
|
+
})
|
|
14
|
+
|
|
15
|
+
afterAll(() => {
|
|
16
|
+
ctMock.stop()
|
|
17
|
+
})
|
|
18
|
+
|
|
19
|
+
test('Get store by key', async () => {
|
|
20
|
+
ctMock.project('dummy').add('store', {
|
|
21
|
+
id: 'fake-store',
|
|
22
|
+
version: 1,
|
|
23
|
+
createdAt: '',
|
|
24
|
+
lastModifiedAt: '',
|
|
25
|
+
key: 'STOREKEY',
|
|
26
|
+
distributionChannels: [],
|
|
27
|
+
})
|
|
28
|
+
|
|
29
|
+
const response = await supertest(ctMock.app).get(
|
|
30
|
+
`/dummy/stores/key=STOREKEY`
|
|
31
|
+
)
|
|
32
|
+
|
|
33
|
+
expect(response.status).toBe(200)
|
|
34
|
+
expect(response.body).toEqual({
|
|
35
|
+
createdAt: '',
|
|
36
|
+
distributionChannels: [],
|
|
37
|
+
id: 'fake-store',
|
|
38
|
+
key: 'STOREKEY',
|
|
39
|
+
lastModifiedAt: '',
|
|
40
|
+
version: 1,
|
|
41
|
+
})
|
|
42
|
+
})
|
|
43
|
+
|
|
44
|
+
test('Get store by 404 when not found by key', async () => {
|
|
45
|
+
ctMock.project('dummy').add('store', {
|
|
46
|
+
id: 'fake-store',
|
|
47
|
+
version: 1,
|
|
48
|
+
createdAt: '',
|
|
49
|
+
lastModifiedAt: '',
|
|
50
|
+
key: 'STOREKEY',
|
|
51
|
+
distributionChannels: [],
|
|
52
|
+
})
|
|
53
|
+
|
|
54
|
+
const response = await supertest(ctMock.app).get(
|
|
55
|
+
`/dummy/stores/key=DOESNOTEXIST`
|
|
56
|
+
)
|
|
57
|
+
|
|
58
|
+
expect(response.status).toBe(404)
|
|
59
|
+
})
|
|
60
|
+
})
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
import AbstractService from './abstract'
|
|
2
|
+
import { Router } from 'express'
|
|
3
|
+
import { AbstractStorage } from '../storage'
|
|
4
|
+
import { SubscriptionRepository } from '../repositories/subscription'
|
|
5
|
+
|
|
6
|
+
export class SubscriptionService extends AbstractService {
|
|
7
|
+
public repository: SubscriptionRepository
|
|
8
|
+
|
|
9
|
+
constructor(parent: Router, storage: AbstractStorage) {
|
|
10
|
+
super(parent)
|
|
11
|
+
this.repository = new SubscriptionRepository(storage)
|
|
12
|
+
}
|
|
13
|
+
|
|
14
|
+
getBasePath() {
|
|
15
|
+
return 'subscriptions'
|
|
16
|
+
}
|
|
17
|
+
}
|
|
@@ -18,7 +18,7 @@ describe('Tax Category', () => {
|
|
|
18
18
|
.post('/dummy/tax-categories')
|
|
19
19
|
.send(draft)
|
|
20
20
|
|
|
21
|
-
expect(response.status).toBe(
|
|
21
|
+
expect(response.status).toBe(201)
|
|
22
22
|
|
|
23
23
|
expect(response.body).toEqual({
|
|
24
24
|
createdAt: expect.anything(),
|
|
@@ -41,7 +41,7 @@ describe('Tax Category', () => {
|
|
|
41
41
|
.post('/dummy/tax-categories')
|
|
42
42
|
.send(draft)
|
|
43
43
|
|
|
44
|
-
expect(createResponse.status).toBe(
|
|
44
|
+
expect(createResponse.status).toBe(201)
|
|
45
45
|
|
|
46
46
|
const response = await supertest(ctMock.app).get(
|
|
47
47
|
`/dummy/tax-categories/${createResponse.body.id}`
|
|
@@ -61,7 +61,7 @@ describe('Tax Category', () => {
|
|
|
61
61
|
.post('/dummy/tax-categories')
|
|
62
62
|
.send(draft)
|
|
63
63
|
|
|
64
|
-
expect(createResponse.status).toBe(
|
|
64
|
+
expect(createResponse.status).toBe(201)
|
|
65
65
|
|
|
66
66
|
const response = await supertest(ctMock.app)
|
|
67
67
|
.get(`/dummy/tax-categories/`)
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
import { Router } from 'express'
|
|
2
|
+
import AbstractService from './abstract'
|
|
3
|
+
import { AbstractStorage } from '../storage'
|
|
4
|
+
import { ZoneRepository } from '../repositories/zone'
|
|
5
|
+
|
|
6
|
+
export class ZoneService extends AbstractService {
|
|
7
|
+
public repository: ZoneRepository
|
|
8
|
+
|
|
9
|
+
constructor(parent: Router, storage: AbstractStorage) {
|
|
10
|
+
super(parent)
|
|
11
|
+
this.repository = new ZoneRepository(storage)
|
|
12
|
+
}
|
|
13
|
+
|
|
14
|
+
getBasePath() {
|
|
15
|
+
return 'zones'
|
|
16
|
+
}
|
|
17
|
+
}
|