Skip to content

Commit

Permalink
fix(payment): Swap gateway and id fields if multi-option provider
Browse files Browse the repository at this point in the history
  • Loading branch information
davidchin committed Jun 30, 2017
1 parent f6f7d09 commit 60e23e4
Show file tree
Hide file tree
Showing 5 changed files with 30 additions and 12 deletions.
4 changes: 2 additions & 2 deletions src/payment/offsite-payment-mappers/payload-mapper.js
Original file line number Diff line number Diff line change
Expand Up @@ -72,11 +72,11 @@ export default class PayloadMapper {
amount: order.grandTotal ? order.grandTotal.integerAmount : null,
bc_auth_token: authToken,
currency: order.currency,
gateway: paymentMethod.gateway,
gateway: this.paymentMethodIdMapper.mapToId(paymentMethod),
notify_url: order.callbackUrl,
order_id: order.orderId ? toString(order.orderId) : null,
page_title: document.title ? document.title : null,
payment_method_id: this.paymentMethodIdMapper.mapToId(paymentMethod),
payment_method_id: paymentMethod.id,
reference_id: order.orderId ? toString(order.orderId) : null,
return_url: paymentMethod.returnUrl || (order.payment ? order.payment.returnUrl : null),
},
Expand Down
11 changes: 9 additions & 2 deletions src/payment/payment-method-mappers/payment-method-id-mapper.js
Original file line number Diff line number Diff line change
@@ -1,4 +1,5 @@
import { BRAINTREE, BRAINTREE_PAYPAL } from '../payment-method-ids';
import { MULTI_OPTION } from '../payment-method-types';

export default class PaymentMethodIdMapper {
/**
Expand All @@ -13,10 +14,16 @@ export default class PaymentMethodIdMapper {
* @returns {string}
*/
mapToId(paymentMethod) {
if (paymentMethod.id === BRAINTREE_PAYPAL) {
let { id } = paymentMethod;

if (paymentMethod.method === MULTI_OPTION) {
id = paymentMethod.gateway;
}

if (id === BRAINTREE_PAYPAL) {
return BRAINTREE;
}

return paymentMethod.id;
return id;
}
}
2 changes: 2 additions & 0 deletions src/payment/payment-method-types.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,2 @@
export const CREDIT_CARD = 'credit-card';
export const MULTI_OPTION = 'multi-option';
14 changes: 6 additions & 8 deletions test/payment/offsite-payment-mappers/payload-mapper.spec.js
Original file line number Diff line number Diff line change
Expand Up @@ -13,7 +13,11 @@ describe('PayloadMapper', () => {
let storeMapper;

beforeEach(() => {
data = paymentRequestDataMock;
data = merge({}, paymentRequestDataMock, {
paymentMethod: {
gateway: 'Adyen',
},
});

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

paymentMethodIdMapper = {
mapToId: jasmine.createSpy('mapToId').and.returnValue(data.paymentMethod.id),
mapToId: jasmine.createSpy('mapToId').and.returnValue(data.paymentMethod.gateway),
};

storeMapper = {
Expand All @@ -46,12 +50,6 @@ describe('PayloadMapper', () => {
});

it('maps the input data into a payload for submitting a payment to an offsite provider', () => {
data = merge({}, data, {
paymentMethod: {
gateway: 'Adyen',
},
});

document.title = 'Hello world';

const output = payloadMapper.mapToPayload(data);
Expand Down
Original file line number Diff line number Diff line change
@@ -1,4 +1,5 @@
import PaymentMethodIdMapper from '../../../src/payment/payment-method-mappers/payment-method-id-mapper';
import { MULTI_OPTION } from '../../../src/payment/payment-method-types';
import * as PAYMENT_METHODS from '../../../src/payment/payment-method-ids';

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

it('returns the "gateway" field of the payment method if it is a multi-option method', () => {
paymentMethod = {
id: PAYMENT_METHODS.BRAINTREE_PAYPAL,
gateway: 'Adyen',
method: MULTI_OPTION,
};

expect(paymentMethodIdMapper.mapToId(paymentMethod)).toEqual('Adyen');
});

it('does not perform any mapping for other payment methods', () => {
paymentMethod = { id: PAYMENT_METHODS.BRAINTREE };
expect(paymentMethodIdMapper.mapToId(paymentMethod)).toEqual(PAYMENT_METHODS.BRAINTREE);
Expand Down

0 comments on commit 60e23e4

Please sign in to comment.