diff --git a/src/payment/offsite-payment-mappers/payload-mapper.js b/src/payment/offsite-payment-mappers/payload-mapper.js index 47e1a4a0..9d537a97 100644 --- a/src/payment/offsite-payment-mappers/payload-mapper.js +++ b/src/payment/offsite-payment-mappers/payload-mapper.js @@ -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), }, diff --git a/src/payment/payment-method-mappers/payment-method-id-mapper.js b/src/payment/payment-method-mappers/payment-method-id-mapper.js index 245e7846..6334067c 100644 --- a/src/payment/payment-method-mappers/payment-method-id-mapper.js +++ b/src/payment/payment-method-mappers/payment-method-id-mapper.js @@ -1,4 +1,5 @@ import { BRAINTREE, BRAINTREE_PAYPAL } from '../payment-method-ids'; +import { MULTI_OPTION } from '../payment-method-types'; export default class PaymentMethodIdMapper { /** @@ -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; } } diff --git a/src/payment/payment-method-types.js b/src/payment/payment-method-types.js new file mode 100644 index 00000000..2e6d4366 --- /dev/null +++ b/src/payment/payment-method-types.js @@ -0,0 +1,2 @@ +export const CREDIT_CARD = 'credit-card'; +export const MULTI_OPTION = 'multi-option'; diff --git a/test/payment/offsite-payment-mappers/payload-mapper.spec.js b/test/payment/offsite-payment-mappers/payload-mapper.spec.js index 74c748aa..e91f4fa4 100644 --- a/test/payment/offsite-payment-mappers/payload-mapper.spec.js +++ b/test/payment/offsite-payment-mappers/payload-mapper.spec.js @@ -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' }), @@ -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 = { @@ -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); diff --git a/test/payment/payment-method-mappers/payment-method-id-mapper.spec.js b/test/payment/payment-method-mappers/payment-method-id-mapper.spec.js index 224209b5..1a32afc1 100644 --- a/test/payment/payment-method-mappers/payment-method-id-mapper.spec.js +++ b/test/payment/payment-method-mappers/payment-method-id-mapper.spec.js @@ -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', () => { @@ -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);