From a16f4364fab8f21d184c8c4370ed49b6d421397c Mon Sep 17 00:00:00 2001 From: brydon1 Date: Mon, 2 Oct 2023 17:30:39 -0400 Subject: [PATCH 01/28] Partial load session incorporation --- src/constants/endpoints.js | 4 +++ src/store/index.js | 71 +++++++++++++++++++++++++++++++++++++- 2 files changed, 74 insertions(+), 1 deletion(-) diff --git a/src/constants/endpoints.js b/src/constants/endpoints.js index a34d8990..f201efba 100644 --- a/src/constants/endpoints.js +++ b/src/constants/endpoints.js @@ -146,6 +146,10 @@ const endpoints = Object.freeze({ url: '/order/api/v1/order/save-session/iss', method: 'POST' }, + LoadSession: { + url: '/order/api/v1/order/load-session', + method: 'POST' + }, DuplicateSearch: { // eslint-disable-next-line max-len url: (accountNumber, policyNumber, phoneNumber) => `/order/api/v1/order/duplicate-check/${accountNumber}/${policyNumber}/${phoneNumber}`, diff --git a/src/store/index.js b/src/store/index.js index 1568c5b7..4bb69ffa 100644 --- a/src/store/index.js +++ b/src/store/index.js @@ -140,7 +140,7 @@ const getDefaultState = () => ({ pageData: {}, savedSessionTimeout: getDateForSavedSessionTimeout(), saveSessionPromise: null, - savedSessionId: null, + savedSessionId: '00000000-0000-0000-0000-000000000000', crmCustomerId: null, lastPageVisited: null, triggeredSiteEntry: false, @@ -937,6 +937,75 @@ export const useMainStore = defineStore({ }); }, + loadSession() { + // TODO how to get savedSessionId for a duplicate referral? + const result = globalMethods.callHttpClient({ + method: endpoints.SaveSession.method, + endpoint: endpoints.SaveSession.url, + payload: { + savedSessionId: this.applicationUser.savedSessionId?.toString(), + referralNumber: this.order.referralNumber?.toString(), + referralDate: this.order.referralDate?.toString(), + parentAccountNumber: this.issConfig.parentAccountNumber, + referralCorrelationId: this.order.referralCorrelationId + } + }); + this.applicationUser.crmCustomerId = result.applicationUser.crmCustomerId; + this.applicationUser.experiments = result.applicationUser.experiments; + this.applicationUser.lastPageVisited = result.applicationUser.lastPage; + this.applicationUser.pageData = result.applicationUser.pageData; + this.applicationUser.savedSessionId = result.applicationUser.savedSessionId; // TODO this might just be what is passed + + this.order.vehicle.registration.licensePlate = result.order.vehicle.registration.licensePlateNumber; + this.order.vehicle.imageUrl = result.order.vehicle.imageUrl; + this.order.vehicle.imageColor = result.order.vehicle.imageVifColor; + this.order.vehicle.imageVifNumber = result.order.vehicle.imageNumber; + this.order.vehicle.year = result.order.vehicle.year; + this.order.vehicle.make = result.order.vehicle.make; + this.order.vehicle.model = result.order.vehicle.model; + this.order.vehicle.style = result.order.vehicle.style; + this.order.vehicle.carId = result.order.vehicle.carId; + this.order.vehicle.category = result.order.vehicle.category; + this.order.vehicle.vin = result.order.vehicle.vin; + + this.order.damage.isRepair = result.order.damage.isRepair; + this.order.damage.numberOfChips = result.order.damage.numberOfChips; + this.order.damage.glassToReplace = result.order.damage.glassToReplace; // TODO this might need transformed + this.order.damage.capabilityQuestionAnswers = result.order.damage.capabilityQuestionAnswers; + this.order.damage.moldingQuestionAnswers = result.order.damage.moldingQuestionAnswers; + this.order.damage.partQuestionAnswers = result.order.damage.partQuestionAnswers; + + this.order.policy.policyNumber = result.order.policy.policyNumber; + this.order.policy.policyZipCode = result.order.policy.policyZipCode; + this.order.policy.noCoverage = result.order.policy.noCoverage; + this.order.policy.policyLookupSuccessful = result.order.policy.policyLookupSuccessful; // TODO probably don't need to load this + this.order.policy.dateOfLoss = result.order.damage.dateOfLoss; + this.order.policy.damageCause = result.order.damage.damageCause; + this.order.policy.damageState = result.order.damage.damageState; + this.order.policy.damageCity = result.order.damage.damageCity; + this.order.policy.isDamageGlassOnly = result.order.damage.isDamageGlassOnly; + + + this.order.originalDeductible = result.order.policy.originalDeductible; + this.order.currentDeductible = result.order.policies.currentDeductible; + + + // customer: { + // address: { + // streetAddress: null, + // streetAddress2: null, + // city: null, + // state: null, + // zipCode: null + // }, + // firstName: null, + // lastName: null, + // emailAddress: null, + // phoneNumber: null + // }, + + }, + setSaveSessionPromise(promise) { this.applicationUser.saveSessionPromise = promise; }, From 2594595f2d4f921749f016561f13aed20677f208 Mon Sep 17 00:00:00 2001 From: Michaela Brydon Date: Wed, 11 Oct 2023 13:35:21 -0400 Subject: [PATCH 02/28] Refactoring welcome page to extract policy lookup and incorporate dupe check navigation --- src/layouts/welcome-page/welcome-page.spec.js | 100 +- src/layouts/welcome-page/welcome-page.vue | 75 +- src/store/index.js | 236 +++-- src/store/store.spec.js | 951 ++++++++++++------ 4 files changed, 867 insertions(+), 495 deletions(-) diff --git a/src/layouts/welcome-page/welcome-page.spec.js b/src/layouts/welcome-page/welcome-page.spec.js index 573b8fce..29520d8c 100644 --- a/src/layouts/welcome-page/welcome-page.spec.js +++ b/src/layouts/welcome-page/welcome-page.spec.js @@ -179,13 +179,8 @@ describe('navigation', () => { test('if duplicates found, navigate to duplicate check page', async () => { // Arrange const { wrapper } = getMountedComponent({}); - - const duplicatesExist = { - policyLookupResponse: {}, - duplicateCheckResponse: [{ test: 'a'}] - }; - - settleAllPromises.mockImplementation(() => Promise.resolve(duplicatesExist)); + useMainStore().getDuplicateReferrals = jest.fn().mockImplementation(() => Promise.resolve({})); + useMainStore().applicationUser.duplicateOrders = [{ test: 'a' }]; // Act await wrapper.vm.forwardButtonAction(); @@ -199,39 +194,18 @@ describe('navigation', () => { { [routerParams.SAVE_SESSION_SYNCHRONOUS]: true } ); }); - test('if policy and vehicles are found, navigate to policy-vehicle page', async () => { + test('if policy and vehicles are found but no duplicates, navigate to policy-vehicle page', async () => { // Arrange - const mockvehicles = [ - { - vin: 'TEST_VIN' - }, - { - vin: 'TEST_VIN2' - } + const { wrapper } = setupMocks({}); + useMainStore().getDuplicateReferrals = jest.fn().mockImplementation(() => Promise.resolve({})); + + useMainStore().applicationUser.duplicateOrders = []; + useMainStore().order.policy.policyLookupSuccessful = true; + useMainStore().order.policy.vehicles = [ + { vin: 'TEST_VIN' }, + { vin: 'TEST_VIN2' } ]; - const { wrapper } = setupMocks({ - policies: [{ - vehicles: [ - { - vin: 'TEST_VIN' - }, - { - vin: 'TEST_VIN2' - } - ] - }] - }); - - await wrapper.setData({ - vehiclesFound: mockvehicles - }); - - useMainStore().issConfig.isCoverageEnabled = true; - useMainStore().order.policy.policyNumber = 'p_0001'; - useMainStore().order.policy.dateOfLoss = '2022-01-28'; - useMainStore().order.accountNumber = '00000'; - // Act await wrapper.vm.forwardButtonAction(); @@ -243,20 +217,14 @@ describe('navigation', () => { { [routerParams.SAVE_SESSION_SYNCHRONOUS]: true } ); }); - test('if policy is found, but no vehicles, navigate to vehicle-selection page', async () => { + test('if policy is found, but no vehicles and no duplicates, navigate to vehicle-selection page', async () => { // Arrange - const { wrapper } = setupMocks({ - policies: [{}] - }); + const { wrapper } = setupMocks({}); + useMainStore().getDuplicateReferrals = jest.fn().mockImplementation(() => Promise.resolve({})); - await wrapper.setData({ - vehiclesFound: null - }); - - useMainStore().issConfig.isCoverageEnabled = true; - useMainStore().order.policy.policyNumber = 'p_0001'; - useMainStore().order.policy.dateOfLoss = '2022-01-28'; - useMainStore().order.accountNumber = '00000'; + useMainStore().applicationUser.duplicateOrders = []; + useMainStore().order.policy.policyLookupSuccessful = true; + useMainStore().order.policy.vehicles = []; // Act @@ -270,16 +238,34 @@ describe('navigation', () => { { [routerParams.SAVE_SESSION_SYNCHRONOUS]: true } ); }); - test('if policy is not found, navigate to policy-holder-details page', async () => { + test('if policy is found, but null vehicles and no duplicates, navigate to vehicle-selection page', async () => { // Arrange - const { wrapper } = setupMocks({ - policies: null - }); + const { wrapper } = setupMocks({}); + useMainStore().getDuplicateReferrals = jest.fn().mockImplementation(() => Promise.resolve({})); - useMainStore().issConfig.isCoverageEnabled = true; - useMainStore().order.policy.policyNumber = 'p_0001'; - useMainStore().order.policy.dateOfLoss = '2022-01-28'; - useMainStore().order.accountNumber = '00000'; + useMainStore().applicationUser.duplicateOrders = []; + useMainStore().order.policy.policyLookupSuccessful = true; + useMainStore().order.policy.vehicles = null; + + // Act + + await wrapper.vm.forwardButtonAction(); + + // Assert + expect(wrapper.vm.$router.navigate).toHaveBeenCalledWith( + navigationScenarios.CLICKED_FORWARD_POLICY_VERIFIED_NO_VEHICLES, + undefined, + {}, + { [routerParams.SAVE_SESSION_SYNCHRONOUS]: true } + ); + }); + test('if policy is not found and no duplicates, navigate to policy-holder-details page', async () => { + // Arrange + const { wrapper } = setupMocks({}); + useMainStore().getDuplicateReferrals = jest.fn().mockImplementation(() => Promise.resolve({})); + + useMainStore().order.policy.policyLookupSuccessful = false; + useMainStore().applicationUser.duplicateOrders = []; // Act await wrapper.vm.navigateForward(); diff --git a/src/layouts/welcome-page/welcome-page.vue b/src/layouts/welcome-page/welcome-page.vue index d2ad05b0..c4d49845 100644 --- a/src/layouts/welcome-page/welcome-page.vue +++ b/src/layouts/welcome-page/welcome-page.vue @@ -167,6 +167,7 @@