diff --git a/src/layouts/policy-holder-details/policy-holder-details.vue b/src/layouts/policy-holder-details/policy-holder-details.vue index 7956343a..46789bfa 100644 --- a/src/layouts/policy-holder-details/policy-holder-details.vue +++ b/src/layouts/policy-holder-details/policy-holder-details.vue @@ -83,135 +83,95 @@ export default { { resultKey: "cmsContent", promise: cmsContentPromise, - },]; - - //use resultMap to populate layout content. - let resultMap = await settleAllPromises(promiseResultMap); - - next((vm) => { - vm.setCmsContent(resultMap.cmsContent); - }); - - }, - created(){ - this.getVehiclesfromPolicyLookup(); - }, - methods: - { - backButtonAction() { - this.$router.navigate(this.navigationScenarios.CLICKED_BACK, this.$route); }, + ]; - async forwardButtonAction() - { - this.mainStore.updatePolicyHolderDetails(this.customerQuestions); - return this.navigateForward(); - }, + //use resultMap to populate layout content. + let resultMap = await settleAllPromises(promiseResultMap); - navigateForward() { - if(this.vehiclesCount > 0) + next((vm) => { + vm.setCmsContent(resultMap.cmsContent); + }); + + }, + methods: + { + backButtonAction() { + this.$router.navigate(this.navigationScenarios.CLICKED_BACK, this.$route); + }, + + async forwardButtonAction() + { + this.mainStore.updatePolicyHolderDetails(this.customerQuestions); + return this.navigateForward(); + }, + + navigateForward() { + if(this.vehiclesCount > 0) + this.$router.navigate( + this.navigationScenarios.CLICKED_FORWARD_POLICY_VERIFIED, + this.$route, + {}, + {}, + this.vehiclesFound + ); + else this.$router.navigate( - this.navigationScenarios.CLICKED_FORWARD_POLICY_VERIFIED, - this.$route, - {}, - {}, - this.vehiclesFound - ); - else - this.$router.navigate( - this.navigationScenarios.CLICKED_FORWARD_POLICY_UNVERIFIED, - this.$route - ); - }, - getPolicyHolderDetailsFromStore() { - return { - addressQuestions : - { - streetAddress: this.mainStore.order.customer.address.streetAddress, - streetAddress2: this.mainStore.order.customer.address.streetAddress2, - city: this.mainStore.order.customer.address.city, - state: this.mainStore.order.customer.address.state, - zipCode: this.mainStore.order.customer.address.zipCode, - }, - firstName : this.mainStore.order.customer.firstName, - lastName : this.mainStore.order.customer.lastName, - } - }, - async getPolicyLookupResponse(){ - const policyLookupResponse = this.mainStore.getCoveragePolicyInfo({ - accountNumber:this.mainStore.order.accountNumber.toString(), - policyNumber:this.mainStore.order.policy.policyNumber, - dateOfLoss:this.mainStore.order.policy.dateOfLoss}); - - // Settle promises and get results - const promisePolicyLookupResultMap = [ - { - resultKey: "policyLookupResponse", - promise: policyLookupResponse, - } - ]; - const policyLookupResultMap = await settleAllPromises(promisePolicyLookupResultMap); - return policyLookupResultMap.policyLookupResponse; - }, - async getVehiclesfromPolicyLookup() - { - //call coverage policy lookup if isCoverageEnabled flag enabled - if(this.isCoverageEnabled){ - const policyLookupResponse = await this.getPolicyLookupResponse(); - if(policyLookupResponse!=null){ - var policy = policyLookupResponse.policies?.[0]; - if(policy!=null){ - //populate policy holder details from policy lookup - this.mainStore.order.customer.address.streetAddress = policy.insureds?.[0]?.address; - this.mainStore.order.customer.address.city=policy.insureds?.[0]?.city; - this.mainStore.order.customer.address.state=policy.insureds?.[0]?.state; - this.mainStore.order.customer.address.zipCode=policy.insureds?.[0]?.zipCode; - this.mainStore.order.customer.firstName = policy.insureds?.[0]?.firstName; - this.mainStore.order.customer.lastName = policy.insureds?.[0]?.lastName; - - this.customerQuestions = this.getPolicyHolderDetailsFromStore(); - //populate vehicles - this.vehiclesFound= policy.vehicles; - } - } - } - }, - + this.navigationScenarios.CLICKED_FORWARD_POLICY_UNVERIFIED, + this.$route + ); }, - computed:{ - isCoverageEnabled(){ - return this.mainStore.issConfig.isCoverageEnabled; - }, - vehiclesCount(){ - return this.vehiclesFound.length; - } + + getPolicyHolderDetailsFromStore() { + return { + addressQuestions : + { + streetAddress: this.mainStore.order.customer.address.streetAddress, + streetAddress2: this.mainStore.order.customer.address.streetAddress2, + city: this.mainStore.order.customer.address.city, + state: this.mainStore.order.customer.address.state, + zipCode: this.mainStore.order.customer.address.zipCode, + }, + firstName : this.mainStore.order.customer.firstName, + lastName : this.mainStore.order.customer.lastName, + } + }, + }, + computed:{ + isCoverageEnabled(){ + return this.mainStore.issConfig.isCoverageEnabled; }, - components: { - siteHeader, - siteSubHeader, - textboxQuestion, - addressQuestions, - siteFooter, - Form, - }, - } - - +#address-questions-wrapper .alert.heading { + line-height: 24px; +} + +#address-questions-wrapper .form-test-error { + line-height: 24px; +} + diff --git a/src/layouts/welcome-page/welcome-page.spec.js b/src/layouts/welcome-page/welcome-page.spec.js index 195f129d..48bb9080 100644 --- a/src/layouts/welcome-page/welcome-page.spec.js +++ b/src/layouts/welcome-page/welcome-page.spec.js @@ -8,6 +8,9 @@ import { fetchCmsContentForPage } from "@/helpers/cms-content-helper"; import baseMixin from "@/mixins/base-mixin.js"; import { getMountOptions } from "@/helpers/unit-test-helper.js"; import { applicationConfig } from "@/constants/application-config"; +import { useMainStore } from "@/store"; +import { navigationScenarios } from "@/router/router-constants/navigation-scenarios"; + // Mock our module for promises. jest.mock("@/helpers/layout-helper.js", () => ({ settleAllPromises: jest.fn(), @@ -22,9 +25,7 @@ jest.mock("@/helpers/cms-content-helper", () => ({ describe("welcome-page.vue", () => { test("Should render welcomePage sub-components (policyNumber, policyZipCode, dateOfLoss, damageCause etc.)", async () => { // Arrange - - const { wrapper } = setupMocks({}); - + const { wrapper } = setupMocks({}); // Act const policyNumber = wrapper.findComponent({ ref: "policyNumber" }); @@ -36,7 +37,6 @@ describe("welcome-page.vue", () => { const phoneNumber = wrapper.findComponent({ ref: "phoneNumber" }); const email = wrapper.findComponent({ ref: "email" }); - // Assert expect(policyNumber.exists()).toBe(true); expect(dateOfLoss.exists()).toBe(true); @@ -49,26 +49,152 @@ describe("welcome-page.vue", () => { }); }); +describe("navigation", () => { + test("if policy and vehicles are found, navigate to policy-vehicle page", async () => { + // Arrange + const mockvehicles = [ + { + vin: "TEST_VIN", + }, + { + vin: "TEST_VIN2", + } + ]; + + const { wrapper } = setupMocks({ + policies: [{ + vehicles: [ + { + vin: "TEST_VIN" + }, + { + vin: "TEST_VIN2" + } + ] + }] + }); + + await wrapper.setData({ + isCoverageEnabled: true, + }); + + useMainStore().order.policy.policyNumber = "p_0001"; + useMainStore().order.policy.dateOfLoss = "2022-01-28"; + useMainStore().order.accountNumber = "00000"; + + // Act + await wrapper.vm.forwardButtonAction(); + + // Assert + expect(wrapper.vm.$router.navigate).toHaveBeenCalledWith( + navigationScenarios.CLICKED_FORWARD_POLICY_VERIFIED_WITH_VEHICLES, + undefined, + {}, + {}, + mockvehicles + ); + }); + test("if policy is found, but no vehicles, navigate to vehicle-selection page", async () => { + // Arrange + const { wrapper } = setupMocks({ + policies: [{}] + }); + + await wrapper.setData({ + isCoverageEnabled: true, + vehiclesCount: 0, + vehiclesFound: null, + }); + + useMainStore().order.policy.policyNumber = "p_0001"; + useMainStore().order.policy.dateOfLoss = "2022-01-28"; + useMainStore().order.accountNumber = "00000"; + + // Act + + await wrapper.vm.forwardButtonAction(); + + // Assert + expect(wrapper.vm.$router.navigate).toHaveBeenCalledWith( + navigationScenarios.CLICKED_FORWARD_POLICY_VERIFIED_NO_VEHICLES, + undefined + ); + }); + test("if policy is not found, navigate to policy-holder-details page", async () => { + // Arrange + const { wrapper } = setupMocks({ + policies: null + }); + + await wrapper.setData({ + isCoverageEnabled: true, + }); + + useMainStore().order.policy.policyNumber = "p_0001"; + useMainStore().order.policy.dateOfLoss = "2022-01-28"; + useMainStore().order.accountNumber = "00000"; + + // Act + await wrapper.vm.navigateForward(); + + // Assert + expect(wrapper.vm.$router.navigate).toHaveBeenCalledWith( + navigationScenarios.CLICKED_FORWARD_POLICY_UNVERIFIED, + undefined + ); + }); +}); + function setupMocks({ pageHeaderWidgetHeaderText = {}, pageFooterWidgetCmsContent = {}, mountOptionsMockData = {}, + policies = [], + getCoveragePolicyInfoResponse }) { + useMainStore().getCoveragePolicyInfo = jest.fn().mockImplementation(() => { + return Promise.resolve({ + data: getCoveragePolicyInfoResponse + ? getCoveragePolicyInfoResponse + : { + policies: [ + { + insureds: [ + { + customerId: "TEST_ID" + }, + ], + vehicles: [ + { + vin: "TEST_VIN" + }, + { + vin: "TEST_VIN2" + } + ] + }, + ], + }, + }) + }) + //Mock api responses const apiResponses = { cmsContent: { - SiteSubHeaderWidget: pageHeaderWidgetHeaderText, - VehicleBannerWidget: { - GenericVehicleImage: - `${applicationConfig.ISS_DEV_CMS_DOMAIN}/images/default-source/default-album/blurred-image.jpg`, + SiteSubHeaderWidget: pageHeaderWidgetHeaderText, + VehicleBannerWidget: { + GenericVehicleImage: + `${applicationConfig.ISS_DEV_CMS_DOMAIN}/images/default-source/default-album/blurred-image.jpg`, + }, + SiteHeaderWidget: { + LogoImage: + `${applicationConfig.ISS_DEV_CMS_DOMAIN}/images/default-source/default-album/logos/insuranceLogo.jpg`, + }, + SiteFooterWidget: pageFooterWidgetCmsContent, }, - SiteHeaderWidget: { - LogoImage: - `${applicationConfig.ISS_DEV_CMS_DOMAIN}/images/default-source/default-album/logos/insuranceLogo.jpg`, - }, - SiteFooterWidget: pageFooterWidgetCmsContent, - - }, + policyLookupResponse: { + policies: policies + } }; mountOptionsMockData = { @@ -76,8 +202,6 @@ function setupMocks({ router: { navigate: jest.fn(), }, - - }; const apiPromise = Promise.resolve(apiResponses); diff --git a/src/layouts/welcome-page/welcome-page.vue b/src/layouts/welcome-page/welcome-page.vue index 32689479..c36a9a0b 100644 --- a/src/layouts/welcome-page/welcome-page.vue +++ b/src/layouts/welcome-page/welcome-page.vue @@ -45,7 +45,7 @@ /> -