Skip to content

Commit afa2f19

Browse files
authored
feat(payment): added BraintreeSDKVersionManager (#2932)
1 parent 5482d98 commit afa2f19

File tree

51 files changed

+603
-106
lines changed

Some content is hidden

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

51 files changed

+603
-106
lines changed

packages/apple-pay-integration/src/apple-pay-button-strategy.spec.ts

Lines changed: 6 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,7 @@ import { getScriptLoader } from '@bigcommerce/script-loader';
44
import {
55
BraintreeScriptLoader,
66
BraintreeSdk,
7+
BraintreeSDKVersionManager,
78
getBraintree,
89
getDataCollectorMock,
910
getDeviceDataMock,
@@ -46,6 +47,7 @@ describe('ApplePayButtonStrategy', () => {
4647
let applePaySession: MockApplePaySession;
4748
let braintreeSdk: BraintreeSdk;
4849
let applePayScriptLoader: ApplePayScriptLoader;
50+
let braintreeSDKVersionManager: BraintreeSDKVersionManager;
4951

5052
beforeEach(() => {
5153
applePaySession = new MockApplePaySession();
@@ -57,7 +59,10 @@ describe('ApplePayButtonStrategy', () => {
5759
applePayFactory = new ApplePaySessionFactory();
5860
requestSender = createRequestSender();
5961
paymentIntegrationService = new PaymentIntegrationServiceMock();
60-
braintreeSdk = new BraintreeSdk(new BraintreeScriptLoader(getScriptLoader(), window));
62+
braintreeSDKVersionManager = new BraintreeSDKVersionManager(paymentIntegrationService);
63+
braintreeSdk = new BraintreeSdk(
64+
new BraintreeScriptLoader(getScriptLoader(), window, braintreeSDKVersionManager),
65+
);
6166
applePayScriptLoader = new ApplePayScriptLoader(getScriptLoader());
6267

6368
jest.spyOn(requestSender, 'post').mockReturnValue(Promise.resolve(getResponse({})));

packages/apple-pay-integration/src/apple-pay-customer-strategy.spec.ts

Lines changed: 6 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,7 @@ import { getScriptLoader } from '@bigcommerce/script-loader';
44
import {
55
BraintreeScriptLoader,
66
BraintreeSdk,
7+
BraintreeSDKVersionManager,
78
getBraintree,
89
getDataCollectorMock,
910
getDeviceDataMock,
@@ -47,6 +48,7 @@ describe('ApplePayCustomerStrategy', () => {
4748
let braintreeSdk: BraintreeSdk;
4849
let applePayScriptLoader: ApplePayScriptLoader;
4950
let storeConfigMock: StoreConfig;
51+
let braintreeSDKVersionManager: BraintreeSDKVersionManager;
5052

5153
beforeEach(() => {
5254
applePaySession = new MockApplePaySession();
@@ -58,7 +60,10 @@ describe('ApplePayCustomerStrategy', () => {
5860
applePayFactory = new ApplePaySessionFactory();
5961
requestSender = createRequestSender();
6062
paymentIntegrationService = new PaymentIntegrationServiceMock();
61-
braintreeSdk = new BraintreeSdk(new BraintreeScriptLoader(getScriptLoader(), window));
63+
braintreeSDKVersionManager = new BraintreeSDKVersionManager(paymentIntegrationService);
64+
braintreeSdk = new BraintreeSdk(
65+
new BraintreeScriptLoader(getScriptLoader(), window, braintreeSDKVersionManager),
66+
);
6267
applePayScriptLoader = new ApplePayScriptLoader(getScriptLoader());
6368
storeConfigMock = getConfig().storeConfig;
6469
storeConfigMock.checkoutSettings.features = {

packages/apple-pay-integration/src/apple-pay-payment-strategy.spec.ts

Lines changed: 6 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,7 @@ import { merge } from 'lodash';
55
import {
66
BraintreeScriptLoader,
77
BraintreeSdk,
8+
BraintreeSDKVersionManager,
89
getBraintree,
910
getDataCollectorMock,
1011
getDeviceDataMock,
@@ -36,6 +37,7 @@ describe('ApplePayPaymentStrategy', () => {
3637
let paymentMethod: PaymentMethod;
3738
let applePaySession: MockApplePaySession;
3839
let braintreeSdk: BraintreeSdk;
40+
let braintreeSDKVersionManager: BraintreeSDKVersionManager;
3941

4042
beforeEach(() => {
4143
applePaySession = new MockApplePaySession();
@@ -45,8 +47,11 @@ describe('ApplePayPaymentStrategy', () => {
4547
value: applePaySession,
4648
});
4749

50+
braintreeSDKVersionManager = new BraintreeSDKVersionManager(paymentIntegrationService);
4851
paymentIntegrationService = new PaymentIntegrationServiceMock();
49-
braintreeSdk = new BraintreeSdk(new BraintreeScriptLoader(getScriptLoader(), window));
52+
braintreeSdk = new BraintreeSdk(
53+
new BraintreeScriptLoader(getScriptLoader(), window, braintreeSDKVersionManager),
54+
);
5055

5156
requestSender = createRequestSender();
5257
applePayFactory = new ApplePaySessionFactory();

packages/apple-pay-integration/src/create-apple-pay-button-strategy.ts

Lines changed: 10 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,11 @@
11
import { createRequestSender } from '@bigcommerce/request-sender';
22
import { getScriptLoader, ScriptLoader } from '@bigcommerce/script-loader';
33

4-
import { BraintreeScriptLoader, BraintreeSdk } from '@bigcommerce/checkout-sdk/braintree-utils';
4+
import {
5+
BraintreeScriptLoader,
6+
BraintreeSdk,
7+
BraintreeSDKVersionManager,
8+
} from '@bigcommerce/checkout-sdk/braintree-utils';
59
import {
610
CheckoutButtonStrategyFactory,
711
toResolvableModule,
@@ -16,11 +20,15 @@ const createApplePayButtonStrategy: CheckoutButtonStrategyFactory<ApplePayButton
1620
) => {
1721
const { getHost } = paymentIntegrationService.getState();
1822

23+
const braintreeSDKVersionManager = new BraintreeSDKVersionManager(paymentIntegrationService);
24+
1925
return new ApplePayButtonStrategy(
2026
createRequestSender({ host: getHost() }),
2127
paymentIntegrationService,
2228
new ApplePaySessionFactory(),
23-
new BraintreeSdk(new BraintreeScriptLoader(getScriptLoader(), window)),
29+
new BraintreeSdk(
30+
new BraintreeScriptLoader(getScriptLoader(), window, braintreeSDKVersionManager),
31+
),
2432
new ApplePayScriptLoader(new ScriptLoader()),
2533
);
2634
};

packages/apple-pay-integration/src/create-apple-pay-customer-strategy.ts

Lines changed: 10 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,11 @@
11
import { createRequestSender } from '@bigcommerce/request-sender';
22
import { getScriptLoader, ScriptLoader } from '@bigcommerce/script-loader';
33

4-
import { BraintreeScriptLoader, BraintreeSdk } from '@bigcommerce/checkout-sdk/braintree-utils';
4+
import {
5+
BraintreeScriptLoader,
6+
BraintreeSdk,
7+
BraintreeSDKVersionManager,
8+
} from '@bigcommerce/checkout-sdk/braintree-utils';
59
import {
610
CustomerStrategyFactory,
711
toResolvableModule,
@@ -16,11 +20,15 @@ const createApplePayCustomerStrategy: CustomerStrategyFactory<ApplePayCustomerSt
1620
) => {
1721
const { getHost } = paymentIntegrationService.getState();
1822

23+
const braintreeSDKVersionManager = new BraintreeSDKVersionManager(paymentIntegrationService);
24+
1925
return new ApplePayCustomerStrategy(
2026
createRequestSender({ host: getHost() }),
2127
paymentIntegrationService,
2228
new ApplePaySessionFactory(),
23-
new BraintreeSdk(new BraintreeScriptLoader(getScriptLoader(), window)),
29+
new BraintreeSdk(
30+
new BraintreeScriptLoader(getScriptLoader(), window, braintreeSDKVersionManager),
31+
),
2432
new ApplePayScriptLoader(new ScriptLoader()),
2533
);
2634
};

packages/apple-pay-integration/src/create-apple-pay-payment-strategy.ts

Lines changed: 9 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,11 @@
11
import { createRequestSender } from '@bigcommerce/request-sender';
22
import { getScriptLoader } from '@bigcommerce/script-loader';
33

4-
import { BraintreeScriptLoader, BraintreeSdk } from '@bigcommerce/checkout-sdk/braintree-utils';
4+
import {
5+
BraintreeScriptLoader,
6+
BraintreeSdk,
7+
BraintreeSDKVersionManager,
8+
} from '@bigcommerce/checkout-sdk/braintree-utils';
59
import {
610
PaymentStrategyFactory,
711
toResolvableModule,
@@ -14,12 +18,15 @@ const createApplePayPaymentStrategy: PaymentStrategyFactory<ApplePayPaymentStrat
1418
paymentIntegrationService,
1519
) => {
1620
const { getHost } = paymentIntegrationService.getState();
21+
const braintreeSDKVersionManager = new BraintreeSDKVersionManager(paymentIntegrationService);
1722

1823
return new ApplePayPaymentStrategy(
1924
createRequestSender({ host: getHost() }),
2025
paymentIntegrationService,
2126
new ApplePaySessionFactory(),
22-
new BraintreeSdk(new BraintreeScriptLoader(getScriptLoader(), window)),
27+
new BraintreeSdk(
28+
new BraintreeScriptLoader(getScriptLoader(), window, braintreeSDKVersionManager),
29+
),
2330
);
2431
};
2532

packages/braintree-integration/src/braintree-ach/braintree-ach-payment-strategy.spec.ts

Lines changed: 8 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,7 @@ import {
44
BraintreeDataCollector,
55
BraintreeScriptLoader,
66
BraintreeSdk,
7+
BraintreeSDKVersionManager,
78
BraintreeUsBankAccount,
89
getDataCollectorMock,
910
getUsBankAccountMock,
@@ -29,6 +30,7 @@ describe('BraintreeAchPaymentStrategy', () => {
2930
let braintreeDataCollector: BraintreeDataCollector;
3031
let paymentIntegrationService: PaymentIntegrationService;
3132
let strategy: BraintreeAchPaymentStrategy;
33+
let braintreeSDKVersionManager: BraintreeSDKVersionManager;
3234

3335
const methodId = 'braintreeach';
3436
const paymentMethodMock = getBraintreeAchPaymentMethod();
@@ -44,7 +46,12 @@ describe('BraintreeAchPaymentStrategy', () => {
4446
braintreeUsBankAccount = getUsBankAccountMock();
4547
braintreeDataCollector = getDataCollectorMock();
4648

47-
braintreeScriptLoader = new BraintreeScriptLoader(getScriptLoader(), window);
49+
braintreeSDKVersionManager = new BraintreeSDKVersionManager(paymentIntegrationService);
50+
braintreeScriptLoader = new BraintreeScriptLoader(
51+
getScriptLoader(),
52+
window,
53+
braintreeSDKVersionManager,
54+
);
4855
braintreeSdk = new BraintreeSdk(braintreeScriptLoader);
4956
paymentIntegrationService = new PaymentIntegrationServiceMock();
5057

packages/braintree-integration/src/braintree-ach/create-braintree-ach-payment-strategy.ts

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -9,7 +9,10 @@ import BraintreeAchPaymentStrategy from './braintree-ach-payment-strategy';
99
const createBraintreeAchPaymentStrategy: PaymentStrategyFactory<BraintreeAchPaymentStrategy> = (
1010
paymentIntegrationService,
1111
) => {
12-
return new BraintreeAchPaymentStrategy(paymentIntegrationService, createBraintreeSdk());
12+
return new BraintreeAchPaymentStrategy(
13+
paymentIntegrationService,
14+
createBraintreeSdk(paymentIntegrationService),
15+
);
1316
};
1417

1518
export default toResolvableModule(createBraintreeAchPaymentStrategy, [{ id: 'braintreeach' }]);

packages/braintree-integration/src/braintree-fastlane/braintree-fastlane-customer-strategy.spec.ts

Lines changed: 8 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,7 @@ import { getScriptLoader } from '@bigcommerce/script-loader';
33
import {
44
BraintreeIntegrationService,
55
BraintreeScriptLoader,
6+
BraintreeSDKVersionManager,
67
getBraintree,
78
} from '@bigcommerce/checkout-sdk/braintree-utils';
89
import {
@@ -27,6 +28,7 @@ describe('BraintreeFastlaneCustomerStrategy', () => {
2728
let browserStorage: BrowserStorage;
2829
let paymentIntegrationService: PaymentIntegrationService;
2930
let strategy: BraintreeFastlaneCustomerStrategy;
31+
let braintreeSDKVersionManager: BraintreeSDKVersionManager;
3032

3133
const customer = getGuestCustomer();
3234
const storeConfig = getConfig().storeConfig;
@@ -48,7 +50,12 @@ describe('BraintreeFastlaneCustomerStrategy', () => {
4850
};
4951

5052
beforeEach(() => {
51-
braintreeScriptLoader = new BraintreeScriptLoader(getScriptLoader(), window);
53+
braintreeSDKVersionManager = new BraintreeSDKVersionManager(paymentIntegrationService);
54+
braintreeScriptLoader = new BraintreeScriptLoader(
55+
getScriptLoader(),
56+
window,
57+
braintreeSDKVersionManager,
58+
);
5259
braintreeIntegrationService = new BraintreeIntegrationService(
5360
braintreeScriptLoader,
5461
window,

packages/braintree-integration/src/braintree-fastlane/braintree-fastlane-payment-strategy.spec.ts

Lines changed: 18 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
import { getScriptLoader } from '@bigcommerce/script-loader';
2-
import { noop } from 'lodash';
32
import { EventEmitter } from 'events';
3+
import { noop } from 'lodash';
44

55
import {
66
Braintree3DSVerifyCardCallback,
@@ -9,6 +9,7 @@ import {
99
BraintreeIntegrationService,
1010
BraintreeScriptLoader,
1111
BraintreeSdk,
12+
BraintreeSDKVersionManager,
1213
BraintreeThreeDSecure,
1314
BraintreeThreeDSecureOptions,
1415
getBraintree,
@@ -35,9 +36,10 @@ import {
3536
} from '@bigcommerce/checkout-sdk/payment-integrations-test-utils';
3637
import { BrowserStorage } from '@bigcommerce/checkout-sdk/storage';
3738

39+
import { getThreeDSecureMock } from '../mocks/braintree.mock';
40+
3841
import BraintreeFastlanePaymentStrategy from './braintree-fastlane-payment-strategy';
3942
import BraintreeFastlaneUtils from './braintree-fastlane-utils';
40-
import { getThreeDSecureMock } from '../mocks/braintree.mock';
4143

4244
describe('BraintreeFastlanePaymentStrategy', () => {
4345
let braintreeFastlaneUtils: BraintreeFastlaneUtils;
@@ -50,6 +52,7 @@ describe('BraintreeFastlanePaymentStrategy', () => {
5052
let braintreeSdk: BraintreeSdk;
5153
let threeDSecure: BraintreeThreeDSecure;
5254
let eventEmitter: EventEmitter;
55+
let braintreeSDKVersionManager: BraintreeSDKVersionManager;
5356

5457
const methodId = 'braintreeacceleratedcheckout';
5558
const deviceSessionId = 'device_session_id_mock';
@@ -170,7 +173,12 @@ describe('BraintreeFastlanePaymentStrategy', () => {
170173
threeDSecure = getThreeDSecureMock();
171174
eventEmitter = new EventEmitter();
172175

173-
braintreeScriptLoader = new BraintreeScriptLoader(getScriptLoader(), window);
176+
braintreeSDKVersionManager = new BraintreeSDKVersionManager(paymentIntegrationService);
177+
braintreeScriptLoader = new BraintreeScriptLoader(
178+
getScriptLoader(),
179+
window,
180+
braintreeSDKVersionManager,
181+
);
174182
braintreeIntegrationService = new BraintreeIntegrationService(
175183
braintreeScriptLoader,
176184
window,
@@ -785,6 +793,7 @@ describe('BraintreeFastlanePaymentStrategy', () => {
785793
isFastlaneEnabled: true,
786794
},
787795
};
796+
788797
paymentMethod.config.is3dsEnabled = false;
789798

790799
jest.spyOn(
@@ -940,6 +949,7 @@ describe('BraintreeFastlanePaymentStrategy', () => {
940949

941950
it('should reject with a PaymentMethodCancelledError if customer cancels', async () => {
942951
paymentMethod.config.is3dsEnabled = true;
952+
943953
const threeDSecureMock = {
944954
...threeDSecure,
945955
verifyCard: (_options, callback) => {
@@ -953,8 +963,11 @@ describe('BraintreeFastlanePaymentStrategy', () => {
953963
return Promise.resolve('fastlane_token_mock');
954964
},
955965
};
966+
956967
jest.spyOn(braintreeSdk, 'getBraintreeThreeDS').mockResolvedValue(threeDSecureMock);
968+
957969
const onErrorMock = jest.fn();
970+
958971
await strategy.initialize({
959972
methodId,
960973
braintreefastlane: {
@@ -978,6 +991,7 @@ describe('BraintreeFastlanePaymentStrategy', () => {
978991
await strategy.execute(executeOptions);
979992

980993
const next = jest.fn();
994+
981995
eventEmitter.emit('onLookupComplete', next);
982996

983997
expect(next).toHaveBeenCalled();
@@ -991,6 +1005,7 @@ describe('BraintreeFastlanePaymentStrategy', () => {
9911005

9921006
const next = jest.fn();
9931007
const cancelCallback = jest.fn();
1008+
9941009
eventEmitter.emit('onLookupComplete', next);
9951010
eventEmitter.emit('on', cancelCallback);
9961011

0 commit comments

Comments
 (0)