diff --git a/src/common/utils/index.js b/src/common/utils/index.js index f3d4eae0..9d20b555 100644 --- a/src/common/utils/index.js +++ b/src/common/utils/index.js @@ -1,6 +1,7 @@ export { default as includes } from './includes'; export { default as isNil } from './is-nil'; export { default as isObject } from './is-object'; +export { default as omitEmptyAndNil } from './omit-empty-and-nil'; export { default as omitNil } from './omit-nil'; export { default as omitProperty } from './omit-property'; export { default as toNumber } from './to-number'; diff --git a/src/common/utils/is-empty-or-nil.js b/src/common/utils/is-empty-or-nil.js new file mode 100644 index 00000000..2d9b344b --- /dev/null +++ b/src/common/utils/is-empty-or-nil.js @@ -0,0 +1,10 @@ +import isEmpty from './is-empty'; +import isNil from './is-nil'; + +/** + * @param {*} value + * @returns {boolean} + */ +export default function isEmptyOrNil(value) { + return isEmpty(value) || isNil(value); +} diff --git a/src/common/utils/is-empty.js b/src/common/utils/is-empty.js new file mode 100644 index 00000000..d0ac0c90 --- /dev/null +++ b/src/common/utils/is-empty.js @@ -0,0 +1,7 @@ +/** + * @param {*} value + * @returns {boolean} + */ +export default function isEmpty(value) { + return value === ''; +} diff --git a/src/common/utils/omit-empty-and-nil.js b/src/common/utils/omit-empty-and-nil.js new file mode 100644 index 00000000..fdee85be --- /dev/null +++ b/src/common/utils/omit-empty-and-nil.js @@ -0,0 +1,10 @@ +import isEmptyOrNil from './is-empty-or-nil'; +import omitProperty from './omit-property'; + +/** + * @param {Object} object + * @returns {Object} + */ +export default function omitEmptyAndNil(object) { + return omitProperty(object, isEmptyOrNil); +} diff --git a/src/payment/v1/payment-mappers/order-mapper.js b/src/payment/v1/payment-mappers/order-mapper.js index ad1639d7..8c4ab48b 100644 --- a/src/payment/v1/payment-mappers/order-mapper.js +++ b/src/payment/v1/payment-mappers/order-mapper.js @@ -1,4 +1,4 @@ -import { omitNil, toString } from '../../../common/utils'; +import { omitEmptyAndNil, omitNil, toString } from '../../../common/utils'; export default class OrderMapper { /** @@ -92,7 +92,7 @@ export default class OrderMapper { mapToAddress(data, addressKey) { const address = data[addressKey] || {}; - return omitNil({ + return omitEmptyAndNil({ city: address.city, company: address.company, country_code: address.countryCode, diff --git a/test/payment/v1/payment-mappers/order-mapper.spec.js b/test/payment/v1/payment-mappers/order-mapper.spec.js index 4db325c1..82389969 100644 --- a/test/payment/v1/payment-mappers/order-mapper.spec.js +++ b/test/payment/v1/payment-mappers/order-mapper.spec.js @@ -1,3 +1,4 @@ +import _ from 'lodash'; import OrderMapper from '../../../../src/payment/v1/payment-mappers/order-mapper'; import paymentRequestDataMock from '../../../mocks/payment-request-data'; @@ -16,6 +17,28 @@ describe('OrderMapper', () => { expect(instance instanceof OrderMapper).toBeTruthy(); }); + it('removes empty fields from billing address', () => { + const mockData = _.cloneDeep(paymentRequestDataMock); + mockData.billingAddress.company = ''; + mockData.billingAddress.phone = ''; + mockData.billingAddress.addressLine2 = ''; + + const output = orderMapper.mapToOrder(mockData); + + expect(output.billing_address).toEqual({ + city: data.billingAddress.city, + country_code: data.billingAddress.countryCode, + country: data.billingAddress.country, + email: data.customer.email, + first_name: data.billingAddress.firstName, + last_name: data.billingAddress.lastName, + state_code: data.billingAddress.provinceCode, + state: data.billingAddress.province, + street_1: data.billingAddress.addressLine1, + zip: data.billingAddress.postCode, + }); + }); + it('maps the input data into an order object', () => { const output = orderMapper.mapToOrder(data);