Skip to content

Commit 60e23e4

Browse files
committed
fix(payment): Swap gateway and id fields if multi-option provider
1 parent f6f7d09 commit 60e23e4

File tree

5 files changed

+30
-12
lines changed

5 files changed

+30
-12
lines changed

src/payment/offsite-payment-mappers/payload-mapper.js

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -72,11 +72,11 @@ export default class PayloadMapper {
7272
amount: order.grandTotal ? order.grandTotal.integerAmount : null,
7373
bc_auth_token: authToken,
7474
currency: order.currency,
75-
gateway: paymentMethod.gateway,
75+
gateway: this.paymentMethodIdMapper.mapToId(paymentMethod),
7676
notify_url: order.callbackUrl,
7777
order_id: order.orderId ? toString(order.orderId) : null,
7878
page_title: document.title ? document.title : null,
79-
payment_method_id: this.paymentMethodIdMapper.mapToId(paymentMethod),
79+
payment_method_id: paymentMethod.id,
8080
reference_id: order.orderId ? toString(order.orderId) : null,
8181
return_url: paymentMethod.returnUrl || (order.payment ? order.payment.returnUrl : null),
8282
},

src/payment/payment-method-mappers/payment-method-id-mapper.js

Lines changed: 9 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,5 @@
11
import { BRAINTREE, BRAINTREE_PAYPAL } from '../payment-method-ids';
2+
import { MULTI_OPTION } from '../payment-method-types';
23

34
export default class PaymentMethodIdMapper {
45
/**
@@ -13,10 +14,16 @@ export default class PaymentMethodIdMapper {
1314
* @returns {string}
1415
*/
1516
mapToId(paymentMethod) {
16-
if (paymentMethod.id === BRAINTREE_PAYPAL) {
17+
let { id } = paymentMethod;
18+
19+
if (paymentMethod.method === MULTI_OPTION) {
20+
id = paymentMethod.gateway;
21+
}
22+
23+
if (id === BRAINTREE_PAYPAL) {
1724
return BRAINTREE;
1825
}
1926

20-
return paymentMethod.id;
27+
return id;
2128
}
2229
}
Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,2 @@
1+
export const CREDIT_CARD = 'credit-card';
2+
export const MULTI_OPTION = 'multi-option';

test/payment/offsite-payment-mappers/payload-mapper.spec.js

Lines changed: 6 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -13,7 +13,11 @@ describe('PayloadMapper', () => {
1313
let storeMapper;
1414

1515
beforeEach(() => {
16-
data = paymentRequestDataMock;
16+
data = merge({}, paymentRequestDataMock, {
17+
paymentMethod: {
18+
gateway: 'Adyen',
19+
},
20+
});
1721

1822
addressMapper = {
1923
mapToBillingAddress: jasmine.createSpy('mapToBillingAddress').and.returnValue({ billingAddress: 'billingAddress' }),
@@ -29,7 +33,7 @@ describe('PayloadMapper', () => {
2933
};
3034

3135
paymentMethodIdMapper = {
32-
mapToId: jasmine.createSpy('mapToId').and.returnValue(data.paymentMethod.id),
36+
mapToId: jasmine.createSpy('mapToId').and.returnValue(data.paymentMethod.gateway),
3337
};
3438

3539
storeMapper = {
@@ -46,12 +50,6 @@ describe('PayloadMapper', () => {
4650
});
4751

4852
it('maps the input data into a payload for submitting a payment to an offsite provider', () => {
49-
data = merge({}, data, {
50-
paymentMethod: {
51-
gateway: 'Adyen',
52-
},
53-
});
54-
5553
document.title = 'Hello world';
5654

5755
const output = payloadMapper.mapToPayload(data);

test/payment/payment-method-mappers/payment-method-id-mapper.spec.js

Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,5 @@
11
import PaymentMethodIdMapper from '../../../src/payment/payment-method-mappers/payment-method-id-mapper';
2+
import { MULTI_OPTION } from '../../../src/payment/payment-method-types';
23
import * as PAYMENT_METHODS from '../../../src/payment/payment-method-ids';
34

45
describe('PaymentMethodIdMapper', () => {
@@ -20,6 +21,16 @@ describe('PaymentMethodIdMapper', () => {
2021
expect(paymentMethodIdMapper.mapToId(paymentMethod)).toEqual(PAYMENT_METHODS.BRAINTREE);
2122
});
2223

24+
it('returns the "gateway" field of the payment method if it is a multi-option method', () => {
25+
paymentMethod = {
26+
id: PAYMENT_METHODS.BRAINTREE_PAYPAL,
27+
gateway: 'Adyen',
28+
method: MULTI_OPTION,
29+
};
30+
31+
expect(paymentMethodIdMapper.mapToId(paymentMethod)).toEqual('Adyen');
32+
});
33+
2334
it('does not perform any mapping for other payment methods', () => {
2435
paymentMethod = { id: PAYMENT_METHODS.BRAINTREE };
2536
expect(paymentMethodIdMapper.mapToId(paymentMethod)).toEqual(PAYMENT_METHODS.BRAINTREE);

0 commit comments

Comments
 (0)