Skip to content

Commit 265d54a

Browse files
authored
feat(driver,customer-order)!: add Magento 2.4.6 support (#2896)
BREAKING CHANGE: `@daffodil/customer/driver/magento` has been renamed to `@daffodil/customer/driver/magento/2-4-5`
1 parent 0c1ad29 commit 265d54a

File tree

123 files changed

+1631
-42
lines changed

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

123 files changed

+1631
-42
lines changed
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,6 @@
1+
{
2+
"$schema": "../../../../../node_modules/ng-packagr/ng-entrypoint.schema.json",
3+
"lib": {
4+
"entryFile": "src/index.ts"
5+
}
6+
}

libs/customer-order/driver/magento/src/injection-tokens/fragments/order.token.spec.ts libs/customer-order/driver/magento/2-4-5/src/injection-tokens/fragments/order.token.spec.ts

+1-1
Original file line numberDiff line numberDiff line change
@@ -7,7 +7,7 @@ import {
77
DAFF_CUSTOMER_ORDER_MAGENTO_EXTRA_ORDER_FRAGMENTS,
88
} from './order.token';
99

10-
describe('@daffodil/customer-order/driver/magento | daffProvideCustomerOrderMagentoExtraOrderFragments', () => {
10+
describe('@daffodil/customer-order/driver/magento/2-4-5 | daffProvideCustomerOrderMagentoExtraOrderFragments', () => {
1111
let fragments: DocumentNode[];
1212
let result: DocumentNode[];
1313

libs/customer-order/driver/magento/src/injection-tokens/transforms/extra.token.spec.ts libs/customer-order/driver/magento/2-4-5/src/injection-tokens/transforms/extra.token.spec.ts

+2-2
Original file line numberDiff line numberDiff line change
@@ -1,13 +1,13 @@
11
import { TestBed } from '@angular/core/testing';
22

3-
import { DaffMagentoCustomerOrderExtraTransform } from '@daffodil/customer-order/driver/magento';
3+
import { DaffMagentoCustomerOrderExtraTransform } from '@daffodil/customer-order/driver/magento/2-4-5';
44

55
import {
66
daffProvideCustomerOrderMagentoExtraOrderTransforms,
77
DAFF_CUSTOMER_ORDER_MAGENTO_EXTRA_ORDER_TRANSFORMS,
88
} from './extra.token';
99

10-
describe('@daffodil/customer-order/driver/magento | daffProvideCustomerOrderMagentoExtraOrderTransforms', () => {
10+
describe('@daffodil/customer-order/driver/magento/2-4-5 | daffProvideCustomerOrderMagentoExtraOrderTransforms', () => {
1111
let transforms: DaffMagentoCustomerOrderExtraTransform[];
1212
let result: DaffMagentoCustomerOrderExtraTransform[];
1313

libs/customer-order/driver/magento/src/injection-tokens/transforms/token.spec.ts libs/customer-order/driver/magento/2-4-5/src/injection-tokens/transforms/token.spec.ts

+3-3
Original file line numberDiff line numberDiff line change
@@ -5,13 +5,13 @@ import {
55
DaffMagentoCustomerOrderTransform,
66
daffProvideCustomerOrderMagentoExtraOrderTransforms,
77
MagentoCustomerOrder,
8-
} from '@daffodil/customer-order/driver/magento';
9-
import { MagentoCustomerOrderFactory } from '@daffodil/customer-order/driver/magento/testing';
8+
} from '@daffodil/customer-order/driver/magento/2-4-5';
9+
import { MagentoCustomerOrderFactory } from '@daffodil/customer-order/driver/magento/2-4-5/testing';
1010
import { DaffOrder } from '@daffodil/order';
1111

1212
import { DAFF_CUSTOMER_ORDER_MAGENTO_ORDER_TRANSFORM } from './token';
1313

14-
describe('@daffodil/customer-order/driver/magento | DAFF_CUSTOMER_ORDER_MAGENTO_ORDER_TRANSFORM', () => {
14+
describe('@daffodil/customer-order/driver/magento/2-4-5 | DAFF_CUSTOMER_ORDER_MAGENTO_ORDER_TRANSFORM', () => {
1515
let magentoOrderFactory: MagentoCustomerOrderFactory;
1616
let magentoOrder: MagentoCustomerOrder;
1717
let result: DaffOrder;

libs/customer-order/driver/magento/src/order.service.spec.ts libs/customer-order/driver/magento/2-4-5/src/order.service.spec.ts

+3-3
Original file line numberDiff line numberDiff line change
@@ -17,16 +17,16 @@ import {
1717
MagentoCustomerOrders,
1818
MagentoGetCustomerOrderResponse,
1919
MagentoGetCustomerOrdersResponse,
20-
} from '@daffodil/customer-order/driver/magento';
21-
import { MagentoCustomerOrdersFactory } from '@daffodil/customer-order/driver/magento/testing';
20+
} from '@daffodil/customer-order/driver/magento/2-4-5';
21+
import { MagentoCustomerOrdersFactory } from '@daffodil/customer-order/driver/magento/2-4-5/testing';
2222
import {
2323
DaffDriverMagentoError,
2424
schema,
2525
} from '@daffodil/driver/magento';
2626

2727
import { DaffCustomerOrderMagentoService } from './order.service';
2828

29-
describe('@daffodil/customer-order/driver/magento | DaffCustomerOrderMagentoService', () => {
29+
describe('@daffodil/customer-order/driver/magento/2-4-5 | DaffCustomerOrderMagentoService', () => {
3030
let service: DaffCustomerOrderMagentoService;
3131
let controller: ApolloTestingController;
3232
let authStorageSpy: jasmine.SpyObj<DaffAuthStorageService>;

libs/customer-order/driver/magento/src/transforms/responses/order.spec.ts libs/customer-order/driver/magento/2-4-5/src/transforms/responses/order.spec.ts

+3-3
Original file line numberDiff line numberDiff line change
@@ -1,12 +1,12 @@
11
import { TestBed } from '@angular/core/testing';
22

3-
import { MagentoCustomerOrder } from '@daffodil/customer-order/driver/magento';
4-
import { MagentoCustomerOrderFactory } from '@daffodil/customer-order/driver/magento/testing';
3+
import { MagentoCustomerOrder } from '@daffodil/customer-order/driver/magento/2-4-5';
4+
import { MagentoCustomerOrderFactory } from '@daffodil/customer-order/driver/magento/2-4-5/testing';
55
import { DaffOrder } from '@daffodil/order';
66

77
import { daffMagentoCustomerOrderTransformOrder } from './order';
88

9-
describe('@daffodil/customer-order/driver/magento | daffMagentoCustomerOrderTransformOrder', () => {
9+
describe('@daffodil/customer-order/driver/magento/2-4-5 | daffMagentoCustomerOrderTransformOrder', () => {
1010
let orderFactory: MagentoCustomerOrderFactory;
1111

1212
let mockMagentoOrder: MagentoCustomerOrder;

libs/customer-order/driver/magento/src/validators/get-order.spec.ts libs/customer-order/driver/magento/2-4-5/src/validators/get-order.spec.ts

+3-3
Original file line numberDiff line numberDiff line change
@@ -2,12 +2,12 @@ import { TestBed } from '@angular/core/testing';
22
import { ApolloQueryResult } from '@apollo/client/core';
33

44
import { DaffCustomerInvalidAPIResponseError } from '@daffodil/customer-order/driver';
5-
import { MagentoGetCustomerOrderResponse } from '@daffodil/customer-order/driver/magento';
6-
import { MagentoCustomerOrderFactory } from '@daffodil/customer-order/driver/magento/testing';
5+
import { MagentoGetCustomerOrderResponse } from '@daffodil/customer-order/driver/magento/2-4-5';
6+
import { MagentoCustomerOrderFactory } from '@daffodil/customer-order/driver/magento/2-4-5/testing';
77

88
import { validateGetCustomerOrderResponse as validator } from './get-order';
99

10-
describe('@daffodil/customer-order/driver/magento | validateGetCustomerOrderResponse', () => {
10+
describe('@daffodil/customer-order/driver/magento/2-4-5 | validateGetCustomerOrderResponse', () => {
1111
let response: ApolloQueryResult<MagentoGetCustomerOrderResponse>;
1212
let orderFactory: MagentoCustomerOrderFactory;
1313

libs/customer-order/driver/magento/src/validators/get-orders.spec.ts libs/customer-order/driver/magento/2-4-5/src/validators/get-orders.spec.ts

+3-3
Original file line numberDiff line numberDiff line change
@@ -2,12 +2,12 @@ import { TestBed } from '@angular/core/testing';
22
import { ApolloQueryResult } from '@apollo/client/core';
33

44
import { DaffCustomerInvalidAPIResponseError } from '@daffodil/customer-order/driver';
5-
import { MagentoGetCustomerOrdersResponse } from '@daffodil/customer-order/driver/magento';
6-
import { MagentoCustomerOrdersFactory } from '@daffodil/customer-order/driver/magento/testing';
5+
import { MagentoGetCustomerOrdersResponse } from '@daffodil/customer-order/driver/magento/2-4-5';
6+
import { MagentoCustomerOrdersFactory } from '@daffodil/customer-order/driver/magento/2-4-5/testing';
77

88
import { validateGetCustomerOrdersResponse as validator } from './get-orders';
99

10-
describe('@daffodil/customer-order/driver/magento | validateGetCustomerOrdersResponse', () => {
10+
describe('@daffodil/customer-order/driver/magento/2-4-5 | validateGetCustomerOrdersResponse', () => {
1111
let response: ApolloQueryResult<MagentoGetCustomerOrdersResponse>;
1212
let ordersFactory: MagentoCustomerOrdersFactory;
1313

libs/customer-order/driver/magento/testing/src/factories/order.factory.spec.ts libs/customer-order/driver/magento/2-4-5/testing/src/factories/order.factory.spec.ts

+1-1
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
import { TestBed } from '@angular/core/testing';
22

3-
import { MagentoCustomerOrder } from '@daffodil/customer-order/driver/magento';
3+
import { MagentoCustomerOrder } from '@daffodil/customer-order/driver/magento/2-4-5';
44

55
import { MagentoCustomerOrderFactory } from './order.factory';
66

libs/customer-order/driver/magento/testing/src/factories/order.factory.ts libs/customer-order/driver/magento/2-4-5/testing/src/factories/order.factory.ts

+1-1
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,7 @@ import { Injectable } from '@angular/core';
22
import { faker } from '@faker-js/faker/locale/en_US';
33

44
import { DaffModelFactory } from '@daffodil/core/testing';
5-
import { MagentoCustomerOrder } from '@daffodil/customer-order/driver/magento';
5+
import { MagentoCustomerOrder } from '@daffodil/customer-order/driver/magento/2-4-5';
66
import {
77
MagentoOrderAddressFactory,
88
MagentoOrderInvoiceFactory,

libs/customer-order/driver/magento/testing/src/factories/orders.factory.spec.ts libs/customer-order/driver/magento/2-4-5/testing/src/factories/orders.factory.spec.ts

+2-2
Original file line numberDiff line numberDiff line change
@@ -1,10 +1,10 @@
11
import { TestBed } from '@angular/core/testing';
22

3-
import { MagentoCustomerOrders } from '@daffodil/customer-order/driver/magento';
3+
import { MagentoCustomerOrders } from '@daffodil/customer-order/driver/magento/2-4-5';
44

55
import { MagentoCustomerOrdersFactory } from './orders.factory';
66

7-
describe('@daffodil/customer-order/driver/magento/testing | MagentoCustomerOrdersFactory', () => {
7+
describe('@daffodil/customer-order/driver/magento/2-4-5/testing | MagentoCustomerOrdersFactory', () => {
88
let factory: MagentoCustomerOrdersFactory;
99

1010
beforeEach(() => {

libs/customer-order/driver/magento/testing/src/factories/orders.factory.ts libs/customer-order/driver/magento/2-4-5/testing/src/factories/orders.factory.ts

+1-1
Original file line numberDiff line numberDiff line change
@@ -5,7 +5,7 @@ import { DaffModelFactory } from '@daffodil/core/testing';
55
import {
66
MagentoCustomerOrders,
77
MagentoCustomerOrder,
8-
} from '@daffodil/customer-order/driver/magento';
8+
} from '@daffodil/customer-order/driver/magento/2-4-5';
99
import { MagentoSearchResultPageInfo } from '@daffodil/driver/magento';
1010
import { MagentoSearchResultPageInfoFactory } from '@daffodil/driver/magento/testing';
1111

Original file line numberDiff line numberDiff line change
@@ -0,0 +1,6 @@
1+
{
2+
"$schema": "../../../../../node_modules/ng-packagr/ng-entrypoint.schema.json",
3+
"lib": {
4+
"entryFile": "src/index.ts"
5+
}
6+
}
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,17 @@
1+
import { DaffSortOptions } from '@daffodil/core';
2+
3+
import { MagentoCustomerOrderSortableField } from '../../models/public_api';
4+
5+
export const magentoCustomerOrderSortFields: DaffSortOptions = {
6+
options: [
7+
{
8+
label: 'Date',
9+
value: MagentoCustomerOrderSortableField.CREATED_AT,
10+
},
11+
{
12+
label: 'Number',
13+
value: MagentoCustomerOrderSortableField.NUMBER,
14+
},
15+
],
16+
default: MagentoCustomerOrderSortableField.CREATED_AT,
17+
};
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,30 @@
1+
import { CommonModule } from '@angular/common';
2+
import {
3+
NgModule,
4+
ModuleWithProviders,
5+
} from '@angular/core';
6+
7+
import { DaffOrderDriver } from '@daffodil/order/driver';
8+
9+
import { DaffCustomerOrderMagentoService } from './order.service';
10+
import { MagentoCustomerOrderCollectionTransformer } from './transforms/public_api';
11+
12+
@NgModule({
13+
imports: [
14+
CommonModule,
15+
],
16+
})
17+
export class DaffCustomerOrderMagentoDriverModule {
18+
static forRoot(): ModuleWithProviders<DaffCustomerOrderMagentoDriverModule> {
19+
return {
20+
ngModule: DaffCustomerOrderMagentoDriverModule,
21+
providers: [
22+
MagentoCustomerOrderCollectionTransformer,
23+
{
24+
provide: DaffOrderDriver,
25+
useExisting: DaffCustomerOrderMagentoService,
26+
},
27+
],
28+
};
29+
}
30+
}
Original file line numberDiff line numberDiff line change
@@ -0,0 +1 @@
1+
export { transformMagentoReviewsError } from './transform';
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,6 @@
1+
import { DaffCustomerInvalidAPIResponseError } from '@daffodil/customer-order/driver';
2+
import { daffTransformMagentoError } from '@daffodil/driver/magento';
3+
4+
export function transformMagentoReviewsError(error: any) {
5+
return daffTransformMagentoError(error, {}) || new DaffCustomerInvalidAPIResponseError(error.message);
6+
}
Original file line numberDiff line numberDiff line change
@@ -0,0 +1 @@
1+
export * from './public_api';
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,42 @@
1+
import { TestBed } from '@angular/core/testing';
2+
import { gql } from 'apollo-angular';
3+
import { DocumentNode } from 'graphql';
4+
5+
import {
6+
daffProvideCustomerOrderMagentoExtraOrderFragments,
7+
DAFF_CUSTOMER_ORDER_MAGENTO_EXTRA_ORDER_FRAGMENTS,
8+
} from './order.token';
9+
10+
describe('@daffodil/customer-order/driver/magento/2-4-6 | daffProvideCustomerOrderMagentoExtraOrderFragments', () => {
11+
let fragments: DocumentNode[];
12+
let result: DocumentNode[];
13+
14+
beforeEach(() => {
15+
fragments = [
16+
gql`
17+
fragment one on Query {
18+
__typename
19+
}
20+
`,
21+
gql`
22+
fragment two on Query {
23+
__typename
24+
}
25+
`,
26+
];
27+
28+
TestBed.configureTestingModule({
29+
providers: [
30+
...daffProvideCustomerOrderMagentoExtraOrderFragments(...fragments),
31+
],
32+
});
33+
34+
result = TestBed.inject(DAFF_CUSTOMER_ORDER_MAGENTO_EXTRA_ORDER_FRAGMENTS);
35+
});
36+
37+
it('should provide the fragments to the token', () => {
38+
fragments.forEach(fragment => {
39+
expect(result).toContain(fragment);
40+
});
41+
});
42+
});
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,42 @@
1+
import {
2+
InjectionToken,
3+
Provider,
4+
} from '@angular/core';
5+
import { DocumentNode } from 'graphql';
6+
7+
/**
8+
* A multi-provider injection token for providing extra GraphQL fragments that will be spread into order queries.
9+
* This can be used to retrieve additional data that is not covered by the standard Daffodil interfaces.
10+
*
11+
* Fragment structure is platform-specific and this feature should be used with care.
12+
*
13+
* This can increase query complexity above the Magento default of 300.
14+
* Daffodil only guarantees that stock queries don't exceed the limit of 300.
15+
* Apps using this token should therefore increase the query complexity limit
16+
* to accommodate the extra complexity contributed by the provided fragments.
17+
*/
18+
export const DAFF_CUSTOMER_ORDER_MAGENTO_EXTRA_ORDER_FRAGMENTS = new InjectionToken<DocumentNode[]>(
19+
'DAFF_CUSTOMER_ORDER_MAGENTO_EXTRA_ORDER_FRAGMENTS',
20+
{ factory: () => []},
21+
);
22+
23+
/**
24+
* Provides extra GraphQL fragments for the Magento order driver.
25+
*
26+
* See {@link DAFF_CUSTOMER_ORDER_MAGENTO_EXTRA_ORDER_FRAGMENTS}.
27+
*
28+
* ```ts
29+
* providers: [
30+
* ...daffProvideCustomerOrderMagentoExtraOrderFragments(
31+
* myExtraOrderFragment
32+
* )
33+
* ]
34+
* ```
35+
*/
36+
export function daffProvideCustomerOrderMagentoExtraOrderFragments(...fragments: DocumentNode[]): Provider[] {
37+
return fragments.map(fragment => ({
38+
provide: DAFF_CUSTOMER_ORDER_MAGENTO_EXTRA_ORDER_FRAGMENTS,
39+
useValue: fragment,
40+
multi: true,
41+
}));
42+
}
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,9 @@
1+
export {
2+
daffProvideCustomerOrderMagentoExtraOrderFragments,
3+
DAFF_CUSTOMER_ORDER_MAGENTO_EXTRA_ORDER_FRAGMENTS,
4+
} from './fragments/order.token';
5+
export {
6+
daffProvideCustomerOrderMagentoExtraOrderTransforms,
7+
DAFF_CUSTOMER_ORDER_MAGENTO_EXTRA_ORDER_TRANSFORMS,
8+
} from './transforms/extra.token';
9+
export { DAFF_CUSTOMER_ORDER_MAGENTO_ORDER_TRANSFORM } from './transforms/token';
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,34 @@
1+
import { TestBed } from '@angular/core/testing';
2+
3+
import { DaffMagentoCustomerOrderExtraTransform } from '@daffodil/customer-order/driver/magento/2-4-6';
4+
5+
import {
6+
daffProvideCustomerOrderMagentoExtraOrderTransforms,
7+
DAFF_CUSTOMER_ORDER_MAGENTO_EXTRA_ORDER_TRANSFORMS,
8+
} from './extra.token';
9+
10+
describe('@daffodil/customer-order/driver/magento/2-4-6 | daffProvideCustomerOrderMagentoExtraOrderTransforms', () => {
11+
let transforms: DaffMagentoCustomerOrderExtraTransform[];
12+
let result: DaffMagentoCustomerOrderExtraTransform[];
13+
14+
beforeEach(() => {
15+
transforms = [
16+
() => null,
17+
() => null,
18+
];
19+
20+
TestBed.configureTestingModule({
21+
providers: [
22+
...daffProvideCustomerOrderMagentoExtraOrderTransforms(...transforms),
23+
],
24+
});
25+
26+
result = TestBed.inject(DAFF_CUSTOMER_ORDER_MAGENTO_EXTRA_ORDER_TRANSFORMS);
27+
});
28+
29+
it('should provide the transforms to the token', () => {
30+
transforms.forEach(fragment => {
31+
expect(result).toContain(fragment);
32+
});
33+
});
34+
});
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,42 @@
1+
import {
2+
InjectionToken,
3+
Provider,
4+
} from '@angular/core';
5+
6+
// workaround https://github.com/graycoreio/daffodil/issues/1667
7+
import { DaffOrder } from '@daffodil/order';
8+
9+
import { DaffMagentoCustomerOrderExtraTransform } from '../../interfaces/public_api';
10+
import { MagentoCustomerOrder } from '../../models/public_api';
11+
12+
/**
13+
* A multi-provider injection token for providing extra transform logic in the Order Magento driver.
14+
* It is run after the standard transforms for each customer order preview and passed both the current transformed Daffodil customer order and the Magento customer order.
15+
*
16+
* See {@link MagentoCustomerOrder} for more info.
17+
*/
18+
export const DAFF_CUSTOMER_ORDER_MAGENTO_EXTRA_ORDER_TRANSFORMS = new InjectionToken<DaffMagentoCustomerOrderExtraTransform[]>(
19+
'DAFF_CUSTOMER_ORDER_MAGENTO_EXTRA_ORDER_TRANSFORMS',
20+
{ factory: () => []},
21+
);
22+
23+
/**
24+
* Provides extra customer order preview transforms for the Magento customer order driver.
25+
*
26+
* See {@link DAFF_CUSTOMER_ORDER_MAGENTO_EXTRA_ORDER_TRANSFORMS}.
27+
*
28+
* ```ts
29+
* providers: [
30+
* ...daffProvideCustomerOrderMagentoExtraOrderTransforms(
31+
* myExtraOrderTransform
32+
* )
33+
* ]
34+
* ```
35+
*/
36+
export function daffProvideCustomerOrderMagentoExtraOrderTransforms<T extends MagentoCustomerOrder = MagentoCustomerOrder, V extends DaffOrder = DaffOrder>(...transforms: DaffMagentoCustomerOrderExtraTransform<T, V>[]): Provider[] {
37+
return transforms.map(transform => ({
38+
provide: DAFF_CUSTOMER_ORDER_MAGENTO_EXTRA_ORDER_TRANSFORMS,
39+
useValue: transform,
40+
multi: true,
41+
}));
42+
}

0 commit comments

Comments
 (0)