Adding tests to tpa search

This commit is contained in:
Michaela Brydon 2023-11-14 16:38:07 -05:00
parent 6005424f9a
commit 612a2f8b7b
2 changed files with 383 additions and 14 deletions

View file

@ -149,16 +149,31 @@ describe('TPA search page', () => {
// Assert
expect(providerSelectionForm.exists()).toBeTruthy();
});
test('map', () => {
test('map', async () => {
// Arrange
const wrapper = shallowMount(tpaSearch, getMountOptions());
const zipCode = '12345';
const { wrapper } = getMountedComponent();
await wrapper.setData({
providers: [{
address: {
streetAddress: '123 Lane Ave',
city: 'New York',
state: 'NY',
zipCode: '99230'
}
}],
mapZipCode: zipCode
});
const expectedAddresses = ['123 Lane Ave, New York, NY 99230'];
// Act
const map = wrapper.find('#map');
const map = wrapper.findComponent('#map');
// Assert
expect(map.exists()).toBeTruthy();
expect(map.classes()).toContain('mb-4');
expect(map.props().addresses).toEqual(expectedAddresses);
expect(map.props().zipCode).toBe(zipCode);
});
test('search radius filter', () => {
// Arrange
@ -173,9 +188,32 @@ describe('TPA search page', () => {
expect(searchRadiusFilter.props().cmsWidgetName).toBe(expectedWidgetName);
expect(searchRadiusFilter.props().validationRules).toBe(globalRules.OPTION_REQUIRED);
});
test('select provider question', () => {
test('select provider question', async () => {
// Arrange
const wrapper = shallowMount(tpaSearch, getMountOptions());
await wrapper.setData({
providers: [{
name: 'Shop Auto Glass',
phoneNumber: '740-555-1234',
distanceInMiles: 1.2345,
providerNumber: '232209',
address: {
streetAddress: '123 Lane Ave',
city: 'New York',
state: 'NY',
zipCode: '99230'
}
}]
});
const expectedAnswers = [{
buttonLabel: 'Shop Auto Glass',
buttonLabelSubCopy: '1.2 mi',
buttonBodyCopy: '123 Lane Ave, New York, NY 99230<br>740-555-1234',
value: '232209'
}];
const expectedAdditionalButtonData = {
displayAvailabilityIndicators: false
};
// Act
const selectProviderQuestion = wrapper.findComponent('#selectProviderQuestion');
@ -188,6 +226,8 @@ describe('TPA search page', () => {
expect(selectProviderQuestion.props().textPosition).toBe('text-start');
expect(selectProviderQuestion.props().isRequired).toBeTruthy();
expect(selectProviderQuestion.props().validationRules).toBe(globalRules.OPTION_REQUIRED);
expect(selectProviderQuestion.props().answers).toEqual(expectedAnswers);
expect(selectProviderQuestion.props().additionalButtonData).toEqual(expectedAdditionalButtonData);
});
test.each([[], null, undefined])(
'no network providers alert when providers length is 0, undefined, or null',
@ -447,11 +487,142 @@ describe('TPA search page', () => {
expect(result).toEqual(expected);
});
});
describe('providerAddresses', () => {
test.each([null, undefined, []])(
'returns empty list when providers empty',
async (providers) => {
// Arrange
const wrapper = shallowMount(tpaSearch, getMountOptions());
await wrapper.setData({ providers });
// Act
const result = wrapper.vm.providerAddresses;
// Assert
expect(result).toEqual([]);
}
);
test('returns expected when providers not empty', async () => {
// Arrange
const wrapper = shallowMount(tpaSearch, getMountOptions());
await wrapper.setData({
providers: [
{
name: 'Shop Auto Glass',
phoneNumber: '740-555-1234',
distanceInMiles: 1.2345,
providerNumber: '232209',
address: {
streetAddress: '123 Lane Ave',
city: 'New York',
state: 'NY',
zipCode: '99230'
}
},
{
name: 'Safelite AutoGlass',
phoneNumber: '676-555-0099',
distanceInMiles: 123.9452,
providerNumber: '123456',
address: {
streetAddress: '2003 Coral Ln',
city: 'Birmingham',
state: 'AL',
zipCode: '43001'
}
}
]
});
const expectedResult = [
'123 Lane Ave, New York, NY 99230',
'2003 Coral Ln, Birmingham, AL 43001'
];
// Act
const result = wrapper.vm.providerAddresses;
// Assert
expect(result).toEqual(expectedResult);
});
});
describe('providerButtonData', () => {
test.each([null, undefined, []])(
'returns empty list when providers empty',
async (providers) => {
// Arrange
const wrapper = shallowMount(tpaSearch, getMountOptions());
await wrapper.setData({ providers });
// Act
const result = wrapper.vm.providerButtonData;
// Assert
expect(result).toEqual([]);
}
);
test('returns expected when providers not empty', async () => {
// Arrange
const wrapper = shallowMount(tpaSearch, getMountOptions());
await wrapper.setData({
providers: [
{
name: 'Shop Auto Glass',
phoneNumber: '740-555-1234',
distanceInMiles: 1.2345,
providerNumber: '232209',
address: {
streetAddress: '123 Lane Ave',
city: 'New York',
state: 'NY',
zipCode: '99230'
}
},
{
name: 'Safelite AutoGlass',
phoneNumber: '676-555-0099',
distanceInMiles: 123.9452,
providerNumber: '123456',
address: {
streetAddress: '2003 Coral Ln',
city: 'Birmingham',
state: 'AL',
zipCode: '43001'
}
}
]
});
const expectedResult = [
{
buttonLabel: 'Shop Auto Glass',
buttonLabelSubCopy: '1.2 mi',
buttonBodyCopy: '123 Lane Ave, New York, NY 99230<br>740-555-1234',
value: '232209'
},
{
buttonLabel: 'Safelite AutoGlass',
buttonLabelSubCopy: '123.9 mi',
buttonBodyCopy: '2003 Coral Ln, Birmingham, AL 43001<br>676-555-0099',
value: '123456'
}
];
// Act
const result = wrapper.vm.providerButtonData;
// Assert
expect(result).toEqual(expectedResult);
});
});
});
describe('watch', () => {
test('on filter calls getTpaProviders and sets providers', async () => {
// Arrange
const { wrapper } = getMountedComponent();
const zipCode = '78220';
const initialMapZipCode = '88800';
const { wrapper } = getMountedComponent({}, {
zipCode,
mapZipCode: initialMapZipCode
});
const providers = { data: { shopProviders: ['some data', 'some more data']} };
useMainStore().getTpaProviders = jest.fn().mockImplementationOnce(() => (providers));
const newFilter = 'new filter';
@ -462,6 +633,7 @@ describe('TPA search page', () => {
// Assert
expect(useMainStore().getTpaProviders).toBeCalled();
expect(wrapper.vm.providers).toEqual(providers.data.shopProviders);
expect(wrapper.vm.mapZipCode).toBe(zipCode);
});
describe('on providers', () => {
test.each([null, undefined, []])(
@ -503,6 +675,34 @@ describe('TPA search page', () => {
});
});
describe('method', () => {
test.each([
['address', 'city', 'ST', 'zip', 'address, city, ST zip'],
['address', null, 'ST', 'zip', 'address, ST zip'],
['address', 'city', null, 'zip', 'address, city zip'],
['address', 'city', 'ST', null, 'address, city, ST'],
[null, null, null, null, '']
])(
'getProviderAddress returns expected',
(streetAddress, city, state, zipCode, expected) => {
// Arrange
const { wrapper } = getMountedComponent();
useMainStore().getTpaProviders = jest.fn().mockImplementationOnce(() => (newProviders));
const provider = {
address: {
streetAddress,
city,
state,
zipCode
}
};
// Act
const result = wrapper.vm.getProviderAddress(provider);
// Assert
expect(result).toEqual(expected);
}
);
describe('getProviderButtonData', () => {
test.each([null, undefined, {}])(
'returns empty list when getTpaProviders returns no data',
@ -550,7 +750,12 @@ describe('TPA search page', () => {
'sets providers to empty list when no data returned from getProviders',
async (newProviders) => {
// Arrange
const { wrapper } = getMountedComponent();
const zipCode = '28331';
const initialMapZipCode = '10022';
const { wrapper } = getMountedComponent({}, {
zipCode,
mapZipCode: initialMapZipCode
});
useMainStore().getTpaProviders = jest.fn().mockImplementationOnce(() => (newProviders));
// Act
@ -558,11 +763,17 @@ describe('TPA search page', () => {
// Assert
expect(wrapper.vm.providers).toEqual([]);
expect(wrapper.vm.mapZipCode).toEqual(zipCode);
}
);
test('returns value from getProviders', async () => {
// Arrange
const { wrapper } = getMountedComponent();
const zipCode = '12990';
const initialMapZipCode = '00981';
const { wrapper } = getMountedComponent({}, {
zipCode,
mapZipCode: initialMapZipCode
});
const shopProviders = [{ name: 'foo' }];
useMainStore().getTpaProviders = jest.fn().mockImplementationOnce(() => ({
data: { shopProviders }
@ -573,6 +784,7 @@ describe('TPA search page', () => {
// Assert
expect(wrapper.vm.providers).toEqual(shopProviders);
expect(wrapper.vm.mapZipCode).toEqual(zipCode);
});
});
test('backButtonAction invokes navigate method', () => {
@ -619,6 +831,162 @@ describe('TPA search page', () => {
expect(result).toBeNull();
});
});
describe('getShopButtonDataFromProvider', () => {
test.each([null, undefined, {}])(
'returns empty list given parameter with no provider',
(provider) => {
// Arrange
const wrapper = shallowMount(tpaSearch, getMountOptions());
const expectedResult = {
buttonLabel: '',
buttonLabelSubCopy: '',
buttonBodyCopy: '<br>',
value: ''
};
// Act
const result = wrapper.vm.getShopButtonDataFromProvider(provider);
// Assert
expect(result).toEqual(expectedResult);
}
);
test('returns expected given provider', () => {
// Arrange
const wrapper = shallowMount(tpaSearch, getMountOptions());
const provider = {
name: 'Shop Auto Glass',
phoneNumber: '740-555-1234',
distanceInMiles: 1.2345,
providerNumber: '232209',
address: {
streetAddress: '123 Lane Ave',
city: 'New York',
state: 'NY',
zipCode: '99230'
}
};
const expectedResult = {
buttonLabel: 'Shop Auto Glass',
buttonLabelSubCopy: '1.2 mi',
buttonBodyCopy: '123 Lane Ave, New York, NY 99230<br>740-555-1234',
value: '232209'
};
// Act
const result = wrapper.vm.getShopButtonDataFromProvider(provider);
// Assert
expect(result).toEqual(expectedResult);
});
describe('returns result with button label', () => {
test.each(['', undefined, null])(
'equal to empty string when name is empty',
(name) => {
// Arrange
const wrapper = shallowMount(tpaSearch, getMountOptions());
const provider = { name };
// Act
const result = wrapper.vm.getShopButtonDataFromProvider(provider);
// Assert
expect(result.buttonLabel).toEqual('');
}
);
test('returns provider name when exists', () => {
// Arrange
const wrapper = shallowMount(tpaSearch, getMountOptions());
const name = 'Some Shop Name';
const provider = { name };
// Act
const result = wrapper.vm.getShopButtonDataFromProvider(provider);
// Assert
expect(result.buttonLabel).toEqual(name);
});
});
describe('returns result with button label sub copy', () => {
test.each([null, undefined, 'random string'])(
'as empty string when distanceInMiles is not a number',
(distanceInMiles) => {
// Arrange
const wrapper = shallowMount(tpaSearch, getMountOptions());
const provider = { distanceInMiles };
// Act
const result = wrapper.vm.getShopButtonDataFromProvider(provider);
// Assert
expect(result.buttonLabelSubCopy).toEqual('');
}
);
test.each([[0, 0], [0, 0.000], [-7.89, -7.9], [109, 109], [1.234, 1.2], [2.99, 3]])(
'displays expected distance value',
(distanceInMiles, displayedDistance) => {
// Arrange
const wrapper = shallowMount(tpaSearch, getMountOptions());
const provider = { distanceInMiles };
const expectedSubCopy = `${displayedDistance} mi`;
// Act
const result = wrapper.vm.getShopButtonDataFromProvider(provider);
// Assert
expect(result.buttonLabelSubCopy).toEqual(expectedSubCopy);
}
);
});
test('returns result with button body copy showing expected address and phone number', () => {
// Arrange
const wrapper = shallowMount(tpaSearch, getMountOptions());
const provider = {
phoneNumber: '123-555-0099',
address: {
streetAddress: '434 Up Down Blvd',
city: 'San Francisco',
state: 'CA',
zipCode: '90887'
}
};
const expected = '434 Up Down Blvd, San Francisco, CA 90887<br>123-555-0099';
// Act
const result = wrapper.vm.getShopButtonDataFromProvider(provider);
// Assert
expect(result.buttonBodyCopy).toEqual(expected);
});
describe('returns result with value', () => {
test.each(['', undefined, null])(
'equal to empty string when providerNumber is empty',
(providerNumber) => {
// Arrange
const wrapper = shallowMount(tpaSearch, getMountOptions());
const provider = { providerNumber };
// Act
const result = wrapper.vm.getShopButtonDataFromProvider(provider);
// Assert
expect(result.value).toEqual('');
}
);
test('returns provider number when exists', () => {
// Arrange
const wrapper = shallowMount(tpaSearch, getMountOptions());
const providerNumber = '123391';
const provider = { providerNumber };
// Act
const result = wrapper.vm.getShopButtonDataFromProvider(provider);
// Assert
expect(result.value).toEqual(providerNumber);
});
});
});
});
describe('before route enter', () => {
test('when providers exist at 25 mile radius, filter is set to "25 miles" and providers set to expected', async () => {

View file

@ -254,7 +254,10 @@ export default {
if (city) {
addressLine2 = city;
if (state || zipCode) {
addressLine2 = ', ';
if (state) {
addressLine2 += ',';
}
addressLine2 += ' ';
}
}
if (state) {
@ -288,7 +291,6 @@ export default {
providers = tpaProvidersRadius100;
}
}
console.log(`radius: ${radius}`);
this.filter = radius;
this.providers = providers?.data?.shopProviders ?? [];
},
@ -324,18 +326,17 @@ export default {
}
},
getShopButtonDataFromProvider(provider) {
const { phoneNumber } = provider;
const distance = provider?.distanceInMiles
const cellNumber = provider?.phoneNumber ?? '';
const distance = provider?.distanceInMiles !== null && !Number.isNaN(parseFloat(provider?.distanceInMiles))
? +provider.distanceInMiles.toFixed(1)
: null;
return {
buttonLabel: provider?.name ?? '',
buttonLabelSubCopy: distance == null
buttonLabelSubCopy: distance === null
? ''
: `${distance} mi`,
buttonBodyCopy: `${this.getProviderAddress(provider)}<br>${phoneNumber}`,
buttonBodyCopy: `${this.getProviderAddress(provider)}<br>${cellNumber ?? ''}`,
value: provider?.providerNumber ?? ''
};
}