From a22917c8b806ff0bbd8e1d0e1689e2cac11ac3a4 Mon Sep 17 00:00:00 2001 From: Eira Tse Date: Wed, 8 May 2019 10:33:40 +1000 Subject: [PATCH] feat(payments): PAYMENTS-4228 include currency code in shopper instrument calls --- src/client/client.js | 4 ++++ src/store/store-request-sender.js | 21 +++++++++++++++++---- src/store/url-helper.js | 15 +++++++++------ test/mocks/store-instrument-data.js | 1 + test/store/store-request-sender.spec.js | 21 +++++++++++++++++---- test/store/url-helper.spec.js | 13 +++++++------ 6 files changed, 55 insertions(+), 20 deletions(-) diff --git a/src/client/client.js b/src/client/client.js index 0e82c33a..0d778bfa 100644 --- a/src/client/client.js +++ b/src/client/client.js @@ -110,6 +110,7 @@ export default class Client { * @param {Object} data * @param {string} data.storeId * @param {string} data.customerId + * @param {string} data.currencyCode * @param {Function} [callback] * @return {void} */ @@ -121,6 +122,7 @@ export default class Client { * @param {Object} data * @param {string} data.storeId * @param {string} data.customerId + * @param {string} data.currencyCode * @param {AddressData} data.shippingAddress * @param {Function} [callback] * @return {void} @@ -133,6 +135,7 @@ export default class Client { * @param {Object} data * @param {string} data.storeId * @param {string} data.customerId + * @param {string} data.currencyCode * @param {CreditCard} data.creditCard * @param {AddressData} data.billingAddress * @param {boolean} data.defaultInstrument @@ -149,6 +152,7 @@ export default class Client { * @param {string} data.storeId * @param {string} data.customerId * @param {string} data.instrumentId + * @param {string} data.currencyCode * @param {Function} [callback] * @return {void} */ diff --git a/src/store/store-request-sender.js b/src/store/store-request-sender.js index 63b56937..4b596cc2 100644 --- a/src/store/store-request-sender.js +++ b/src/store/store-request-sender.js @@ -44,7 +44,11 @@ export default class StoreRequestSender { * @return {void} */ loadInstruments(data, callback) { - const url = this.urlHelper.getInstrumentsUrl(data.storeId, data.customerId); + const url = this.urlHelper.getInstrumentsUrl( + data.storeId, + data.customerId, + data.currencyCode + ); const options = { headers: mapToHeaders(data), }; @@ -58,7 +62,11 @@ export default class StoreRequestSender { * @return {void} */ loadInstrumentsWithAddress(data, callback) { - const url = this.urlHelper.getTrustedShippingAddressUrl(data.storeId, data.customerId); + const url = this.urlHelper.getTrustedShippingAddressUrl( + data.storeId, + data.customerId, + data.currencyCode + ); const payload = mapToTrustedShippingAddressPayload(data); const options = { method: POST, @@ -74,7 +82,11 @@ export default class StoreRequestSender { * @return {void} */ postShopperInstrument(data, callback) { - const url = this.urlHelper.getInstrumentsUrl(data.storeId, data.customerId); + const url = this.urlHelper.getInstrumentsUrl( + data.storeId, + data.customerId, + data.currencyCode + ); const payload = mapToInstrumentPayload(data); const options = { headers: mapToHeaders(data), @@ -92,7 +104,8 @@ export default class StoreRequestSender { const url = this.urlHelper.getInstrumentByIdUrl( data.storeId, data.customerId, - data.instrumentId + data.instrumentId, + data.currencyCode ); const options = { method: DELETE, diff --git a/src/store/url-helper.js b/src/store/url-helper.js index 0f351cd5..09d00324 100644 --- a/src/store/url-helper.js +++ b/src/store/url-helper.js @@ -37,28 +37,31 @@ export default class UrlHelper { /** * @param {number} storeId * @param {number} customerId + * @param {string} currencyCode * @returns {string} */ - getInstrumentsUrl(storeId, customerId) { - return `${this.host}/api/v2/stores/${storeId}/shoppers/${customerId}/instruments`; + getInstrumentsUrl(storeId, customerId, currencyCode) { + return `${this.host}/api/v2/stores/${storeId}/shoppers/${customerId}/instruments?currency_code=${currencyCode}`; } /** * @param {number} storeId * @param {number} customerId + * @param {string} currencyCode * @return {string} */ - getTrustedShippingAddressUrl(storeId, customerId) { - return `${this.host}/api/v2/stores/${storeId}/shoppers/${customerId}/instruments/trusted_shipping_address`; + getTrustedShippingAddressUrl(storeId, customerId, currencyCode) { + return `${this.host}/api/v2/stores/${storeId}/shoppers/${customerId}/instruments/trusted_shipping_address?currency_code=${currencyCode}`; } /** * @param {number} storeId * @param {number} customerId * @param {number} instrumentId + * @param {string} currencyCode * @returns {string} */ - getInstrumentByIdUrl(storeId, customerId, instrumentId) { - return `${this.host}/api/v2/stores/${storeId}/shoppers/${customerId}/instruments/${instrumentId}`; + getInstrumentByIdUrl(storeId, customerId, instrumentId, currencyCode) { + return `${this.host}/api/v2/stores/${storeId}/shoppers/${customerId}/instruments/${instrumentId}?currency_code=${currencyCode}`; } } diff --git a/test/mocks/store-instrument-data.js b/test/mocks/store-instrument-data.js index c4253176..7f1865f1 100644 --- a/test/mocks/store-instrument-data.js +++ b/test/mocks/store-instrument-data.js @@ -5,6 +5,7 @@ export const instrumentRequestDataMock = { shopperId: '321', instrumentId: '456', providerName: 'braintree', + currencyCode: 'USD', creditCard: { cardholderName: 'John Doe', number: '4111 1111 1111 1111', diff --git a/test/store/store-request-sender.spec.js b/test/store/store-request-sender.spec.js index 5628c0bd..f123f3d8 100644 --- a/test/store/store-request-sender.spec.js +++ b/test/store/store-request-sender.spec.js @@ -40,7 +40,11 @@ describe('StoreRequestSender', () => { it('request a shopper instrument with the appropriately mapped headers', () => { storeRequestSender.loadInstruments(data, () => {}); - expect(urlHelperMock.getInstrumentsUrl).toHaveBeenCalledWith(data.storeId, data.customerId); + expect(urlHelperMock.getInstrumentsUrl).toHaveBeenCalledWith( + data.storeId, + data.customerId, + data.currencyCode + ); expect(requestSenderMock.sendRequest).toHaveBeenCalled(); expect(mappers.mapToHeaders).toHaveBeenCalled(); }); @@ -48,7 +52,11 @@ describe('StoreRequestSender', () => { it('posts a trusted shipping address with the appropriately mapped headers and payload', () => { storeRequestSender.loadInstrumentsWithAddress(data, () => {}); - expect(urlHelperMock.getTrustedShippingAddressUrl).toHaveBeenCalledWith(data.storeId, data.customerId); + expect(urlHelperMock.getTrustedShippingAddressUrl).toHaveBeenCalledWith( + data.storeId, + data.customerId, + data.currencyCode + ); expect(requestSenderMock.postRequest).toHaveBeenCalled(); expect(mappers.mapToHeaders).toHaveBeenCalled(); expect(mappers.mapToTrustedShippingAddressPayload).toHaveBeenCalled(); @@ -57,7 +65,11 @@ describe('StoreRequestSender', () => { it('posts a new shopper instrument with the appropriately mapped headers and payload', () => { storeRequestSender.postShopperInstrument(data, () => {}); - expect(urlHelperMock.getInstrumentsUrl).toHaveBeenCalledWith(data.storeId, data.customerId); + expect(urlHelperMock.getInstrumentsUrl).toHaveBeenCalledWith( + data.storeId, + data.customerId, + data.currencyCode + ); expect(requestSenderMock.postRequest).toHaveBeenCalled(); expect(mappers.mapToHeaders).toHaveBeenCalled(); }); @@ -68,7 +80,8 @@ describe('StoreRequestSender', () => { expect(urlHelperMock.getInstrumentByIdUrl).toHaveBeenCalledWith( data.storeId, data.customerId, - data.instrumentId + data.instrumentId, + data.currencyCode ); expect(requestSenderMock.sendRequest).toHaveBeenCalled(); expect(mappers.mapToHeaders).toHaveBeenCalled(); diff --git a/test/store/url-helper.spec.js b/test/store/url-helper.spec.js index d25db2ca..f52ddb2a 100644 --- a/test/store/url-helper.spec.js +++ b/test/store/url-helper.spec.js @@ -5,6 +5,7 @@ describe('UrlHelper', () => { const storeId = '123'; const shopperId = '456'; const instrumentId = '789'; + const currencyCode = 'USD'; let urlHelper; @@ -33,22 +34,22 @@ describe('UrlHelper', () => { }); it('returns a URL for submitting payments to an offsite provider', () => { - const result = urlHelper.getInstrumentsUrl(storeId, shopperId); - const expected = `${host}/api/v2/stores/${storeId}/shoppers/${shopperId}/instruments`; + const result = urlHelper.getInstrumentsUrl(storeId, shopperId, currencyCode); + const expected = `${host}/api/v2/stores/${storeId}/shoppers/${shopperId}/instruments?currency_code=${currencyCode}`; expect(result).toEqual(expected); }); it('returns a URL for posting a trusted shipping address', () => { - const result = urlHelper.getTrustedShippingAddressUrl(storeId, shopperId); - const expected = `${host}/api/v2/stores/${storeId}/shoppers/${shopperId}/instruments/trusted_shipping_address`; + const result = urlHelper.getTrustedShippingAddressUrl(storeId, shopperId, currencyCode); + const expected = `${host}/api/v2/stores/${storeId}/shoppers/${shopperId}/instruments/trusted_shipping_address?currency_code=${currencyCode}`; expect(result).toEqual(expected); }); it('returns a URL for generating a client token', () => { - const result = urlHelper.getInstrumentByIdUrl(storeId, shopperId, instrumentId); - const expected = `${host}/api/v2/stores/${storeId}/shoppers/${shopperId}/instruments/${instrumentId}`; + const result = urlHelper.getInstrumentByIdUrl(storeId, shopperId, instrumentId, currencyCode); + const expected = `${host}/api/v2/stores/${storeId}/shoppers/${shopperId}/instruments/${instrumentId}?currency_code=${currencyCode}`; expect(result).toEqual(expected); });