Adding fourth case

This commit is contained in:
Michaela Brydon 2023-11-30 13:01:03 -05:00
parent 3fe1fd4c31
commit 7764556e56
2 changed files with 88 additions and 34 deletions

View file

@ -1238,8 +1238,55 @@ describe('TPA search page', () => {
}); });
}); });
}); });
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) => {
// Arrange
const { wrapper } = getMountedComponent();
// Act
const result = wrapper.vm.toTitleCase(input);
// Assert
expect(result).toEqual(expected);
}
);
}); });
describe('before route enter', () => { describe('before route enter', () => {
test('when providers exist at 15 mile radius, filter is set to "15 miles" and providers set to expected', async () => {
// Arrange
const { wrapper } = getMountedComponent();
const zipCode = '18394';
useMainStore().order.customer.address.zipCode = zipCode;
const providers = [{ companyName: 'provider' }];
useMainStore().getTpaProviders = jest.fn().mockImplementation((_, radius) =>
({ data: { shopProviders: radius === 15 ? providers : [] } }));
const expectedFilter = '15 miles';
// Act
await tpaSearch.beforeRouteEnter.call(
wrapper.vm,
{ query: { issPage: 'tpa-search' } },
undefined,
(c) => c(wrapper.vm)
);
await wrapper.vm.$nextTick();
await wrapper.vm.$nextTick();
// Assert
expect(wrapper.vm.filter).toBe(expectedFilter);
expect(wrapper.vm.providers).toEqual(providers);
expect(useMainStore().getTpaProviders).toBeCalledTimes(1);
});
test('when providers exist at 25 mile radius, filter is set to "25 miles" and providers set to expected', async () => { test('when providers exist at 25 mile radius, filter is set to "25 miles" and providers set to expected', async () => {
// Arrange // Arrange
const { wrapper } = getMountedComponent(); const { wrapper } = getMountedComponent();
@ -1264,7 +1311,7 @@ describe('TPA search page', () => {
// Assert // Assert
expect(wrapper.vm.filter).toBe(expectedFilter); expect(wrapper.vm.filter).toBe(expectedFilter);
expect(wrapper.vm.providers).toEqual(providers); expect(wrapper.vm.providers).toEqual(providers);
expect(useMainStore().getTpaProviders).toBeCalledTimes(1); expect(useMainStore().getTpaProviders).toBeCalledTimes(2);
}); });
test('when providers exist at 50 mile radius but not 25, filter is set to "50 miles" and providers set to expected', async () => { test('when providers exist at 50 mile radius but not 25, filter is set to "50 miles" and providers set to expected', async () => {
// Arrange // Arrange
@ -1290,7 +1337,7 @@ describe('TPA search page', () => {
// Assert // Assert
expect(wrapper.vm.filter).toBe(expectedFilter); expect(wrapper.vm.filter).toBe(expectedFilter);
expect(wrapper.vm.providers).toEqual(providers); expect(wrapper.vm.providers).toEqual(providers);
expect(useMainStore().getTpaProviders).toBeCalledTimes(2); expect(useMainStore().getTpaProviders).toBeCalledTimes(3);
}); });
test( test(
'when providers exist at 100 mile radius but not 50 or 25, filter is set to "100 miles" and providers set to expected', 'when providers exist at 100 mile radius but not 50 or 25, filter is set to "100 miles" and providers set to expected',
@ -1318,7 +1365,7 @@ describe('TPA search page', () => {
// Assert // Assert
expect(wrapper.vm.filter).toBe(expectedFilter); expect(wrapper.vm.filter).toBe(expectedFilter);
expect(wrapper.vm.providers).toEqual(providers); expect(wrapper.vm.providers).toEqual(providers);
expect(useMainStore().getTpaProviders).toBeCalledTimes(3); expect(useMainStore().getTpaProviders).toBeCalledTimes(4);
} }
); );
test( test(
@ -1345,7 +1392,7 @@ describe('TPA search page', () => {
// Assert // Assert
expect(wrapper.vm.filter).toBe(expectedFilter); expect(wrapper.vm.filter).toBe(expectedFilter);
expect(wrapper.vm.providers).toEqual([]); expect(wrapper.vm.providers).toEqual([]);
expect(useMainStore().getTpaProviders).toBeCalledTimes(3); expect(useMainStore().getTpaProviders).toBeCalledTimes(4);
} }
); );
}); });

View file

@ -140,14 +140,21 @@ import globalRules from '@/constants/global-rules.js';
import widgetFields from '@/constants/cms-widget-fields.js'; import widgetFields from '@/constants/cms-widget-fields.js';
import { shallowRef } from 'vue'; import { shallowRef } from 'vue';
const radiusFilterPairs = [
{ radius: 15, filter: '15 miles' },
{ radius: 25, filter: '25 miles' },
{ radius: 50, filter: '50 miles' },
{ radius: 100, filter: '100 miles' }
];
async function getInitialFilterAndProviders() { async function getInitialFilterAndProviders() {
const { zipCode } = useMainStore().order.customer.address; const { zipCode } = useMainStore().order.customer.address;
let pairIndex = 0; let pairIndex = 0;
let providers = []; let providers = [];
let filter = ''; let filter = '';
while (providers.length === 0 && pairIndex < this.radiusFilterPairs.length) { while (providers.length === 0 && pairIndex < radiusFilterPairs.length) {
const pair = this.radiusFilterPairs[pairIndex]; const pair = radiusFilterPairs[pairIndex];
const { radius } = pair; const { radius } = pair;
filter = pair.filter; filter = pair.filter;
// eslint-disable-next-line no-await-in-loop // eslint-disable-next-line no-await-in-loop
@ -157,7 +164,7 @@ async function getInitialFilterAndProviders() {
pairIndex += 1; pairIndex += 1;
} }
return {filter, providers}; return { filter, providers };
} }
export default { export default {
@ -213,13 +220,7 @@ export default {
filter: globalRules.OPTION_REQUIRED, // TODO do we even need this? filter: globalRules.OPTION_REQUIRED, // TODO do we even need this?
provider: globalRules.OPTION_REQUIRED provider: globalRules.OPTION_REQUIRED
}, },
shopListButton: shallowRef(shopListButton), shopListButton: shallowRef(shopListButton)
radiusFilterPairs: [
{ radius: 15, filter: '15 miles' },
{ radius: 25, filter: '25 miles' },
{ radius: 50, filter: '50 miles' },
{ radius: 100, filter: '100 miles' }
]
}; };
}, },
computed: { computed: {
@ -253,7 +254,7 @@ export default {
); );
}, },
radiusInMiles() { radiusInMiles() {
const pair = this.radiusFilterPairs.find((p) => p.filter === this.filter); const pair = radiusFilterPairs.find((p) => p.filter === this.filter);
return pair?.radius ?? 0; return pair?.radius ?? 0;
}, },
noNetworkShopsAlertHeaderText() { noNetworkShopsAlertHeaderText() {
@ -302,31 +303,27 @@ export default {
this.providers = providers; this.providers = providers;
}, },
getProviderAddress(provider) { getProviderAddress(provider) {
const city = provider?.address?.city ?? ''; const city = this.toTitleCase(provider?.address?.city);
const state = provider?.address?.state ?? ''; const state = provider?.address?.state ?? '';
const zipCode = provider?.address?.zipCode ?? ''; const zipCode = provider?.address?.zipCode ?? '';
let addressLine2 = ''; let addressLine2 = '';
if (city) { if (city) {
addressLine2 = city; addressLine2 += city;
if (state || zipCode) { if (state || zipCode) {
if (state) { addressLine2 += state ? ',' : ' ';
addressLine2 += ',';
}
addressLine2 += ' ';
} }
} }
if (state) { if (state) {
addressLine2 += `${state}`; addressLine2 += state;
if (zipCode) { addressLine2 += zipCode ? ' ' : '';
addressLine2 += ' ';
}
} }
if (zipCode) { if (zipCode) {
addressLine2 += `${zipCode}`; addressLine2 += zipCode;
} }
return provider?.address?.streetAddress
? `${provider.address.streetAddress}, ${addressLine2}` const addressLine1 = this.toTitleCase(provider?.address?.streetAddress);
: addressLine2; const joinString = addressLine1.length > 0 && addressLine2.length > 0 ? ', ' : '';
return [addressLine1, addressLine2].join(joinString);
}, },
async getProviderButtonData() { async getProviderButtonData() {
const getTpaProvidersResult = await useMainStore().getTpaProviders(this.zipCode, this.radiusInMiles); const getTpaProvidersResult = await useMainStore().getTpaProviders(this.zipCode, this.radiusInMiles);
@ -362,7 +359,7 @@ export default {
} }
}, },
getShopButtonDataFromProvider(provider) { getShopButtonDataFromProvider(provider) {
const cellNumber = this.getDisplayPhoneNumber(provider?.phoneNumber ?? ''); const cellNumber = this.getDisplayPhoneNumber(provider?.phoneNumber);
const distance = provider?.distanceInMiles !== null && !Number.isNaN(parseFloat(provider?.distanceInMiles)) const distance = provider?.distanceInMiles !== null && !Number.isNaN(parseFloat(provider?.distanceInMiles))
? +provider.distanceInMiles.toFixed(1) ? +provider.distanceInMiles.toFixed(1)
: null; : null;
@ -378,6 +375,7 @@ export default {
}, },
getDisplayPhoneNumber(phoneNumber) { getDisplayPhoneNumber(phoneNumber) {
let result = ''; let result = '';
if (!phoneNumber) { return result; }
let remainingDigits = phoneNumber; let remainingDigits = phoneNumber;
if (phoneNumber.length === 11) { if (phoneNumber.length === 11) {
result += `${remainingDigits[0]}-`; result += `${remainingDigits[0]}-`;
@ -387,10 +385,19 @@ export default {
result += remainingDigits.replace(/^(\d{3})(\d{3})(\d{4})/, '$1-$2-$3'); result += remainingDigits.replace(/^(\d{3})(\d{3})(\d{4})/, '$1-$2-$3');
} }
return result; return result;
}// , },
// toTitleCase(word) { toTitleCase(text) {
// const first = word[0]. 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(' ');
}
} }
}; };
</script> </script>