@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.
Files changed (44) hide show
  1. package/jest.config.js +9 -0
  2. package/lib/director/OrderPricingDirector.js +5 -5
  3. package/lib/director/OrderPricingDirector.js.map +1 -1
  4. package/lib/module/configureOrderDeliveriesModule.d.ts +2 -1
  5. package/lib/module/configureOrderDeliveriesModule.js +30 -28
  6. package/lib/module/configureOrderDeliveriesModule.js.map +1 -1
  7. package/lib/module/configureOrderDiscountsModule.d.ts +2 -1
  8. package/lib/module/configureOrderDiscountsModule.js +40 -40
  9. package/lib/module/configureOrderDiscountsModule.js.map +1 -1
  10. package/lib/module/configureOrderPaymentsModule.d.ts +3 -1
  11. package/lib/module/configureOrderPaymentsModule.js +65 -39
  12. package/lib/module/configureOrderPaymentsModule.js.map +1 -1
  13. package/lib/module/configureOrderPositionsModule.d.ts +2 -1
  14. package/lib/module/configureOrderPositionsModule.js +39 -33
  15. package/lib/module/configureOrderPositionsModule.js.map +1 -1
  16. package/lib/module/configureOrdersModule-mutations.js +28 -33
  17. package/lib/module/configureOrdersModule-mutations.js.map +1 -1
  18. package/lib/module/configureOrdersModule-processing.js +55 -61
  19. package/lib/module/configureOrdersModule-processing.js.map +1 -1
  20. package/lib/module/configureOrdersModule-queries.d.ts +3 -2
  21. package/lib/module/configureOrdersModule-queries.js +1 -1
  22. package/lib/module/configureOrdersModule-queries.js.map +1 -1
  23. package/lib/module/configureOrdersModule-transformations.js +10 -10
  24. package/lib/module/configureOrdersModule-transformations.js.map +1 -1
  25. package/lib/module/configureOrdersModule.js +24 -26
  26. package/lib/module/configureOrdersModule.js.map +1 -1
  27. package/lib/service/createUserCartService.js +8 -8
  28. package/lib/service/createUserCartService.js.map +1 -1
  29. package/lib/service/migrateOrderCartService.js +3 -9
  30. package/lib/service/migrateOrderCartService.js.map +1 -1
  31. package/package.json +10 -9
  32. package/src/director/OrderPricingDirector.ts +5 -5
  33. package/src/module/configureOrderDeliveriesModule.ts +36 -46
  34. package/src/module/configureOrderDiscountsModule.ts +47 -59
  35. package/src/module/configureOrderPaymentsModule.ts +95 -78
  36. package/src/module/configureOrderPositionsModule.ts +61 -50
  37. package/src/module/configureOrdersModule-mutations.ts +50 -65
  38. package/src/module/configureOrdersModule-processing.ts +78 -88
  39. package/src/module/configureOrdersModule-queries.ts +1 -1
  40. package/src/module/configureOrdersModule-transformations.ts +10 -10
  41. package/src/module/configureOrdersModule.ts +29 -42
  42. package/src/service/createUserCartService.ts +20 -24
  43. package/src/service/migrateOrderCartService.ts +3 -11
  44. 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
- requestContext,
5
+ unchainedAPI,
6
6
  ) => {
7
- const { countryContext, modules, services } = requestContext;
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: normalizedCountryCode,
11
+ isoCode: countryCode,
14
12
  },
15
- requestContext,
13
+ unchainedAPI,
16
14
  );
17
15
 
18
- const order = await modules.orders.create(
19
- {
20
- orderNumber,
21
- currency,
22
- countryCode: normalizedCountryCode,
23
- billingAddress: user.lastBillingAddress || user.profile?.address,
24
- contact:
25
- user.lastContact ||
26
- (!user.guest
27
- ? {
28
- telNumber: user.profile?.phoneMobile,
29
- emailAddress: modules.users.primaryEmail(user)?.address,
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, requestContext);
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, artificialContext);
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, artificialContext);
33
- return unchainedAPI.modules.orders.updateCalculation(toCart._id, artificialContext);
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 { assert } from 'chai';
2
- import { initDb } from '@unchainedshop/mongodb';
3
- import { configureOrdersModule } from '@unchainedshop/core-orders';
4
- import { OrdersModule } from '@unchainedshop/types/orders';
5
-
6
- describe('Test exports', () => {
7
- let module: OrdersModule;
8
-
9
- before(async () => {
10
- const db = await initDb();
11
- module = await configureOrdersModule({ db }).catch((error) => {
12
- console.error(error);
13
-
14
- throw error;
15
- });
16
- });
17
-
18
- it('Insert order', async () => {
19
- let order = await module.create(
20
- {
21
- billingAddress: {
22
- lastName: 'Mustermann',
23
- firstName: 'Max',
24
- addressLine: 'Teststreet 11',
25
- city: 'Zürich',
26
- postalCode: '8009',
27
- company: 'Unchained Commerce',
28
- countryCode: 'CH',
29
- },
30
- orderNumber: 'Nr-1234123',
31
- currency: 'CHF',
32
- countryCode: 'CH',
33
- },
34
- 'Test-User-1'
35
- );
36
-
37
- assert.ok(order);
38
- const orderId = order._id;
39
- order = await module.findOrder({ orderId });
40
-
41
- assert.ok(order);
42
-
43
- const deletedCount = await module
44
- .delete(orderId, 'Test-User-1')
45
- .catch((error) => {
46
- return 0;
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
- assert.equal(deletedCount, 1);
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
  });