diff --git a/src/layouts/tpa-search/__snapshots__/tpa-search.spec.js.snap b/src/layouts/tpa-search/__snapshots__/tpa-search.spec.js.snap index b34c010c..4154d1a8 100644 --- a/src/layouts/tpa-search/__snapshots__/tpa-search.spec.js.snap +++ b/src/layouts/tpa-search/__snapshots__/tpa-search.spec.js.snap @@ -7,7 +7,7 @@ Object { }, "dataLoaded": false, "filter": "", - "mapZipCode": "12663", + "mapZipCode": null, "providers": Array [], "reloadingProviders": false, "rules": Object { @@ -202,6 +202,6 @@ Object { "siteHeader": "SiteHeaderWidget", "tpaSearchQuestion": "TPASearchQuestion", }, - "zipCode": "12663", + "zipCode": null, } `; diff --git a/src/layouts/tpa-search/tpa-search.spec.js b/src/layouts/tpa-search/tpa-search.spec.js index 30318933..56aa4e34 100644 --- a/src/layouts/tpa-search/tpa-search.spec.js +++ b/src/layouts/tpa-search/tpa-search.spec.js @@ -807,11 +807,30 @@ describe('TPA search page', () => { }); // TODO confirm tests appropriate. Also should this method be async? describe('on providers', () => { + test('does not update provider number when dataLoaded false', () => { + // Arrange + const initialValue = 1234; + const { wrapper } = getMountedComponent({}, { + dataLoaded: false, + selectedProviderNumber: initialValue, + }); + const value = 'some other value'; + const newProviders = [{ providerNumber: value }]; + + // Act + wrapper.vm.$options.watch.providers.call(wrapper.vm, newProviders); + + // Assert + expect(wrapper.vm.selectedProviderNumber).toBe(initialValue); + }); test.each([null, undefined, []])( 'sets selected provider number to "" when there are no providers', (newProviders) => { // Arrange - const { wrapper } = getMountedComponent(); + const { wrapper } = getMountedComponent({}, { + dataLoaded: true, + selectedProviderNumber: null + }); // Act wrapper.vm.$options.watch.providers.call(wrapper.vm, newProviders); @@ -822,7 +841,10 @@ describe('TPA search page', () => { ); test('sets selected provider number to value of provider when there is one provider', () => { // Arrange - const { wrapper } = getMountedComponent(); + const { wrapper } = getMountedComponent({}, { + dataLoaded: true, + selectedProviderNumber: null + }); const value = 'some value'; const newProviders = [{ providerNumber: value }]; @@ -834,7 +856,10 @@ describe('TPA search page', () => { }); test('sets selected provider number to "" when there are more than one provider', () => { // Arrange - const { wrapper } = getMountedComponent(); + const { wrapper } = getMountedComponent({}, { + dataLoaded: true, + selectedProviderNumber: null + }); const newProviders = [{ value: 'val1' }, { value: 'val2' }]; // Act @@ -846,10 +871,36 @@ describe('TPA search page', () => { }); describe('selectedProviderNumber', () => { describe('does not call updateServiceLocation when', () => { + test('dataLoaded is false', () => { + // Arrange + const providerNumber = 38447; + const { wrapper } = getMountedComponent({}, { + providers: [{ + providerNumber, + address: { + streetAddress: '143 Average Lane', + city: 'Cambridge', + state: 'OH', + zipCode: '72983', + zipCodeCtu: '0390' + }, + companyName: "Sally's Auto", + phoneNumber: '1234567890' + }], + dataLoaded: false + }); + + // Act + wrapper.vm.$options.watch.selectedProviderNumber.call(wrapper.vm, providerNumber); + + // Assert + expect(wrapper.vm.mainStore.updateServiceLocation).not.toHaveBeenCalled(); + }); test('providers list is null ', () => { // Arrange const { wrapper } = getMountedComponent({}, { - providers: null + providers: null, + dataLoaded: true }); const newProviderNumber = 11235; @@ -862,7 +913,8 @@ describe('TPA search page', () => { test('providers list is empty ', () => { // Arrange const { wrapper } = getMountedComponent({}, { - providers: [] + providers: [], + dataLoaded: true }); const newProviderNumber = 11235; @@ -886,7 +938,8 @@ describe('TPA search page', () => { }, companyName: "Sally's Auto", phoneNumber: '1234567890' - }] + }], + dataLoaded: true }); const newProviderNumber = 11235; @@ -919,18 +972,26 @@ describe('TPA search page', () => { companyName, phoneNumber }; + const filter = '10 miles'; + const serviceZipCode = 10098; const { wrapper } = getMountedComponent({}, { providers: [ provider, { providerNumber: 328949832 } - ] + ], + filter, + zipCode: serviceZipCode, + dataLoaded: true }); // Act wrapper.vm.$options.watch.selectedProviderNumber.call(wrapper.vm, newProviderNumber); // Assert + expect(wrapper.vm.mainStore.updateServiceLocation).toHaveBeenCalledTimes(1); expect(wrapper.vm.mainStore.updateServiceLocation).toHaveBeenCalledWith({ + searchFilter: filter, + zipCode: serviceZipCode, provider: { providerNumber: newProviderNumber, address: { @@ -1292,11 +1353,89 @@ describe('TPA search page', () => { }); }); describe('before route enter', () => { + test('when service location zipCode set in store, it is used', async () => { + // Arrange + const { wrapper } = getMountedComponent(); + const customerZipCode = '18394'; + const serviceZipCode = '43982'; + useMainStore().order.customer.address.zipCode = customerZipCode; + useMainStore().order.serviceLocation.zipCode = serviceZipCode; + + // 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.zipCode).toBe(serviceZipCode); + }); + test('when service location zipCode not set in store, customer zipCode used', async () => { + // Arrange + const { wrapper } = getMountedComponent(); + const customerZipCode = '18394'; + useMainStore().order.customer.address.zipCode = customerZipCode; + useMainStore().order.serviceLocation.zipCode = null; + + // 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.zipCode).toBe(customerZipCode); + }); + test('when search filter set in store, expected filter and provider number returned', async () => { + // Arrange + const { wrapper } = getMountedComponent(); + const customerZipCode = '18394'; + const searchFilter = '25 miles'; + const providerNumber = 749321; + useMainStore().order.customer.address.zipCode = customerZipCode; + useMainStore().order.serviceLocation.zipCode = null; + useMainStore().order.serviceLocation.searchFilter = searchFilter; + useMainStore().order.serviceLocation.provider.providerNumber = providerNumber; + const providers = [{ companyName: 'some provider' }]; + const expectedRadius = 25; + useMainStore().getTpaProviders = jest.fn().mockImplementation((_, radius) => + ({ data: { shopProviders: radius === expectedRadius ? providers : [] } })); + + // 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(searchFilter); + expect(wrapper.vm.providers).toEqual(providers); + expect(wrapper.vm.selectedProviderNumber).toBe(providerNumber); + expect(useMainStore().getTpaProviders).toBeCalledTimes(1); + expect(useMainStore().getTpaProviders).toBeCalledWith(customerZipCode, expectedRadius); + }); 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; + useMainStore().order.customer.address.zipCode = '00001'; + useMainStore().order.serviceLocation.zipCode = zipCode; + useMainStore().order.serviceLocation.searchFilter = null; const providers = [{ companyName: 'provider' }]; useMainStore().getTpaProviders = jest.fn().mockImplementation((_, radius) => ({ data: { shopProviders: radius === 15 ? providers : [] } })); @@ -1314,15 +1453,19 @@ describe('TPA search page', () => { await wrapper.vm.$nextTick(); // Assert + expect(wrapper.vm.zipCode).toBe(zipCode); expect(wrapper.vm.filter).toBe(expectedFilter); expect(wrapper.vm.providers).toEqual(providers); + expect(wrapper.vm.selectedProviderNumber).toBeNull(); 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 () => { // Arrange const { wrapper } = getMountedComponent(); const zipCode = '18394'; - useMainStore().order.customer.address.zipCode = zipCode; + useMainStore().order.customer.address.zipCode = '00001'; + useMainStore().order.serviceLocation.zipCode = zipCode; + useMainStore().order.serviceLocation.searchFilter = null; const providers = [{ companyName: 'provider' }]; useMainStore().getTpaProviders = jest.fn().mockImplementation((_, radius) => ({ data: { shopProviders: radius === 25 ? providers : [] } })); @@ -1340,15 +1483,19 @@ describe('TPA search page', () => { await wrapper.vm.$nextTick(); // Assert + expect(wrapper.vm.zipCode).toBe(zipCode); expect(wrapper.vm.filter).toBe(expectedFilter); expect(wrapper.vm.providers).toEqual(providers); + expect(wrapper.vm.selectedProviderNumber).toBeNull(); 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 () => { // Arrange const { wrapper } = getMountedComponent(); const zipCode = '18394'; - useMainStore().order.customer.address.zipCode = zipCode; + useMainStore().order.customer.address.zipCode = '00001'; + useMainStore().order.serviceLocation.zipCode = zipCode; + useMainStore().order.serviceLocation.searchFilter = null; const providers = [{ companyName: 'provider' }]; useMainStore().getTpaProviders = jest.fn().mockImplementation((_, radius) => ({ data: { shopProviders: radius === 50 ? providers : [] } })); @@ -1366,8 +1513,10 @@ describe('TPA search page', () => { await wrapper.vm.$nextTick(); // Assert + expect(wrapper.vm.zipCode).toBe(zipCode); expect(wrapper.vm.filter).toBe(expectedFilter); expect(wrapper.vm.providers).toEqual(providers); + expect(wrapper.vm.selectedProviderNumber).toBeNull(); expect(useMainStore().getTpaProviders).toBeCalledTimes(3); }); test( @@ -1377,6 +1526,8 @@ describe('TPA search page', () => { const { wrapper } = getMountedComponent(); const zipCode = '18394'; useMainStore().order.customer.address.zipCode = zipCode; + useMainStore().order.serviceLocation.zipCode = null; + useMainStore().order.serviceLocation.searchFilter = null; const providers = [{ companyName: 'provider' }]; useMainStore().getTpaProviders = jest.fn().mockImplementation((_, radius) => ({ data: { shopProviders: radius === 100 ? providers : [] } })); @@ -1394,8 +1545,10 @@ describe('TPA search page', () => { await wrapper.vm.$nextTick(); // Assert + expect(wrapper.vm.zipCode).toBe(zipCode); expect(wrapper.vm.filter).toBe(expectedFilter); expect(wrapper.vm.providers).toEqual(providers); + expect(wrapper.vm.selectedProviderNumber).toBeNull(); expect(useMainStore().getTpaProviders).toBeCalledTimes(4); } ); @@ -1405,7 +1558,9 @@ describe('TPA search page', () => { // Arrange const { wrapper } = getMountedComponent(); const zipCode = '18394'; - useMainStore().order.customer.address.zipCode = zipCode; + useMainStore().order.customer.address.zipCode = '00001'; + useMainStore().order.serviceLocation.zipCode = zipCode; + useMainStore().order.serviceLocation.searchFilter = null; useMainStore().getTpaProviders = jest.fn().mockImplementation(() => ([])); const expectedFilter = '100 miles'; @@ -1421,8 +1576,10 @@ describe('TPA search page', () => { await wrapper.vm.$nextTick(); // Assert + expect(wrapper.vm.zipCode).toBe(zipCode); expect(wrapper.vm.filter).toBe(expectedFilter); expect(wrapper.vm.providers).toEqual([]); + expect(wrapper.vm.selectedProviderNumber).toBeNull(); expect(useMainStore().getTpaProviders).toBeCalledTimes(4); } );