From e58601bab4b6a1af1eb0e857bac9dbec21233afb Mon Sep 17 00:00:00 2001 From: Michaela Brydon Date: Mon, 4 Dec 2023 20:54:28 -0500 Subject: [PATCH] Moving general methods to shared file --- src/helpers/text-helper.js | 23 +++++++++++- src/helpers/text-helper.spec.js | 42 ++++++++++++++++++++++ src/layouts/tpa-search/tpa-search.spec.js | 44 ----------------------- src/layouts/tpa-search/tpa-search.vue | 34 ++++-------------- 4 files changed, 70 insertions(+), 73 deletions(-) create mode 100644 src/helpers/text-helper.spec.js diff --git a/src/helpers/text-helper.js b/src/helpers/text-helper.js index d08e0c04..41e19a66 100644 --- a/src/helpers/text-helper.js +++ b/src/helpers/text-helper.js @@ -17,9 +17,30 @@ export function stripRteStyle(stringWithStyleTag) { * @returns {string} */ export function toTitleCase(text) { - const temp = text.toLowerCase().split(' '); + const temp = text?.toLowerCase()?.split(' ') ?? []; for (let i = 0; i < temp.length; i++) { temp[i] = temp[i].charAt(0).toUpperCase() + temp[i].slice(1); } return temp.join(' '); } + +/** + * @function toDisplayPhoneNumber + * @summary If 10 or 11 digits are in phoneNumber, then the expected number including dashes will be returned + * in either d-ddd-ddd-dddd or ddd-ddd-dddd format. Otherwise, an empty string will be returned. + * @param {string} phoneNumber + * @returns {string} + */ +export function toDisplayPhoneNumber(phoneNumber) { + let result = ''; + if (!phoneNumber) { return result; } + let remainingDigits = phoneNumber.match(/\d+/g).join(''); + if (remainingDigits.length === 11) { + result += `${remainingDigits[0]}-`; + remainingDigits = remainingDigits.substring(1); + } + if (remainingDigits.length === 10) { + result += remainingDigits.replace(/^(\d{3})(\d{3})(\d{4})/, '$1-$2-$3'); + } + return result; +} diff --git a/src/helpers/text-helper.spec.js b/src/helpers/text-helper.spec.js new file mode 100644 index 00000000..1b2daf64 --- /dev/null +++ b/src/helpers/text-helper.spec.js @@ -0,0 +1,42 @@ +import { toTitleCase, toDisplayPhoneNumber } from '@/helpers/text-helper.js'; + +describe('text-helper', () => { + test.each([ + [undefined, ''], + [null, ''], + ['', ''], + ['hello world', 'Hello World'], + ['hello world', 'Hello World'], + ['HEllO worLD', 'Hello World'], + ['a991,,:A froG FAMILY', 'A991,,:a Frog Family'] + ])( + 'toTitleCase given "%p" returns "%p"', + (input, expected) => { + // Act + const result = toTitleCase(input); + + // Assert + expect(result).toEqual(expected); + } + ); + test.each([ + [undefined, ''], + [null, ''], + ['', ''], + ['119', ''], + ['1111999900', '111-199-9900'], + ['111199-9900', '111-199-9900'], + ['111-199-9900', '111-199-9900'], + ['01111999900', '0-111-199-9900'], + ['0-111-199-9900', '0-111-199-9900'] + ])( + 'getDisplayPhoneNumber', + (input, expected) => { + // Act + const result = toDisplayPhoneNumber(input); + + // Assert + expect(result).toEqual(expected); + } + ); +}); diff --git a/src/layouts/tpa-search/tpa-search.spec.js b/src/layouts/tpa-search/tpa-search.spec.js index 9a6f4734..99754c6b 100644 --- a/src/layouts/tpa-search/tpa-search.spec.js +++ b/src/layouts/tpa-search/tpa-search.spec.js @@ -1183,50 +1183,6 @@ describe('TPA search page', () => { }); }); }); - test.each([ - [undefined, ''], - [null, ''], - ['', ''], - ['119', ''], - ['1111999900', '111-199-9900'], - ['111199-9900', '111-199-9900'], - ['111-199-9900', '111-199-9900'], - ['01111999900', '0-111-199-9900'], - ['0-111-199-9900', '0-111-199-9900'] - ])( - 'getDisplayPhoneNumber', - (input, expected) => { - // Arrange - const { wrapper } = getMountedComponent(); - - // Act - const result = wrapper.vm.getDisplayPhoneNumber(input); - - // Assert - expect(result).toEqual(expected); - } - ); - test.each([ - [undefined, ''], - [null, ''], - ['', ''], - ['hello world', 'Hello World'], - ['hello world', 'Hello World'], - ['HEllO worLD', 'Hello World'], - ['a991,,:A froG FAMILY', 'A991,,:a Frog Family'] - ])( - 'getTitleCase given "%p" returns "%p"', - (input, expected) => { - // Arrange - const { wrapper } = getMountedComponent(); - - // Act - const result = wrapper.vm.getTitleCase(input); - - // Assert - expect(result).toEqual(expected); - } - ); }); describe('before route enter', () => { test('when providers exist at 15 mile radius, filter is set to "15 miles" and providers set to expected', async () => { diff --git a/src/layouts/tpa-search/tpa-search.vue b/src/layouts/tpa-search/tpa-search.vue index 65e41ca0..8ec7742e 100644 --- a/src/layouts/tpa-search/tpa-search.vue +++ b/src/layouts/tpa-search/tpa-search.vue @@ -133,6 +133,7 @@ import globalRules from '@/constants/global-rules.js'; import widgetFields from '@/constants/cms-widget-fields.js'; import { shallowRef } from 'vue'; import routerParams from '@/router/router-constants/router-params'; +import { toTitleCase, toDisplayPhoneNumber } from '@/helpers/text-helper.js'; const radiusFilterPairs = [ { radius: 15, filter: '15 miles' }, @@ -295,7 +296,7 @@ export default { this.providers = providers; }, getProviderAddress(provider) { - const city = this.getTitleCase(provider?.address?.city); + const city = toTitleCase(provider?.address?.city); const state = provider?.address?.state ?? ''; const zipCode = provider?.address?.zipCode ?? ''; let addressLine2 = ''; @@ -313,7 +314,7 @@ export default { addressLine2 += zipCode; } - const addressLine1 = this.getTitleCase(provider?.address?.streetAddress); + const addressLine1 = this.toTitleCase(provider?.address?.streetAddress); const joinString = addressLine1.length > 0 && addressLine2.length > 0 ? ', ' : ''; return [addressLine1, addressLine2].join(joinString); }, @@ -354,7 +355,7 @@ export default { } }, getShopButtonDataFromProvider(provider) { - const cellNumber = this.getDisplayPhoneNumber(provider?.phoneNumber); + const cellNumber = this.toDisplayPhoneNumber(provider?.phoneNumber); const distance = provider?.distanceInMiles !== null && !Number.isNaN(parseFloat(provider?.distanceInMiles)) ? +provider.distanceInMiles.toFixed(1) : null; @@ -368,31 +369,8 @@ export default { value: provider?.providerNumber ?? '' }; }, - getDisplayPhoneNumber(phoneNumber) { - let result = ''; - if (!phoneNumber) { return result; } - let remainingDigits = phoneNumber.match(/\d+/g).join(''); - if (remainingDigits.length === 11) { - result += `${remainingDigits[0]}-`; - remainingDigits = remainingDigits.substring(1); - } - if (remainingDigits.length === 10) { - result += remainingDigits.replace(/^(\d{3})(\d{3})(\d{4})/, '$1-$2-$3'); - } - return result; - }, - getTitleCase(text) { - if ((text?.length ?? 0) === 0) { - return ''; - } - const wordList = text.split(' '); - const titleCaseWordList = wordList.map((word) => { - const first = word[0].toUpperCase(); - const rest = word.substring(1).toLowerCase(); - return first + rest; - }); - return titleCaseWordList.join(' '); - } + toDisplayPhoneNumber, + toTitleCase } };