@unchainedshop/core-orders 2.0.0-beta7 → 2.0.0-beta9
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/jest.config.js +9 -0
- package/lib/director/OrderPricingDirector.js +5 -5
- package/lib/director/OrderPricingDirector.js.map +1 -1
- package/lib/module/configureOrderDeliveriesModule.d.ts +2 -1
- package/lib/module/configureOrderDeliveriesModule.js +30 -28
- package/lib/module/configureOrderDeliveriesModule.js.map +1 -1
- package/lib/module/configureOrderDiscountsModule.d.ts +2 -1
- package/lib/module/configureOrderDiscountsModule.js +40 -40
- package/lib/module/configureOrderDiscountsModule.js.map +1 -1
- package/lib/module/configureOrderPaymentsModule.d.ts +3 -1
- package/lib/module/configureOrderPaymentsModule.js +65 -39
- package/lib/module/configureOrderPaymentsModule.js.map +1 -1
- package/lib/module/configureOrderPositionsModule.d.ts +2 -1
- package/lib/module/configureOrderPositionsModule.js +39 -33
- package/lib/module/configureOrderPositionsModule.js.map +1 -1
- package/lib/module/configureOrdersModule-mutations.js +28 -33
- package/lib/module/configureOrdersModule-mutations.js.map +1 -1
- package/lib/module/configureOrdersModule-processing.js +55 -61
- package/lib/module/configureOrdersModule-processing.js.map +1 -1
- package/lib/module/configureOrdersModule-queries.d.ts +3 -2
- package/lib/module/configureOrdersModule-queries.js +1 -1
- package/lib/module/configureOrdersModule-queries.js.map +1 -1
- package/lib/module/configureOrdersModule-transformations.js +10 -10
- package/lib/module/configureOrdersModule-transformations.js.map +1 -1
- package/lib/module/configureOrdersModule.js +24 -26
- package/lib/module/configureOrdersModule.js.map +1 -1
- package/lib/service/createUserCartService.js +8 -8
- package/lib/service/createUserCartService.js.map +1 -1
- package/lib/service/migrateOrderCartService.js +3 -9
- package/lib/service/migrateOrderCartService.js.map +1 -1
- package/package.json +10 -9
- package/src/director/OrderPricingDirector.ts +5 -5
- package/src/module/configureOrderDeliveriesModule.ts +36 -46
- package/src/module/configureOrderDiscountsModule.ts +47 -59
- package/src/module/configureOrderPaymentsModule.ts +95 -78
- package/src/module/configureOrderPositionsModule.ts +61 -50
- package/src/module/configureOrdersModule-mutations.ts +50 -65
- package/src/module/configureOrdersModule-processing.ts +78 -88
- package/src/module/configureOrdersModule-queries.ts +1 -1
- package/src/module/configureOrdersModule-transformations.ts +10 -10
- package/src/module/configureOrdersModule.ts +29 -42
- package/src/service/createUserCartService.ts +20 -24
- package/src/service/migrateOrderCartService.ts +3 -11
- package/tests/orders-index.test.ts +103 -48
|
@@ -2,37 +2,33 @@ import { CreateUserCartService } from '@unchainedshop/types/orders';
|
|
|
2
2
|
|
|
3
3
|
export const createUserCartService: CreateUserCartService = async (
|
|
4
4
|
{ user, orderNumber, countryCode },
|
|
5
|
-
|
|
5
|
+
unchainedAPI,
|
|
6
6
|
) => {
|
|
7
|
-
const {
|
|
8
|
-
|
|
9
|
-
const normalizedCountryCode = countryCode || countryContext;
|
|
7
|
+
const { modules, services } = unchainedAPI;
|
|
10
8
|
|
|
11
9
|
const currency = await services.countries.resolveDefaultCurrencyCode(
|
|
12
10
|
{
|
|
13
|
-
isoCode:
|
|
11
|
+
isoCode: countryCode,
|
|
14
12
|
},
|
|
15
|
-
|
|
13
|
+
unchainedAPI,
|
|
16
14
|
);
|
|
17
15
|
|
|
18
|
-
const order = await modules.orders.create(
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
user._id,
|
|
34
|
-
);
|
|
16
|
+
const order = await modules.orders.create({
|
|
17
|
+
userId: user._id,
|
|
18
|
+
orderNumber,
|
|
19
|
+
currency,
|
|
20
|
+
countryCode,
|
|
21
|
+
billingAddress: user.lastBillingAddress || user.profile?.address,
|
|
22
|
+
contact:
|
|
23
|
+
user.lastContact ||
|
|
24
|
+
(!user.guest
|
|
25
|
+
? {
|
|
26
|
+
telNumber: user.profile?.phoneMobile,
|
|
27
|
+
emailAddress: modules.users.primaryEmail(user)?.address,
|
|
28
|
+
}
|
|
29
|
+
: {}),
|
|
30
|
+
});
|
|
35
31
|
|
|
36
|
-
await modules.orders.initProviders(order,
|
|
32
|
+
await modules.orders.initProviders(order, unchainedAPI);
|
|
37
33
|
return order;
|
|
38
34
|
};
|
|
@@ -1,4 +1,3 @@
|
|
|
1
|
-
import { Context } from '@unchainedshop/types/api';
|
|
2
1
|
import { MigrateOrderCartsService } from '@unchainedshop/types/orders';
|
|
3
2
|
|
|
4
3
|
export const migrateOrderCartsService: MigrateOrderCartsService = async (
|
|
@@ -13,22 +12,15 @@ export const migrateOrderCartsService: MigrateOrderCartsService = async (
|
|
|
13
12
|
return toCart;
|
|
14
13
|
}
|
|
15
14
|
|
|
16
|
-
const artificialContext: Context = {
|
|
17
|
-
countryContext,
|
|
18
|
-
user: toUser,
|
|
19
|
-
userId: toUser._id,
|
|
20
|
-
...unchainedAPI,
|
|
21
|
-
} as Context;
|
|
22
|
-
|
|
23
15
|
if (!toCart || !shouldMerge) {
|
|
24
16
|
// No destination cart, move whole cart
|
|
25
17
|
unchainedAPI.modules.orders.setCartOwner({ orderId: fromCart._id, userId: toUser._id });
|
|
26
|
-
return unchainedAPI.modules.orders.updateCalculation(fromCart._id,
|
|
18
|
+
return unchainedAPI.modules.orders.updateCalculation(fromCart._id, unchainedAPI);
|
|
27
19
|
}
|
|
28
20
|
|
|
29
21
|
// Move positions
|
|
30
22
|
unchainedAPI.modules.orders.moveCartPositions({ fromOrderId: fromCart._id, toOrderId: toCart._id });
|
|
31
23
|
|
|
32
|
-
await unchainedAPI.modules.orders.updateCalculation(fromCart._id,
|
|
33
|
-
return unchainedAPI.modules.orders.updateCalculation(toCart._id,
|
|
24
|
+
await unchainedAPI.modules.orders.updateCalculation(fromCart._id, unchainedAPI);
|
|
25
|
+
return unchainedAPI.modules.orders.updateCalculation(toCart._id, unchainedAPI);
|
|
34
26
|
};
|
|
@@ -1,50 +1,105 @@
|
|
|
1
|
-
import {
|
|
2
|
-
import {
|
|
3
|
-
import {
|
|
4
|
-
import {
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
}
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
)
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
1
|
+
import {buildFindByIdSelector as buildFindByIdSelectorForDelivery} from '../src/module/configureOrderDeliveriesModule'
|
|
2
|
+
import {buildFindByIdSelector as buildFindByIdSelectorForDiscount } from '../src/module/configureOrderDiscountsModule'
|
|
3
|
+
import {buildFindByIdSelector as buildFindByIdSelectorForPayment, buildFindByContextDataSelector } from '../src/module/configureOrderPaymentsModule'
|
|
4
|
+
import {buildFindByIdSelector as buildFindByIdSelectorForPosition } from '../src/module/configureOrderPositionsModule'
|
|
5
|
+
import {buildFindSelector as buildFindSelectorForOrder} from '../src/module/configureOrdersModule-queries'
|
|
6
|
+
|
|
7
|
+
|
|
8
|
+
describe('OrderPosition', () => {
|
|
9
|
+
describe('buildFindSelector', () => {
|
|
10
|
+
it('Return filter object when passed no argument', async () => {
|
|
11
|
+
expect(buildFindSelectorForOrder({})).toEqual({ status: { '$ne': null } })
|
|
12
|
+
|
|
13
|
+
});
|
|
14
|
+
|
|
15
|
+
it('Return filter object when passed no argument includeCarts, queryString, status, userId and (status should take precedence over includeCarts', async () => {
|
|
16
|
+
expect(buildFindSelectorForOrder({includeCarts: false, queryString: "hello world", status: 'CONFIRMED', userId: "admin-id"})).toEqual({
|
|
17
|
+
userId: 'admin-id',
|
|
18
|
+
status: 'CONFIRMED',
|
|
19
|
+
'$text': { '$search': 'hello world' }
|
|
20
|
+
}
|
|
21
|
+
)
|
|
22
|
+
|
|
23
|
+
});
|
|
24
|
+
|
|
25
|
+
it('Return filter object when passed no argument includeCarts, queryString, userId ', async () => {
|
|
26
|
+
expect(buildFindSelectorForOrder({includeCarts: true, queryString: "hello world", userId: "admin-id"})).toEqual( {
|
|
27
|
+
userId: 'admin-id',
|
|
28
|
+
|
|
29
|
+
'$text': { '$search': 'hello world' }
|
|
30
|
+
}
|
|
31
|
+
)
|
|
32
|
+
|
|
33
|
+
});
|
|
34
|
+
|
|
35
|
+
it('Return filter object when passed no argument queryString, userId ', async () => {
|
|
36
|
+
expect(buildFindSelectorForOrder({ queryString: "hello world", userId: "admin-id"})).toEqual( {
|
|
37
|
+
userId: 'admin-id',
|
|
38
|
+
'$text': { '$search': 'hello world' },
|
|
39
|
+
status: { '$ne': null },
|
|
40
|
+
}
|
|
41
|
+
)
|
|
42
|
+
|
|
43
|
+
});
|
|
44
|
+
|
|
45
|
+
it('Return filter object when passed no argument queryString ', async () => {
|
|
46
|
+
expect(buildFindSelectorForOrder({ queryString: "hello world"})).toEqual( {
|
|
47
|
+
'$text': { '$search': 'hello world' },
|
|
48
|
+
status: { '$ne': null },
|
|
49
|
+
})
|
|
50
|
+
|
|
51
|
+
});
|
|
52
|
+
|
|
53
|
+
})
|
|
54
|
+
|
|
55
|
+
});
|
|
56
|
+
|
|
57
|
+
describe('OrderDelivery', () => {
|
|
58
|
+
|
|
59
|
+
describe('buildFindByIdSelector', () => {
|
|
60
|
+
it('Return correct db _id selector', async () => {
|
|
61
|
+
|
|
62
|
+
expect(buildFindByIdSelectorForDelivery('order-delivery-id')).toEqual({ _id: 'order-delivery-id' })
|
|
63
|
+
});
|
|
64
|
+
})
|
|
65
|
+
|
|
66
|
+
});
|
|
67
|
+
|
|
68
|
+
|
|
69
|
+
describe('OrderDiscount', () => {
|
|
70
|
+
|
|
71
|
+
describe('buildFindByIdSelector', () => {
|
|
72
|
+
it('Return correct db _id selector', async () => {
|
|
73
|
+
|
|
74
|
+
expect(buildFindByIdSelectorForDiscount('order-discount-id')).toEqual({ _id: 'order-discount-id' })
|
|
75
|
+
});
|
|
76
|
+
})
|
|
77
|
+
|
|
78
|
+
});
|
|
79
|
+
|
|
80
|
+
describe('OrderPayment', () => {
|
|
81
|
+
|
|
82
|
+
describe('buildFindByIdSelector', () => {
|
|
83
|
+
it('Return correct db _id selector', async () => {
|
|
84
|
+
|
|
85
|
+
expect(buildFindByIdSelectorForPayment('order-payment-id')).toEqual({ _id: 'order-payment-id' })
|
|
86
|
+
});
|
|
87
|
+
})
|
|
88
|
+
|
|
89
|
+
describe('buildFindByContextDataSelector', () => {
|
|
90
|
+
it('Return correct db context field selector object', async () => {
|
|
91
|
+
expect(buildFindByContextDataSelector({'first': 'first value', 'second': 'second value'})).toEqual({ 'context.first': 'first value', 'context.second': 'second value' })
|
|
47
92
|
});
|
|
48
|
-
|
|
49
|
-
|
|
93
|
+
})
|
|
94
|
+
|
|
95
|
+
});
|
|
96
|
+
|
|
97
|
+
|
|
98
|
+
describe('OrderPosition', () => {
|
|
99
|
+
describe('buildFindByIdSelector', () => {
|
|
100
|
+
it('Return correct db _id selector', async () => {
|
|
101
|
+
expect(buildFindByIdSelectorForPosition('order-position-id')).toEqual({ _id: 'order-position-id' })
|
|
102
|
+
});
|
|
103
|
+
})
|
|
104
|
+
|
|
50
105
|
});
|