From d2887fc1ef1a9880dfb014e393deea7d2bc1639f Mon Sep 17 00:00:00 2001 From: Katie Kroell Date: Mon, 9 Oct 2023 14:54:49 -0400 Subject: [PATCH 01/36] setup method to call endpoint --- src/constants/endpoints.js | 4 ++ src/store/index.js | 91 ++++++++++++++++++++++++++++++++++++++ 2 files changed, 95 insertions(+) diff --git a/src/constants/endpoints.js b/src/constants/endpoints.js index 8429f3ad..e7ad1527 100644 --- a/src/constants/endpoints.js +++ b/src/constants/endpoints.js @@ -166,6 +166,10 @@ const endpoints = Object.freeze({ // eslint-disable-next-line max-len url: (accountNumber, policyNumber, phoneNumber) => `/order/api/v1/order/duplicate-check/${accountNumber}/${policyNumber}/${phoneNumber}`, method: 'GET' + }, + FinalDeductible: { + url: 'coverage/api/v1/coverage/get-final-deductible', + method: 'POST' } }); diff --git a/src/store/index.js b/src/store/index.js index 77af754d..9de13a72 100644 --- a/src/store/index.js +++ b/src/store/index.js @@ -385,6 +385,8 @@ export const useMainStore = defineStore({ }; } }, + + // Coverage API Actions getCoveragePolicyInfo({ accountNumber, policyNumber, dateOfLoss, zipCode }) { const { policy } = this.order; try { @@ -492,6 +494,95 @@ export const useMainStore = defineStore({ }); }); }, + getFinalDeductible() { + return global.callHttpClient({ + method: endpoints.FinalDeductible.method, + endpoint: endpoints.FinalDeductible.url, + payload: + { + correlationId: this.order.referralCorrelationId, + referralNumber: this.order.referralNumber, + accountNumber: this.issConfig.parentAccountNumber?.toString() ?? '', + sourceSystem: null, + additionalInfo: {}, + fakeType: null, + responseType: null, + vin: this.order.vehicle.vin, + fleetNumber: null, + lossLocation: null, + vehicleNotFound: null, + driverNotFound: null, + isRepair: this.order.damage.isRepair, + isOEMRequested: null, + currentDeductible: this.order.currentDeductible, + noCoverage: this.order.policy.noCoverage, + endorsements: this.order.policy.endorsementQuestionAnswers, // FIX + policy: { + policyEffectiveDate: null, + expirationDate: null, + type: null, + lineOfBusiness: null, + policyNumber: this.order.policy.policyNumber, + status: this.order.policy.status, + source: null, + policyState: this.order.vehicle.registration.state, // check on this + insureds: [{ + firstName: this.order.customer.firstName, + middleName: null, + lastName: this.order.customer.lastName, + businessName: null, + address: this.order.customer.address.streetAddress, + state: this.order.customer.address.state, + zipCode: this.order.customer.address.zipCode, + zipCodePlus4: null, + phones: [{ + phoneNumber: this.order.customer.phoneNumber?.replaceAll(nonNumberCharRegex, ''), + type: null + }], + email: this.order.customer.emailAddress, + driverLicenseState: this.order.vehicle.registration.state, // check on this + relationToInsured: null, + roles: [{ + role: null + }], + companyCode: null, + customerId: null, + isExcluded: null, + notes: [] + }], + vehicles: [{ + id: null, + vehicleYear: this.order.vehicle.year?.toString() ?? '', + vehicleMake: this.order.vehicle.make, + vehicleModel: this.order.vehicle.model, + vehicleStyle: this.order.vehicle.style, + licensePlate: this.order.vehicle.registration.licensePlate, + vin: this.order.vehicle.vin, + driver: null, + owner: null, + noCoverage: this.order.policy.noCoverage, + coverages: [{ + code: null, + deductible: this.order.currentDeductible, + individualLimit: null, + occurrenceLimit: null, + dayLimit: null + }], + fleetNumber: null, + fleetUnitNumber: null, + endorsements: this.order.policy.endorsementQuestionAnswers, // FIX + oemRequired: null, + additionalFields: {}, + notes: [] + }], + agent: {}, + taxExempt: null, + additionalFields: {}, + notes: [] + } + } + }); + }, getDuplicateReferrals() { return new Promise((resolve, reject) => { globalMethods.callHttpClient({ From a797c6db9854eebf4b4e76c503213cc68631c0a2 Mon Sep 17 00:00:00 2001 From: Katie Kroell Date: Wed, 11 Oct 2023 15:53:47 -0400 Subject: [PATCH 02/36] fix endpoint --- src/constants/endpoints.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/constants/endpoints.js b/src/constants/endpoints.js index e7ad1527..1c8f51b7 100644 --- a/src/constants/endpoints.js +++ b/src/constants/endpoints.js @@ -168,7 +168,7 @@ const endpoints = Object.freeze({ method: 'GET' }, FinalDeductible: { - url: 'coverage/api/v1/coverage/get-final-deductible', + url: '/coverage/api/v1/coverage/get-final-deductible', method: 'POST' } }); From f78e32a94e7e0a034032c1420b64e7ee878540a9 Mon Sep 17 00:00:00 2001 From: Katie Kroell Date: Wed, 11 Oct 2023 15:55:46 -0400 Subject: [PATCH 03/36] save endorsement questions, update navigation --- src/layouts/policy-vehicles/policy-vehicles.vue | 14 ++++++++------ 1 file changed, 8 insertions(+), 6 deletions(-) diff --git a/src/layouts/policy-vehicles/policy-vehicles.vue b/src/layouts/policy-vehicles/policy-vehicles.vue index 8e08bd97..021772c6 100644 --- a/src/layouts/policy-vehicles/policy-vehicles.vue +++ b/src/layouts/policy-vehicles/policy-vehicles.vue @@ -117,13 +117,14 @@ export default { ? vehicle?.coverages[0].deductible : 0; }, - selectedVehicleHasEndorsements() { + endorsementsForSelectedVehicle() { const vehicle = this.policyVehicles.find((policyVehicle) => policyVehicle?.vin === this.selectedVehicleVin); - if (!vehicle) { - return false; + if (vehicle?.endorsements?.length > 0) { + + return vehicle.endorsements; } - return vehicle.endorsements?.length > 0; + return []; }, repairWaivedForSelectedVehicle() { const vehicle = this.policyVehicles.find((policyVehicle) => @@ -182,7 +183,8 @@ export default { vin: this.selectedVehicleVin, noCoverage: this.noCoverageForSelectedVehicle, deductible: this.deductibleForSelectedVehicle, - repairWaived: this.repairWaivedForSelectedVehicle + repairWaived: this.repairWaivedForSelectedVehicle, + endorsements: this.endorsementsForSelectedVehicle }); useMainStore().updateVehicle(this.vehicleFromLookup); @@ -205,7 +207,7 @@ export default { {}, {} ); - } else if (this.selectedVehicleHasEndorsements) { + } else if (this.endorsementsForSelectedVehicle?.length > 0) { this.$router.navigate( this.navigationScenarios.CLICKED_FORWARD_WITH_ENDORSEMENTS, this.$route From b322eb23b43321ee02c98791f9680bffe8f53b17 Mon Sep 17 00:00:00 2001 From: Katie Kroell Date: Wed, 11 Oct 2023 15:56:12 -0400 Subject: [PATCH 04/36] get final deductible --- .../coverage-statement/coverage-statement.vue | 13 ++++++------- 1 file changed, 6 insertions(+), 7 deletions(-) diff --git a/src/layouts/coverage-statement/coverage-statement.vue b/src/layouts/coverage-statement/coverage-statement.vue index 2c3166d0..43646722 100644 --- a/src/layouts/coverage-statement/coverage-statement.vue +++ b/src/layouts/coverage-statement/coverage-statement.vue @@ -247,13 +247,8 @@ export default { return damageString === 'match' ? '' : damageString; }, vehicleDeductible() { - if (useMainStore().order.damage.isRepair) { - const repairDeductible = useMainStore().order.policy.deductible.repair; - return repairDeductible; - } - - const replaceDeductible = useMainStore().order.policy.deductible.replace; - return replaceDeductible; + const deductible = this.mainStore.order.currentDeductible; + return deductible; }, formattedDeductible() { return this.getDeductibleString(this.vehicleDeductible); @@ -335,6 +330,7 @@ export default { }, mounted() { setupModalLinks(this); + this.getVehicleDeductible(); }, methods: { arePagePrerequisitesValid() { @@ -455,6 +451,9 @@ export default { }, setSupportingItems(newSupportingItems) { this.supportingItems = newSupportingItems; + }, + async getVehicleDeductible() { + await this.mainStore.getFinalDeductible(); } } }; From 12b2ebd88a1f48aad3b022e32bdea55e8d0bd161 Mon Sep 17 00:00:00 2001 From: Katie Kroell Date: Wed, 11 Oct 2023 15:56:39 -0400 Subject: [PATCH 05/36] updates to store methods, API calls --- src/store/index.js | 112 ++++++++++++--------------------------------- 1 file changed, 30 insertions(+), 82 deletions(-) diff --git a/src/store/index.js b/src/store/index.js index 9de13a72..e7955302 100644 --- a/src/store/index.js +++ b/src/store/index.js @@ -76,6 +76,7 @@ const getDefaultState = () => ({ }, isITAC: null, vehicles: [], + endorsements: [], endorsementQuestionAnswers: null }, customer: { @@ -494,94 +495,35 @@ export const useMainStore = defineStore({ }); }); }, - getFinalDeductible() { - return global.callHttpClient({ - method: endpoints.FinalDeductible.method, - endpoint: endpoints.FinalDeductible.url, - payload: - { - correlationId: this.order.referralCorrelationId, - referralNumber: this.order.referralNumber, + async getFinalDeductible() { + try { + const endorsementAnswersToSend = []; + if (this.order.policy.endorsementQuestionAnswers[0].selectedAnswer.includes('Yes')) { + endorsementAnswersToSend.push(this.order.policy.endorsementQuestionAnswers[0].endorsement); + } + const response = await globalMethods.callHttpClient({ + method: endpoints.FinalDeductible.method, + endpoint: endpoints.FinalDeductible.url, + payload: { accountNumber: this.issConfig.parentAccountNumber?.toString() ?? '', - sourceSystem: null, - additionalInfo: {}, - fakeType: null, - responseType: null, - vin: this.order.vehicle.vin, - fleetNumber: null, - lossLocation: null, - vehicleNotFound: null, - driverNotFound: null, - isRepair: this.order.damage.isRepair, - isOEMRequested: null, currentDeductible: this.order.currentDeductible, noCoverage: this.order.policy.noCoverage, - endorsements: this.order.policy.endorsementQuestionAnswers, // FIX + endorsements: endorsementAnswersToSend, // FIX policy: { - policyEffectiveDate: null, - expirationDate: null, - type: null, - lineOfBusiness: null, - policyNumber: this.order.policy.policyNumber, - status: this.order.policy.status, - source: null, - policyState: this.order.vehicle.registration.state, // check on this - insureds: [{ - firstName: this.order.customer.firstName, - middleName: null, - lastName: this.order.customer.lastName, - businessName: null, - address: this.order.customer.address.streetAddress, - state: this.order.customer.address.state, - zipCode: this.order.customer.address.zipCode, - zipCodePlus4: null, - phones: [{ - phoneNumber: this.order.customer.phoneNumber?.replaceAll(nonNumberCharRegex, ''), - type: null - }], - email: this.order.customer.emailAddress, - driverLicenseState: this.order.vehicle.registration.state, // check on this - relationToInsured: null, - roles: [{ - role: null - }], - companyCode: null, - customerId: null, - isExcluded: null, - notes: [] - }], - vehicles: [{ - id: null, - vehicleYear: this.order.vehicle.year?.toString() ?? '', - vehicleMake: this.order.vehicle.make, - vehicleModel: this.order.vehicle.model, - vehicleStyle: this.order.vehicle.style, - licensePlate: this.order.vehicle.registration.licensePlate, - vin: this.order.vehicle.vin, - driver: null, - owner: null, - noCoverage: this.order.policy.noCoverage, - coverages: [{ - code: null, - deductible: this.order.currentDeductible, - individualLimit: null, - occurrenceLimit: null, - dayLimit: null - }], - fleetNumber: null, - fleetUnitNumber: null, - endorsements: this.order.policy.endorsementQuestionAnswers, // FIX - oemRequired: null, - additionalFields: {}, - notes: [] - }], - agent: {}, - taxExempt: null, - additionalFields: {}, - notes: [] + status: 'Active', + policyState: this.order.vehicle.registration.state // check on this } } - }); + }); + this.updateDeductible(response.data); + return response; + } catch (responseError) { + return { + error: { + status: responseError.status + } + }; + } }, getDuplicateReferrals() { return new Promise((resolve, reject) => { @@ -1259,6 +1201,7 @@ export const useMainStore = defineStore({ : coverageStatuses.PENDING; this.order.policy.deductible.replace = vehicle.deductible; this.order.policy.deductible.repair = vehicle?.repairWaived ?? false ? 0 : vehicle.deductible; + this.order.policy.endorsements = vehicle?.endorsements; // TODO logic should be more complicated later on this.order.originalDeductible = parseFloat(vehicle.deductible); @@ -1449,6 +1392,11 @@ export const useMainStore = defineStore({ updatePolicyITACFlag(isITAC) { this.order.policy.isITAC = isITAC; }, + + updateDeductible(finalDeductible) { + this.order.currentDeductible = finalDeductible; + }, + savePartQuestionAnswers(partQuestionAnswersArray) { // if part question answers have changed, reset subsequent question answers const sortedPreviousResultsArray = sortArrayOfObjectsByPropertyValue(this.order.damage.partQuestionAnswers, 'result'); From dac7637bdf1ec94a51f61457e34b1ef336e540a7 Mon Sep 17 00:00:00 2001 From: Katie Kroell Date: Tue, 17 Oct 2023 12:46:52 -0400 Subject: [PATCH 06/36] refactor store method --- src/store/index.js | 72 +++++++++++++++++++++++++++++++++------------- 1 file changed, 52 insertions(+), 20 deletions(-) diff --git a/src/store/index.js b/src/store/index.js index b8d29dfc..197875ca 100644 --- a/src/store/index.js +++ b/src/store/index.js @@ -77,7 +77,8 @@ const getDefaultState = () => ({ isITAC: null, vehicles: [], endorsements: [], - endorsementQuestionAnswers: null + endorsementQuestionAnswers: null, + status: null }, customer: { address: { @@ -495,36 +496,66 @@ export const useMainStore = defineStore({ }); }); }, - async getFinalDeductible() { - try { - const endorsementAnswersToSend = []; - if (this.order.policy.endorsementQuestionAnswers[0].selectedAnswer.includes('Yes')) { - endorsementAnswersToSend.push(this.order.policy.endorsementQuestionAnswers[0].endorsement); - } - const response = await globalMethods.callHttpClient({ + getFinalDeductible() { + const endorsementAnswersToSend = []; + const endorsementAnswers = this.order.policy.endorsementQuestionAnswers; + if (endorsementAnswers && endorsementAnswers[0].selectedAnswer?.includes('Yes')) { + endorsementAnswersToSend.push(this.order.policy.endorsementQuestionAnswers[0].endorsement); + } + return new Promise((resolve, reject) => { + globalMethods.callHttpClient({ method: endpoints.FinalDeductible.method, endpoint: endpoints.FinalDeductible.url, payload: { accountNumber: this.issConfig.parentAccountNumber?.toString() ?? '', currentDeductible: this.order.currentDeductible, noCoverage: this.order.policy.noCoverage, - endorsements: endorsementAnswersToSend, // FIX + endorsements: endorsementAnswersToSend, policy: { status: 'Active', - policyState: this.order.vehicle.registration.state // check on this + // status: this.order.policy.status, + policyState: this.order.vehicle.registration.state } } + }).then((r) => { + this.updateDeductible(r.data); + return resolve(r); + }).catch((error) => { + this.updateDeductible(this.order.originalDeductible); + return reject(error); }); - this.updateDeductible(response.data); - return response; - } catch (responseError) { - return { - error: { - status: responseError.status - } - }; - } + }); }, + // getFinalDeductible() { + // try { + // const endorsementAnswersToSend = []; + // if (this.order.policy.endorsementQuestionAnswers[0].selectedAnswer.includes('Yes')) { + // endorsementAnswersToSend.push(this.order.policy.endorsementQuestionAnswers[0].endorsement); + // } + // const response = globalMethods.callHttpClient({ + // method: endpoints.FinalDeductible.method, + // endpoint: endpoints.FinalDeductible.url, + // payload: { + // accountNumber: this.issConfig.parentAccountNumber?.toString() ?? '', + // currentDeductible: this.order.currentDeductible, + // noCoverage: this.order.policy.noCoverage, + // endorsements: endorsementAnswersToSend, + // policy: { + // status: this.order.policy.status, + // policyState: this.order.vehicle.registration.state + // } + // } + // }); + // this.updateDeductible(response.data); + // return response; + // } catch (responseError) { + // return { + // error: { + // status: responseError.status + // } + // }; + // } + // }, getDuplicateReferrals() { return new Promise((resolve, reject) => { globalMethods.callHttpClient({ @@ -991,7 +1022,8 @@ export const useMainStore = defineStore({ noCoverage: policy.noCoverage, policyLookupSuccessful: policy.policyLookupSuccessful, originalDeductible: this.order.originalDeductible, - currentDeductible: this.order.currentDeductible + currentDeductible: this.order.currentDeductible, + status: policy.status }, customer: { address: { From e23645eb02df6aa249561d4d7f68d96a823eb758 Mon Sep 17 00:00:00 2001 From: Katie Kroell Date: Tue, 17 Oct 2023 12:47:09 -0400 Subject: [PATCH 07/36] start of store unit tests --- src/store/store.spec.js | 18 ++++++++++++++++++ 1 file changed, 18 insertions(+) diff --git a/src/store/store.spec.js b/src/store/store.spec.js index 9fc8f865..ce0fc9fd 100644 --- a/src/store/store.spec.js +++ b/src/store/store.spec.js @@ -1104,4 +1104,22 @@ describe('Store', () => { expect(store.isDropOffAppointment).toBe(false); }); }); + + describe('getFinalDeductible method', () => { + describe('successful method call', () => { + it.only('calls get final deductible api endpoint', () => { + // Arrange + globalMethods.callHttpClient = jest.fn().mockReturnValue(Promise.resolve({})); + + // Act + store.getFinalDeductible(); + + // Assert + expect(globalMethods.callHttpClient).toHaveBeenCalledWith(expect.objectContaining({ + method: endpoints.FinalDeductible.method, + endpoint: endpoints.FinalDeductible.url, + })); + }); + }); + }); }); From 5c86c0546ccc24b8f30597b6affa035271576103 Mon Sep 17 00:00:00 2001 From: Katie Kroell Date: Tue, 17 Oct 2023 15:56:56 -0400 Subject: [PATCH 08/36] refactoring --- src/store/index.js | 51 +++++++++------------------------------------- 1 file changed, 10 insertions(+), 41 deletions(-) diff --git a/src/store/index.js b/src/store/index.js index 197875ca..66215e5f 100644 --- a/src/store/index.js +++ b/src/store/index.js @@ -77,7 +77,7 @@ const getDefaultState = () => ({ isITAC: null, vehicles: [], endorsements: [], - endorsementQuestionAnswers: null, + endorsementQuestionAnswers: [], status: null }, customer: { @@ -497,11 +497,13 @@ export const useMainStore = defineStore({ }); }, getFinalDeductible() { - const endorsementAnswersToSend = []; + const endorsementAnswersForPayload = []; const endorsementAnswers = this.order.policy.endorsementQuestionAnswers; - if (endorsementAnswers && endorsementAnswers[0].selectedAnswer?.includes('Yes')) { - endorsementAnswersToSend.push(this.order.policy.endorsementQuestionAnswers[0].endorsement); + if (endorsementAnswers && endorsementAnswers[0]?.selectedAnswer?.includes('Yes')) { + endorsementAnswersForPayload.push(this.order.policy.endorsementQuestionAnswers[0].endorsement); + return endorsementAnswersForPayload; } + return new Promise((resolve, reject) => { globalMethods.callHttpClient({ method: endpoints.FinalDeductible.method, @@ -510,52 +512,19 @@ export const useMainStore = defineStore({ accountNumber: this.issConfig.parentAccountNumber?.toString() ?? '', currentDeductible: this.order.currentDeductible, noCoverage: this.order.policy.noCoverage, - endorsements: endorsementAnswersToSend, + endorsements: endorsementAnswersForPayload, policy: { - status: 'Active', - // status: this.order.policy.status, + status: 'Active', // change to this.order.policy.status after changing back end request policyState: this.order.vehicle.registration.state } } }).then((r) => { this.updateDeductible(r.data); return resolve(r); - }).catch((error) => { - this.updateDeductible(this.order.originalDeductible); - return reject(error); - }); + }).catch((error) => reject(error)); }); }, - // getFinalDeductible() { - // try { - // const endorsementAnswersToSend = []; - // if (this.order.policy.endorsementQuestionAnswers[0].selectedAnswer.includes('Yes')) { - // endorsementAnswersToSend.push(this.order.policy.endorsementQuestionAnswers[0].endorsement); - // } - // const response = globalMethods.callHttpClient({ - // method: endpoints.FinalDeductible.method, - // endpoint: endpoints.FinalDeductible.url, - // payload: { - // accountNumber: this.issConfig.parentAccountNumber?.toString() ?? '', - // currentDeductible: this.order.currentDeductible, - // noCoverage: this.order.policy.noCoverage, - // endorsements: endorsementAnswersToSend, - // policy: { - // status: this.order.policy.status, - // policyState: this.order.vehicle.registration.state - // } - // } - // }); - // this.updateDeductible(response.data); - // return response; - // } catch (responseError) { - // return { - // error: { - // status: responseError.status - // } - // }; - // } - // }, + getDuplicateReferrals() { return new Promise((resolve, reject) => { globalMethods.callHttpClient({ From 2f42dc1e78275250d43323a9ec1571e98ac7db32 Mon Sep 17 00:00:00 2001 From: Katie Kroell Date: Tue, 17 Oct 2023 15:57:24 -0400 Subject: [PATCH 09/36] unit tests - getFinalDeductible and updateDeductible --- src/store/store.spec.js | 90 ++++++++++++++++++++++++++++++++++++++++- 1 file changed, 89 insertions(+), 1 deletion(-) diff --git a/src/store/store.spec.js b/src/store/store.spec.js index ce0fc9fd..22455c67 100644 --- a/src/store/store.spec.js +++ b/src/store/store.spec.js @@ -1107,7 +1107,7 @@ describe('Store', () => { describe('getFinalDeductible method', () => { describe('successful method call', () => { - it.only('calls get final deductible api endpoint', () => { + it('calls get final deductible api endpoint', () => { // Arrange globalMethods.callHttpClient = jest.fn().mockReturnValue(Promise.resolve({})); @@ -1116,10 +1116,98 @@ describe('Store', () => { // Assert expect(globalMethods.callHttpClient).toHaveBeenCalledWith(expect.objectContaining({ + method: endpoints.FinalDeductible.method, + endpoint: endpoints.FinalDeductible.url + })); + }); + it('returns expected response object', async () => { + // Arrange + const response = { deductible: getRandomInt(0, 5000) }; + globalMethods.callHttpClient = jest.fn().mockReturnValue(Promise.resolve(response)); + + // Act + const result = store.getFinalDeductible(); + + // Assert + await expect(result).resolves.toBe(response); + }); + it('calls api with expected payload', () => { + // Arrange + const accountNumber = getRandomString(6, 6); + const currentDeductible = getRandomInt(0, 5000); + const noCoverage = getRandomBoolean(); + const endorsements = []; + const policy = { + status: 'Active', // need to change this + policyState: getRandomString(2, 2) + }; + store.issConfig.parentAccountNumber = accountNumber; + store.order.currentDeductible = currentDeductible; + store.order.policy.noCoverage = noCoverage; + store.order.policy.status = policy.status; + store.order.vehicle.registration.state = policy.policyState; + globalMethods.callHttpClient = jest.fn().mockReturnValue(Promise.resolve({})); + + // Act + store.getFinalDeductible(); + + // Assert + expect(globalMethods.callHttpClient).toHaveBeenCalledWith(({ method: endpoints.FinalDeductible.method, endpoint: endpoints.FinalDeductible.url, + payload: ({ + accountNumber, + currentDeductible, + noCoverage, + endorsements, + policy: { + status: policy.status, + policyState: policy.policyState + } + }) + })); + }); + }); + describe('unsuccessful api call', () => { + it('api call throws exception', async () => { + // Arrange + const error = 'final deductible error'; + globalMethods.callHttpClient = jest.fn().mockReturnValue(Promise.reject(error)); + + // Act + await store.getFinalDeductible().catch((e) => { + expect(e).toEqual(error); + }); + + // Assert + expect(globalMethods.callHttpClient).toHaveBeenCalledWith(expect.objectContaining({ + method: endpoints.FinalDeductible.method, + endpoint: endpoints.FinalDeductible.url })); }); }); }); + + describe('updateDeductible method', () => { + it('final deductible is saved as currentDeductible in store', () => { + // Arrange + const finalDeductible = getRandomInt(0, 5000); + + // Act + store.updateDeductible(finalDeductible); + + // Assert + expect(store.order.currentDeductible).toEqual(finalDeductible); + }); + it('null final deductible => currentDeductible in store set to null', () => { + // Arrange + const finalDeductible = null; + + // Act + store.updateDeductible(finalDeductible); + + // Assert + expect(store.order.currentDeductible).toEqual(finalDeductible); + }); + }); }); From 7331b4fd34ba0da6f51a84a0f091b5ef069f4351 Mon Sep 17 00:00:00 2001 From: Katie Kroell Date: Tue, 17 Oct 2023 16:01:02 -0400 Subject: [PATCH 10/36] linting fixes --- .../policy-endorsements/policy-endorsements.vue | 10 ++++------ 1 file changed, 4 insertions(+), 6 deletions(-) diff --git a/src/layouts/policy-endorsements/policy-endorsements.vue b/src/layouts/policy-endorsements/policy-endorsements.vue index 1d4e1972..b3f88ffa 100644 --- a/src/layouts/policy-endorsements/policy-endorsements.vue +++ b/src/layouts/policy-endorsements/policy-endorsements.vue @@ -134,23 +134,21 @@ export default { async forwardButtonAction() { // TO DO: remove hard coding and update data format once service returns endorsement questions if (this.educatorEndorsement) { - this.questionAnswersArray.push( - { + this.questionAnswersArray.push({ questionNum: 1, endorsement: 'Educator', questionText: this.schoolPropertyQuestionText, selectedAnswer: this.schoolPropertyAnswer }); - }; + } if (this.parkingGuardEndorsement) { - this.questionAnswersArray.push( - { + this.questionAnswersArray.push({ questionNum: 2, endorsement: 'Parking Guard', questionText: this.parkingLotQuestionText, selectedAnswer: this.parkingLotAnswer }); - }; + } // save answers to store as order.policy.endorsementQuestionAnswers useMainStore().saveEndorsementQuestionAnswers(this.questionAnswersArray); From 162a20a09513d03fd6a2300860479f3587651d62 Mon Sep 17 00:00:00 2001 From: Katie Kroell Date: Wed, 18 Oct 2023 15:46:07 -0400 Subject: [PATCH 11/36] remove unneeded return --- src/store/index.js | 1 - 1 file changed, 1 deletion(-) diff --git a/src/store/index.js b/src/store/index.js index 66215e5f..aeac459b 100644 --- a/src/store/index.js +++ b/src/store/index.js @@ -501,7 +501,6 @@ export const useMainStore = defineStore({ const endorsementAnswers = this.order.policy.endorsementQuestionAnswers; if (endorsementAnswers && endorsementAnswers[0]?.selectedAnswer?.includes('Yes')) { endorsementAnswersForPayload.push(this.order.policy.endorsementQuestionAnswers[0].endorsement); - return endorsementAnswersForPayload; } return new Promise((resolve, reject) => { From 3fb372c5fde23af549da10fdb8635095055d7023 Mon Sep 17 00:00:00 2001 From: Katie Kroell Date: Wed, 18 Oct 2023 15:46:33 -0400 Subject: [PATCH 12/36] move method call to beforeMount --- src/layouts/coverage-statement/coverage-statement.vue | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/src/layouts/coverage-statement/coverage-statement.vue b/src/layouts/coverage-statement/coverage-statement.vue index 43646722..e0fcd872 100644 --- a/src/layouts/coverage-statement/coverage-statement.vue +++ b/src/layouts/coverage-statement/coverage-statement.vue @@ -328,9 +328,11 @@ export default { } } }, + beforeMount() { + this.getVehicleDeductible(); + }, mounted() { setupModalLinks(this); - this.getVehicleDeductible(); }, methods: { arePagePrerequisitesValid() { @@ -453,7 +455,7 @@ export default { this.supportingItems = newSupportingItems; }, async getVehicleDeductible() { - await this.mainStore.getFinalDeductible(); + await useMainStore().getFinalDeductible(); } } }; From 790db50814c3c8bde83a0c13aef9ae386f5b0fd9 Mon Sep 17 00:00:00 2001 From: Katie Kroell Date: Thu, 19 Oct 2023 09:06:00 -0400 Subject: [PATCH 13/36] move method call to beforeRouteEnter --- src/layouts/coverage-statement/coverage-statement.vue | 11 +++++------ 1 file changed, 5 insertions(+), 6 deletions(-) diff --git a/src/layouts/coverage-statement/coverage-statement.vue b/src/layouts/coverage-statement/coverage-statement.vue index e0fcd872..477b13c3 100644 --- a/src/layouts/coverage-statement/coverage-statement.vue +++ b/src/layouts/coverage-statement/coverage-statement.vue @@ -147,6 +147,7 @@ export default { // Call APIs const cmsContentPromise = fetchCmsContentForPage(to?.query?.issPage); const supportingItemsPromise = await useMainStore().getSupportingItems(); + const finalDeductiblePromise = await useMainStore().getFinalDeductible(); // Settle promises and get results const promiseResultMap = [ @@ -157,6 +158,10 @@ export default { { resultKey: 'supportingItems', promise: supportingItemsPromise + }, + { + resultKey: 'finalDeductible', + promise: finalDeductiblePromise } ]; @@ -328,9 +333,6 @@ export default { } } }, - beforeMount() { - this.getVehicleDeductible(); - }, mounted() { setupModalLinks(this); }, @@ -453,9 +455,6 @@ export default { }, setSupportingItems(newSupportingItems) { this.supportingItems = newSupportingItems; - }, - async getVehicleDeductible() { - await useMainStore().getFinalDeductible(); } } }; From 7bbc20cd1432c284d35781f0798b69949893d924 Mon Sep 17 00:00:00 2001 From: Katie Kroell Date: Thu, 19 Oct 2023 14:02:29 -0400 Subject: [PATCH 14/36] reference endorsement constants --- .../policy-endorsements/policy-endorsements.vue | 10 ++++++---- 1 file changed, 6 insertions(+), 4 deletions(-) diff --git a/src/layouts/policy-endorsements/policy-endorsements.vue b/src/layouts/policy-endorsements/policy-endorsements.vue index f50b4c30..7c61ddd5 100644 --- a/src/layouts/policy-endorsements/policy-endorsements.vue +++ b/src/layouts/policy-endorsements/policy-endorsements.vue @@ -67,6 +67,8 @@ import settleAllPromises from '@/helpers/layout-helper'; import { Form } from 'vee-validate'; import BaseFormMixin from '@/mixins/base-form-mixin.js'; import globalRules from '@/constants/global-rules.js'; +import endorsementOptions from '@/constants/endorsement-options.js'; + import { useMainStore } from '@/store'; export default { @@ -126,10 +128,10 @@ export default { return this.getCmsContent('ParkingLotQuestion', 'Answers'); }, educatorEndorsement() { - return useMainStore().order.policy.endorsements?.includes('Educator') ?? false; + return useMainStore().order.policy.endorsements?.includes(endorsementOptions.EDUCATOR) ?? false; }, parkingGuardEndorsement() { - return useMainStore().order.policy.endorsements?.includes('Parking Guard') ?? false; + return useMainStore().order.policy.endorsements?.includes(endorsementOptions.PARKING_GUARD) ?? false; } }, methods: @@ -142,7 +144,7 @@ export default { if (this.educatorEndorsement) { this.questionAnswersArray.push({ questionNum: 1, - endorsement: 'Educator', + endorsement: endorsementOptions.EDUCATOR, questionText: this.schoolPropertyQuestionText, selectedAnswer: this.schoolPropertyAnswer }); @@ -150,7 +152,7 @@ export default { if (this.parkingGuardEndorsement) { this.questionAnswersArray.push({ questionNum: 2, - endorsement: 'Parking Guard', + endorsement: endorsementOptions.PARKING_GUARD, questionText: this.parkingLotQuestionText, selectedAnswer: this.parkingLotAnswer }); From 4d1d3844fd580432d10a15cba80a9e2374432ac4 Mon Sep 17 00:00:00 2001 From: Katie Kroell Date: Thu, 19 Oct 2023 14:02:46 -0400 Subject: [PATCH 15/36] change store reference --- src/layouts/coverage-statement/coverage-statement.vue | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/layouts/coverage-statement/coverage-statement.vue b/src/layouts/coverage-statement/coverage-statement.vue index 477b13c3..16377789 100644 --- a/src/layouts/coverage-statement/coverage-statement.vue +++ b/src/layouts/coverage-statement/coverage-statement.vue @@ -252,7 +252,7 @@ export default { return damageString === 'match' ? '' : damageString; }, vehicleDeductible() { - const deductible = this.mainStore.order.currentDeductible; + const deductible = useMainStore().order.currentDeductible; return deductible; }, formattedDeductible() { From e618b26624067217a0a9f2b0489d2eab9c726576 Mon Sep 17 00:00:00 2001 From: Katie Kroell Date: Thu, 19 Oct 2023 14:03:10 -0400 Subject: [PATCH 16/36] change includes to === --- src/store/index.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/store/index.js b/src/store/index.js index aeac459b..8384d306 100644 --- a/src/store/index.js +++ b/src/store/index.js @@ -499,7 +499,7 @@ export const useMainStore = defineStore({ getFinalDeductible() { const endorsementAnswersForPayload = []; const endorsementAnswers = this.order.policy.endorsementQuestionAnswers; - if (endorsementAnswers && endorsementAnswers[0]?.selectedAnswer?.includes('Yes')) { + if (endorsementAnswers && endorsementAnswers[0]?.selectedAnswer === 'Yes') { endorsementAnswersForPayload.push(this.order.policy.endorsementQuestionAnswers[0].endorsement); } From 97d93cf5949a8b858a0e079e0b94878d37af90e2 Mon Sep 17 00:00:00 2001 From: Katie Kroell Date: Fri, 20 Oct 2023 14:40:54 -0400 Subject: [PATCH 17/36] test update --- src/store/store.spec.js | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/src/store/store.spec.js b/src/store/store.spec.js index 22455c67..1fc3f4ed 100644 --- a/src/store/store.spec.js +++ b/src/store/store.spec.js @@ -1169,8 +1169,9 @@ describe('Store', () => { }); }); describe('unsuccessful api call', () => { - it('api call throws exception', async () => { + it.only('api call throws exception', async () => { // Arrange + expect.assertions(2); const error = 'final deductible error'; globalMethods.callHttpClient = jest.fn().mockReturnValue(Promise.reject(error)); From 63c5999261dadf8898698402475b4e08a6a9dc68 Mon Sep 17 00:00:00 2001 From: Katie Kroell Date: Fri, 20 Oct 2023 15:16:10 -0400 Subject: [PATCH 18/36] PR changes --- src/layouts/policy-endorsements/policy-endorsements.vue | 4 ++-- src/store/index.js | 8 ++++++-- src/store/store.spec.js | 2 +- 3 files changed, 9 insertions(+), 5 deletions(-) diff --git a/src/layouts/policy-endorsements/policy-endorsements.vue b/src/layouts/policy-endorsements/policy-endorsements.vue index 7c61ddd5..e5d637fb 100644 --- a/src/layouts/policy-endorsements/policy-endorsements.vue +++ b/src/layouts/policy-endorsements/policy-endorsements.vue @@ -144,7 +144,7 @@ export default { if (this.educatorEndorsement) { this.questionAnswersArray.push({ questionNum: 1, - endorsement: endorsementOptions.EDUCATOR, + endorsementName: endorsementOptions.EDUCATOR, questionText: this.schoolPropertyQuestionText, selectedAnswer: this.schoolPropertyAnswer }); @@ -152,7 +152,7 @@ export default { if (this.parkingGuardEndorsement) { this.questionAnswersArray.push({ questionNum: 2, - endorsement: endorsementOptions.PARKING_GUARD, + endorsementName: endorsementOptions.PARKING_GUARD, questionText: this.parkingLotQuestionText, selectedAnswer: this.parkingLotAnswer }); diff --git a/src/store/index.js b/src/store/index.js index c2639906..53293e96 100644 --- a/src/store/index.js +++ b/src/store/index.js @@ -510,8 +510,12 @@ export const useMainStore = defineStore({ getFinalDeductible() { const endorsementAnswersForPayload = []; const endorsementAnswers = this.order.policy.endorsementQuestionAnswers; - if (endorsementAnswers && endorsementAnswers[0]?.selectedAnswer === 'Yes') { - endorsementAnswersForPayload.push(this.order.policy.endorsementQuestionAnswers[0].endorsement); + if (endorsementAnswers) { + endorsementAnswers.forEach((endorsement) => { + if (endorsement.selectedAnswer === 'Yes') { + endorsementAnswersForPayload.push(endorsement.endorsementName); + } + }); } return new Promise((resolve, reject) => { diff --git a/src/store/store.spec.js b/src/store/store.spec.js index 07c4f13c..02cb319d 100644 --- a/src/store/store.spec.js +++ b/src/store/store.spec.js @@ -1759,7 +1759,7 @@ describe('Store', () => { }); }); describe('unsuccessful api call', () => { - it.only('api call throws exception', async () => { + it('api call throws exception', async () => { // Arrange expect.assertions(2); const error = 'final deductible error'; From 667c868864203f16f848a0f1f36551a0ed50e08e Mon Sep 17 00:00:00 2001 From: Katie Kroell Date: Fri, 20 Oct 2023 16:02:47 -0400 Subject: [PATCH 19/36] unit test for payload --- src/store/store.spec.js | 57 +++++++++++++++++++++++++++++++++++++++++ 1 file changed, 57 insertions(+) diff --git a/src/store/store.spec.js b/src/store/store.spec.js index 02cb319d..acbe9c3d 100644 --- a/src/store/store.spec.js +++ b/src/store/store.spec.js @@ -1757,6 +1757,63 @@ describe('Store', () => { }) })); }); + it('only "Yes" endorsement answers are added to payload', () => { + // Arrange + const accountNumber = getRandomString(6, 6); + const currentDeductible = getRandomInt(0, 5000); + const noCoverage = getRandomBoolean(); + const endorsementAnswers = [ + { + questionNum: getRandomInt(1, 10), + endorsementName: getRandomString(8, 20), + questionText: getRandomString(50, 100), + selectedAnswer: 'Yes' + }, + { + questionNum: getRandomInt(1, 10), + endorsementName: getRandomString(8, 20), + questionText: getRandomString(50, 100), + selectedAnswer: 'Yes' + }, + { + questionNum: getRandomInt(1, 10), + endorsementName: getRandomString(8, 20), + questionText: getRandomString(50, 100), + selectedAnswer: 'No' + } + ]; + const policy = { + status: 'Active', // need to change this + policyState: getRandomString(2, 2) + }; + store.issConfig.parentAccountNumber = accountNumber; + store.order.currentDeductible = currentDeductible; + store.order.policy.noCoverage = noCoverage; + store.order.policy.status = policy.status; + store.order.vehicle.registration.state = policy.policyState; + store.order.policy.endorsementQuestionAnswers = endorsementAnswers; + globalMethods.callHttpClient = jest.fn().mockReturnValue(Promise.resolve({})); + + // Act + store.getFinalDeductible(); + + // Assert + const expected = [endorsementAnswers[0].endorsementName, endorsementAnswers[1].endorsementName]; + expect(globalMethods.callHttpClient).toHaveBeenCalledWith(({ + method: endpoints.FinalDeductible.method, + endpoint: endpoints.FinalDeductible.url, + payload: ({ + accountNumber, + currentDeductible, + noCoverage, + endorsements: expected, + policy: { + status: policy.status, + policyState: policy.policyState + } + }) + })); + }); }); describe('unsuccessful api call', () => { it('api call throws exception', async () => { From 5f8737a4e062941ed643790ead0a01b889162950 Mon Sep 17 00:00:00 2001 From: Katie Kroell Date: Tue, 31 Oct 2023 14:15:09 -0400 Subject: [PATCH 20/36] change endpoint name --- src/constants/endpoints.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/constants/endpoints.js b/src/constants/endpoints.js index 7fa6a7c1..3ff2b7ef 100644 --- a/src/constants/endpoints.js +++ b/src/constants/endpoints.js @@ -172,7 +172,7 @@ const endpoints = Object.freeze({ method: 'GET' }, FinalDeductible: { - url: '/coverage/api/v1/coverage/get-final-deductible', + url: '/coverage/api/v1/coverage/final-deductible', method: 'POST' } }); From 985ba28f71fb529acb9ae3732bc2af112d41dabf Mon Sep 17 00:00:00 2001 From: Katie Kroell Date: Tue, 31 Oct 2023 14:15:45 -0400 Subject: [PATCH 21/36] update API request --- src/store/index.js | 35 +++++++++++++++++++++++++++++------ 1 file changed, 29 insertions(+), 6 deletions(-) diff --git a/src/store/index.js b/src/store/index.js index d326a0b8..03541083 100644 --- a/src/store/index.js +++ b/src/store/index.js @@ -517,20 +517,43 @@ export const useMainStore = defineStore({ } }); } + const orderItemsArray = []; + const manuaGlassNamesArray = []; + const glassInformation = this.order.damage.glassToReplace; + glassInformation.forEach((glassPiece) => { + const glassPieceObject = { + name: glassPiece.glassLocation + }; + orderItemsArray.push(glassPieceObject); + manuaGlassNamesArray.push(glassPiece.glassLocation); + }); return new Promise((resolve, reject) => { globalMethods.callHttpClient({ method: endpoints.FinalDeductible.method, endpoint: endpoints.FinalDeductible.url, payload: { + referralCorrelationId: this.order.referralCorrelationId, + referralNumber: this.order.referralNumber, accountNumber: this.issConfig.parentAccountNumber?.toString() ?? '', - currentDeductible: this.order.currentDeductible, - noCoverage: this.order.policy.noCoverage, - endorsements: endorsementAnswersForPayload, + insured: { + address: { + state: this.order.customer.address.state + } + }, + lossInfo: { + vehicle: { + endorsements: endorsementAnswersForPayload + }, + manualGlassNames: manuaGlassNamesArray + }, policy: { - status: 'Active', // change to this.order.policy.status after changing back end request - policyState: this.order.vehicle.registration.state - } + policyState: this.order.customer.address.state, + status: this.order.policy.status, + currentDeductible: this.order.currentDeductible, + noCoverage: this.order.policy.noCoverage + }, + orderItems: orderItemsArray } }).then((r) => { this.updateDeductible(r.data); From a3523fea26045043af36e35cd2be3bc5ed02951d Mon Sep 17 00:00:00 2001 From: Katie Kroell Date: Wed, 1 Nov 2023 09:36:04 -0400 Subject: [PATCH 22/36] change string to upper case --- src/store/index.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/store/index.js b/src/store/index.js index 03541083..db3c739e 100644 --- a/src/store/index.js +++ b/src/store/index.js @@ -522,7 +522,7 @@ export const useMainStore = defineStore({ const glassInformation = this.order.damage.glassToReplace; glassInformation.forEach((glassPiece) => { const glassPieceObject = { - name: glassPiece.glassLocation + name: glassPiece.glassLocation.toUpperCase() }; orderItemsArray.push(glassPieceObject); manuaGlassNamesArray.push(glassPiece.glassLocation); From 93ff9b718e6042359d11212f4d0f969e0c818ea1 Mon Sep 17 00:00:00 2001 From: Katie Kroell Date: Wed, 1 Nov 2023 15:22:18 -0400 Subject: [PATCH 23/36] add FL repair logic --- src/store/index.js | 7 +++++++ 1 file changed, 7 insertions(+) diff --git a/src/store/index.js b/src/store/index.js index db3c739e..1a9126b5 100644 --- a/src/store/index.js +++ b/src/store/index.js @@ -527,6 +527,13 @@ export const useMainStore = defineStore({ orderItemsArray.push(glassPieceObject); manuaGlassNamesArray.push(glassPiece.glassLocation); }); + if (this.order.customer.address.state === 'FL' && this.order.damage.isRepair) { + const damageLocationObject = { + name: damageLocationsSelected.WINDSHIELD.toUpperCase() + }; + orderItemsArray.push(damageLocationObject); + manuaGlassNamesArray.push(damageLocationsSelected.WINDSHIELD); + } return new Promise((resolve, reject) => { globalMethods.callHttpClient({ From 69a746d717317ffc8c6bc04dc424594395d1564b Mon Sep 17 00:00:00 2001 From: Katie Kroell Date: Wed, 1 Nov 2023 16:28:30 -0400 Subject: [PATCH 24/36] add additionalInfo to paylod when both endorsements are present --- src/store/index.js | 11 +++++++++++ 1 file changed, 11 insertions(+) diff --git a/src/store/index.js b/src/store/index.js index 1a9126b5..f0fba796 100644 --- a/src/store/index.js +++ b/src/store/index.js @@ -14,6 +14,7 @@ import coverageStatuses from '@/constants/coverage-statuses'; import { deepEqual } from '@/helpers/object-helper'; import { AppointmentTypeStrings, PREMIUM_FEE_PART_TYPE } from '@/constants/schedule-constants'; import getDateDifferenceInDays from '@/helpers/date-helper'; +import endorsementOptions from '@/constants/endorsement-options'; const storeId = 'main'; @@ -517,6 +518,15 @@ export const useMainStore = defineStore({ } }); } + const endorsementsAdditionalInfo = { + schoolProperty: '', + parkingLot: '' + }; + if (endorsementAnswersForPayload.includes(endorsementOptions.EDUCATOR && endorsementOptions.PARKING_GUARD)) { + endorsementsAdditionalInfo.schoolProperty = 'Yes'; + endorsementsAdditionalInfo.parkingLot = 'Yes'; + } + const orderItemsArray = []; const manuaGlassNamesArray = []; const glassInformation = this.order.damage.glassToReplace; @@ -543,6 +553,7 @@ export const useMainStore = defineStore({ referralCorrelationId: this.order.referralCorrelationId, referralNumber: this.order.referralNumber, accountNumber: this.issConfig.parentAccountNumber?.toString() ?? '', + additionalInfo: endorsementsAdditionalInfo, insured: { address: { state: this.order.customer.address.state From b7924b9ebc93fd3a291a9caf0e56e3c45175fef8 Mon Sep 17 00:00:00 2001 From: Katie Kroell Date: Thu, 2 Nov 2023 13:30:34 -0400 Subject: [PATCH 25/36] make nullable --- src/store/index.js | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/store/index.js b/src/store/index.js index f0fba796..069f8cc2 100644 --- a/src/store/index.js +++ b/src/store/index.js @@ -530,9 +530,9 @@ export const useMainStore = defineStore({ const orderItemsArray = []; const manuaGlassNamesArray = []; const glassInformation = this.order.damage.glassToReplace; - glassInformation.forEach((glassPiece) => { + glassInformation?.forEach((glassPiece) => { const glassPieceObject = { - name: glassPiece.glassLocation.toUpperCase() + name: glassPiece?.glassLocation?.toUpperCase() }; orderItemsArray.push(glassPieceObject); manuaGlassNamesArray.push(glassPiece.glassLocation); From 5489373e8c104b12c6c5591e2fa9055c9f39f3dd Mon Sep 17 00:00:00 2001 From: Katie Kroell Date: Thu, 2 Nov 2023 13:30:54 -0400 Subject: [PATCH 26/36] update unit tests for getFinalDeductible() --- src/store/store.spec.js | 339 +++++++++++++++++++++++++++++++++++----- 1 file changed, 296 insertions(+), 43 deletions(-) diff --git a/src/store/store.spec.js b/src/store/store.spec.js index bb23503a..66fbcbf6 100644 --- a/src/store/store.spec.js +++ b/src/store/store.spec.js @@ -1700,6 +1700,7 @@ describe('Store', () => { it('calls get final deductible api endpoint', () => { // Arrange globalMethods.callHttpClient = jest.fn().mockReturnValue(Promise.resolve({})); + store.order.damage.glassToReplace = [getRandomString(10, 15)]; // Act store.getFinalDeductible(); @@ -1714,6 +1715,7 @@ describe('Store', () => { // Arrange const response = { deductible: getRandomInt(0, 5000) }; globalMethods.callHttpClient = jest.fn().mockReturnValue(Promise.resolve(response)); + store.order.damage.glassToReplace = [getRandomString(10, 15)]; // Act const result = store.getFinalDeductible(); @@ -1723,19 +1725,48 @@ describe('Store', () => { }); it('calls api with expected payload', () => { // Arrange + const location = getRandomString(10, 15); + store.order.damage.glassToReplace = [ + { + glassLocation: location + } + ]; + const referralCorrelationId = getRandomGuid(); + const referralNumber = getRandomString(6, 6); const accountNumber = getRandomString(6, 6); - const currentDeductible = getRandomInt(0, 5000); - const noCoverage = getRandomBoolean(); - const endorsements = []; - const policy = { - status: 'Active', // need to change this - policyState: getRandomString(2, 2) + const additionalInfo = { + schoolProperty: '', + parkingLot: '' }; + const insured = { + address: { + state: getRandomString(2, 2) + } + }; + const lossInfo = { + vehicle: { + endorsements: [] + }, + manualGlassNames: [location] + }; + const policy = { + policyState: insured.address.state, + status: getRandomString(6, 8), + currentDeductible: getRandomInt(0, 5000), + noCoverage: getRandomBoolean() + }; + const orderItems = [ + { + name: location.toUpperCase() + } + ]; + store.order.referralCorrelationId = referralCorrelationId; + store.order.referralNumber = referralNumber; store.issConfig.parentAccountNumber = accountNumber; - store.order.currentDeductible = currentDeductible; - store.order.policy.noCoverage = noCoverage; + store.order.currentDeductible = policy.currentDeductible; + store.order.policy.noCoverage = policy.noCoverage; store.order.policy.status = policy.status; - store.order.vehicle.registration.state = policy.policyState; + store.order.customer.address.state = policy.policyState; globalMethods.callHttpClient = jest.fn().mockReturnValue(Promise.resolve({})); // Act @@ -1746,22 +1777,55 @@ describe('Store', () => { method: endpoints.FinalDeductible.method, endpoint: endpoints.FinalDeductible.url, payload: ({ + referralCorrelationId, + referralNumber, accountNumber, - currentDeductible, - noCoverage, - endorsements, + additionalInfo: { + schoolProperty: additionalInfo.schoolProperty, + parkingLot: additionalInfo.parkingLot + }, + insured: { + address: { + state: insured.address.state + } + }, + lossInfo: { + vehicle: { + endorsements: lossInfo.vehicle.endorsements + }, + manualGlassNames: lossInfo.manualGlassNames + }, policy: { + policyState: policy.policyState, status: policy.status, - policyState: policy.policyState - } + currentDeductible: policy.currentDeductible, + noCoverage: policy.noCoverage + }, + orderItems }) })); }); it('only "Yes" endorsement answers are added to payload', () => { // Arrange + store.order.damage.glassToReplace = []; + const referralCorrelationId = getRandomGuid(); + const referralNumber = getRandomString(6, 6); const accountNumber = getRandomString(6, 6); - const currentDeductible = getRandomInt(0, 5000); - const noCoverage = getRandomBoolean(); + const additionalInfo = { + schoolProperty: '', + parkingLot: '' + }; + const insured = { + address: { + state: getRandomString(2, 2) + } + }; + const lossInfo = { + vehicle: { + endorsements: [] + }, + manualGlassNames: [] + }; const endorsementAnswers = [ { questionNum: getRandomInt(1, 10), @@ -1783,14 +1847,19 @@ describe('Store', () => { } ]; const policy = { - status: 'Active', // need to change this - policyState: getRandomString(2, 2) + policyState: insured.address.state, + status: getRandomString(6, 8), + currentDeductible: getRandomInt(0, 5000), + noCoverage: getRandomBoolean() }; + const orderItems = []; + store.order.referralCorrelationId = referralCorrelationId; + store.order.referralNumber = referralNumber; store.issConfig.parentAccountNumber = accountNumber; - store.order.currentDeductible = currentDeductible; - store.order.policy.noCoverage = noCoverage; + store.order.currentDeductible = policy.currentDeductible; + store.order.policy.noCoverage = policy.noCoverage; store.order.policy.status = policy.status; - store.order.vehicle.registration.state = policy.policyState; + store.order.customer.address.state = policy.policyState; store.order.policy.endorsementQuestionAnswers = endorsementAnswers; globalMethods.callHttpClient = jest.fn().mockReturnValue(Promise.resolve({})); @@ -1803,37 +1872,221 @@ describe('Store', () => { method: endpoints.FinalDeductible.method, endpoint: endpoints.FinalDeductible.url, payload: ({ + referralCorrelationId, + referralNumber, accountNumber, - currentDeductible, - noCoverage, - endorsements: expected, + additionalInfo: { + schoolProperty: additionalInfo.schoolProperty, + parkingLot: additionalInfo.parkingLot + }, + insured: { + address: { + state: insured.address.state + } + }, + lossInfo: { + vehicle: { + endorsements: expected + }, + manualGlassNames: lossInfo.manualGlassNames + }, policy: { + policyState: policy.policyState, status: policy.status, - policyState: policy.policyState - } + currentDeductible: policy.currentDeductible, + noCoverage: policy.noCoverage + }, + orderItems + }) + })); + }); + it('additionalInfo is added to payload when both endorsements are present', () => { + // Arrange + store.order.damage.glassToReplace = []; + const referralCorrelationId = getRandomGuid(); + const referralNumber = getRandomString(6, 6); + const accountNumber = getRandomString(6, 6); + const additionalInfo = { + schoolProperty: 'Yes', + parkingLot: 'Yes' + }; + const insured = { + address: { + state: getRandomString(2, 2) + } + }; + const lossInfo = { + vehicle: { + endorsements: ['Parking Guard', 'Educator'] + }, + manualGlassNames: [] + }; + const endorsementAnswers = [ + { + questionNum: getRandomInt(1, 10), + endorsementName: 'Parking Guard', + questionText: getRandomString(50, 100), + selectedAnswer: 'Yes' + }, + { + questionNum: getRandomInt(1, 10), + endorsementName: 'Educator', + questionText: getRandomString(50, 100), + selectedAnswer: 'Yes' + } + ]; + const policy = { + policyState: insured.address.state, + status: getRandomString(6, 8), + currentDeductible: getRandomInt(0, 5000), + noCoverage: getRandomBoolean() + }; + const orderItems = []; + store.order.referralCorrelationId = referralCorrelationId; + store.order.referralNumber = referralNumber; + store.issConfig.parentAccountNumber = accountNumber; + store.order.currentDeductible = policy.currentDeductible; + store.order.policy.noCoverage = policy.noCoverage; + store.order.policy.status = policy.status; + store.order.customer.address.state = policy.policyState; + store.order.policy.endorsementQuestionAnswers = endorsementAnswers; + globalMethods.callHttpClient = jest.fn().mockReturnValue(Promise.resolve({})); + + // Act + store.getFinalDeductible(); + + // Assert + const expected = [endorsementAnswers[0].endorsementName, endorsementAnswers[1].endorsementName]; + expect(globalMethods.callHttpClient).toHaveBeenCalledWith(({ + method: endpoints.FinalDeductible.method, + endpoint: endpoints.FinalDeductible.url, + payload: ({ + referralCorrelationId, + referralNumber, + accountNumber, + additionalInfo: { + schoolProperty: additionalInfo.schoolProperty, + parkingLot: additionalInfo.parkingLot + }, + insured: { + address: { + state: insured.address.state + } + }, + lossInfo: { + vehicle: { + endorsements: expected + }, + manualGlassNames: lossInfo.manualGlassNames + }, + policy: { + policyState: policy.policyState, + status: policy.status, + currentDeductible: policy.currentDeductible, + noCoverage: policy.noCoverage + }, + orderItems + }) + })); + }); + it('manualGlassNames and orderItems updated if Florida windshield repair', () => { + // Arrange + store.order.policy.endorsementQuestionAnswers = []; + const referralCorrelationId = getRandomGuid(); + const referralNumber = getRandomString(6, 6); + const accountNumber = getRandomString(6, 6); + const additionalInfo = { + schoolProperty: '', + parkingLot: '' + }; + const insured = { + address: { + state: 'FL' + } + }; + const lossInfo = { + vehicle: { + endorsements: [] + }, + manualGlassNames: ['Windshield'] + }; + const policy = { + policyState: insured.address.state, + status: getRandomString(6, 8), + currentDeductible: getRandomInt(0, 5000), + noCoverage: getRandomBoolean() + }; + const orderItems = [ + { + name: 'WINDSHIELD' + } + ]; + store.order.referralCorrelationId = referralCorrelationId; + store.order.referralNumber = referralNumber; + store.issConfig.parentAccountNumber = accountNumber; + store.order.currentDeductible = policy.currentDeductible; + store.order.policy.noCoverage = policy.noCoverage; + store.order.policy.status = policy.status; + store.order.customer.address.state = policy.policyState; + store.order.damage.isRepair = true; + globalMethods.callHttpClient = jest.fn().mockReturnValue(Promise.resolve({})); + + // Act + store.getFinalDeductible(); + + // Assert + expect(globalMethods.callHttpClient).toHaveBeenCalledWith(({ + method: endpoints.FinalDeductible.method, + endpoint: endpoints.FinalDeductible.url, + payload: ({ + referralCorrelationId, + referralNumber, + accountNumber, + additionalInfo: { + schoolProperty: additionalInfo.schoolProperty, + parkingLot: additionalInfo.parkingLot + }, + insured: { + address: { + state: insured.address.state + } + }, + lossInfo: { + vehicle: { + endorsements: lossInfo.vehicle.endorsements + }, + manualGlassNames: lossInfo.manualGlassNames + }, + policy: { + policyState: policy.policyState, + status: policy.status, + currentDeductible: policy.currentDeductible, + noCoverage: policy.noCoverage + }, + orderItems }) })); }); }); - describe('unsuccessful api call', () => { - it('api call throws exception', async () => { - // Arrange - expect.assertions(2); - const error = 'final deductible error'; - globalMethods.callHttpClient = jest.fn().mockReturnValue(Promise.reject(error)); + // describe('unsuccessful api call', () => { + // it('api call throws exception', async () => { + // // Arrange + // expect.assertions(2); + // const error = 'final deductible error'; + // globalMethods.callHttpClient = jest.fn().mockReturnValue(Promise.reject(error)); - // Act - await store.getFinalDeductible().catch((e) => { - expect(e).toEqual(error); - }); + // // Act + // await store.getFinalDeductible().catch((e) => { + // expect(e).toEqual(error); + // }); - // Assert - expect(globalMethods.callHttpClient).toHaveBeenCalledWith(expect.objectContaining({ - method: endpoints.FinalDeductible.method, - endpoint: endpoints.FinalDeductible.url - })); - }); - }); + // // Assert + // expect(globalMethods.callHttpClient).toHaveBeenCalledWith(expect.objectContaining({ + // method: endpoints.FinalDeductible.method, + // endpoint: endpoints.FinalDeductible.url + // })); + // }); + // }); }); describe('updateDeductible method', () => { From e85362325e75039f895ca857c3d9c51e8d30ac34 Mon Sep 17 00:00:00 2001 From: Katie Kroell Date: Thu, 2 Nov 2023 16:12:03 -0400 Subject: [PATCH 27/36] uncomment test --- src/store/store.spec.js | 34 +++++++++++++++++----------------- 1 file changed, 17 insertions(+), 17 deletions(-) diff --git a/src/store/store.spec.js b/src/store/store.spec.js index 66fbcbf6..1c895d3a 100644 --- a/src/store/store.spec.js +++ b/src/store/store.spec.js @@ -2068,25 +2068,25 @@ describe('Store', () => { })); }); }); - // describe('unsuccessful api call', () => { - // it('api call throws exception', async () => { - // // Arrange - // expect.assertions(2); - // const error = 'final deductible error'; - // globalMethods.callHttpClient = jest.fn().mockReturnValue(Promise.reject(error)); + describe('unsuccessful api call', () => { + it('api call throws exception', async () => { + // Arrange + expect.assertions(2); + const error = 'final deductible error'; + globalMethods.callHttpClient = jest.fn().mockReturnValue(Promise.reject(error)); - // // Act - // await store.getFinalDeductible().catch((e) => { - // expect(e).toEqual(error); - // }); + // Act + await store.getFinalDeductible().catch((e) => { + expect(e).toEqual(error); + }); - // // Assert - // expect(globalMethods.callHttpClient).toHaveBeenCalledWith(expect.objectContaining({ - // method: endpoints.FinalDeductible.method, - // endpoint: endpoints.FinalDeductible.url - // })); - // }); - // }); + // Assert + expect(globalMethods.callHttpClient).toHaveBeenCalledWith(expect.objectContaining({ + method: endpoints.FinalDeductible.method, + endpoint: endpoints.FinalDeductible.url + })); + }); + }); }); describe('updateDeductible method', () => { From 16170b0c26a28c95c7bcfafbdfa16f0143087dc1 Mon Sep 17 00:00:00 2001 From: Katie Kroell Date: Thu, 2 Nov 2023 16:31:15 -0400 Subject: [PATCH 28/36] refactor additionalInfo logic --- src/store/index.js | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/src/store/index.js b/src/store/index.js index b6004dd4..76669828 100644 --- a/src/store/index.js +++ b/src/store/index.js @@ -528,8 +528,10 @@ export const useMainStore = defineStore({ schoolProperty: '', parkingLot: '' }; - if (endorsementAnswersForPayload.includes(endorsementOptions.EDUCATOR && endorsementOptions.PARKING_GUARD)) { + if (endorsementAnswersForPayload.includes(endorsementOptions.EDUCATOR)) { endorsementsAdditionalInfo.schoolProperty = 'Yes'; + } + if (endorsementAnswersForPayload.includes(endorsementOptions.PARKING_GUARD)) { endorsementsAdditionalInfo.parkingLot = 'Yes'; } From 05b8d5bdb8adde955734e85396bfa333906da7e8 Mon Sep 17 00:00:00 2001 From: Katie Kroell Date: Thu, 2 Nov 2023 16:34:29 -0400 Subject: [PATCH 29/36] typo fixes --- src/store/index.js | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/src/store/index.js b/src/store/index.js index 76669828..55739046 100644 --- a/src/store/index.js +++ b/src/store/index.js @@ -536,21 +536,21 @@ export const useMainStore = defineStore({ } const orderItemsArray = []; - const manuaGlassNamesArray = []; + const manualGlassNamesArray = []; const glassInformation = this.order.damage.glassToReplace; glassInformation?.forEach((glassPiece) => { const glassPieceObject = { name: glassPiece?.glassLocation?.toUpperCase() }; orderItemsArray.push(glassPieceObject); - manuaGlassNamesArray.push(glassPiece.glassLocation); + manualGlassNamesArray.push(glassPiece.glassLocation); }); if (this.order.customer.address.state === 'FL' && this.order.damage.isRepair) { const damageLocationObject = { name: damageLocationsSelected.WINDSHIELD.toUpperCase() }; orderItemsArray.push(damageLocationObject); - manuaGlassNamesArray.push(damageLocationsSelected.WINDSHIELD); + manualGlassNamesArray.push(damageLocationsSelected.WINDSHIELD); } return new Promise((resolve, reject) => { @@ -571,7 +571,7 @@ export const useMainStore = defineStore({ vehicle: { endorsements: endorsementAnswersForPayload }, - manualGlassNames: manuaGlassNamesArray + manualGlassNames: manualGlassNamesArray }, policy: { policyState: this.order.customer.address.state, From e0c9aacb72bf959a0921e605249320747c748bc1 Mon Sep 17 00:00:00 2001 From: Katie Kroell Date: Fri, 10 Nov 2023 12:46:15 -0500 Subject: [PATCH 30/36] payload changes --- src/store/index.js | 45 ++++++--------------------------------------- 1 file changed, 6 insertions(+), 39 deletions(-) diff --git a/src/store/index.js b/src/store/index.js index 71c5d5db..cc1a7a4e 100644 --- a/src/store/index.js +++ b/src/store/index.js @@ -525,32 +525,13 @@ export const useMainStore = defineStore({ } }); } - const endorsementsAdditionalInfo = { - schoolProperty: '', - parkingLot: '' - }; - if (endorsementAnswersForPayload.includes(endorsementOptions.EDUCATOR)) { - endorsementsAdditionalInfo.schoolProperty = 'Yes'; - } - if (endorsementAnswersForPayload.includes(endorsementOptions.PARKING_GUARD)) { - endorsementsAdditionalInfo.parkingLot = 'Yes'; - } - const orderItemsArray = []; const manualGlassNamesArray = []; const glassInformation = this.order.damage.glassToReplace; glassInformation?.forEach((glassPiece) => { - const glassPieceObject = { - name: glassPiece?.glassLocation?.toUpperCase() - }; - orderItemsArray.push(glassPieceObject); manualGlassNamesArray.push(glassPiece.glassLocation); }); if (this.order.customer.address.state === 'FL' && this.order.damage.isRepair) { - const damageLocationObject = { - name: damageLocationsSelected.WINDSHIELD.toUpperCase() - }; - orderItemsArray.push(damageLocationObject); manualGlassNamesArray.push(damageLocationsSelected.WINDSHIELD); } @@ -560,27 +541,13 @@ export const useMainStore = defineStore({ endpoint: endpoints.FinalDeductible.url, payload: { referralCorrelationId: this.order.referralCorrelationId, - referralNumber: this.order.referralNumber, accountNumber: this.issConfig.parentAccountNumber?.toString() ?? '', - additionalInfo: endorsementsAdditionalInfo, - insured: { - address: { - state: this.order.customer.address.state - } - }, - lossInfo: { - vehicle: { - endorsements: endorsementAnswersForPayload - }, - manualGlassNames: manualGlassNamesArray - }, - policy: { - policyState: this.order.customer.address.state, - status: this.order.policy.status, - currentDeductible: this.order.currentDeductible, - noCoverage: this.order.policy.noCoverage - }, - orderItems: orderItemsArray + endorsements: endorsementAnswersForPayload, + manualGlassNames: manualGlassNamesArray, + policyState: this.order.customer.address.state, + status: this.order.policy.status, + currentDeductible: this.order.currentDeductible, + noCoverage: this.order.policy.noCoverage } }).then((r) => { this.updateDeductible(r.data); From 70e2552f6594073cc4ca33c45da613dcd98ae575 Mon Sep 17 00:00:00 2001 From: Katie Kroell Date: Fri, 10 Nov 2023 13:31:04 -0500 Subject: [PATCH 31/36] make string uppercase --- src/store/index.js | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/store/index.js b/src/store/index.js index cc1a7a4e..6a989010 100644 --- a/src/store/index.js +++ b/src/store/index.js @@ -529,10 +529,10 @@ export const useMainStore = defineStore({ const manualGlassNamesArray = []; const glassInformation = this.order.damage.glassToReplace; glassInformation?.forEach((glassPiece) => { - manualGlassNamesArray.push(glassPiece.glassLocation); + manualGlassNamesArray.push(glassPiece.glassLocation.toUpperCase()); }); if (this.order.customer.address.state === 'FL' && this.order.damage.isRepair) { - manualGlassNamesArray.push(damageLocationsSelected.WINDSHIELD); + manualGlassNamesArray.push(damageLocationsSelected.WINDSHIELD.toUpperCase()); } return new Promise((resolve, reject) => { From bc7ceb0a88e0d360fd0a481551572f1650969e65 Mon Sep 17 00:00:00 2001 From: Katie Kroell Date: Fri, 10 Nov 2023 14:02:57 -0500 Subject: [PATCH 32/36] unit test updates --- src/store/index.js | 2 +- src/store/store.spec.js | 308 ++++++++-------------------------------- 2 files changed, 60 insertions(+), 250 deletions(-) diff --git a/src/store/index.js b/src/store/index.js index 6a989010..1803071d 100644 --- a/src/store/index.js +++ b/src/store/index.js @@ -529,7 +529,7 @@ export const useMainStore = defineStore({ const manualGlassNamesArray = []; const glassInformation = this.order.damage.glassToReplace; glassInformation?.forEach((glassPiece) => { - manualGlassNamesArray.push(glassPiece.glassLocation.toUpperCase()); + manualGlassNamesArray.push(glassPiece?.glassLocation?.toUpperCase()); }); if (this.order.customer.address.state === 'FL' && this.order.damage.isRepair) { manualGlassNamesArray.push(damageLocationsSelected.WINDSHIELD.toUpperCase()); diff --git a/src/store/store.spec.js b/src/store/store.spec.js index 1c895d3a..6b993a5a 100644 --- a/src/store/store.spec.js +++ b/src/store/store.spec.js @@ -1725,48 +1725,26 @@ describe('Store', () => { }); it('calls api with expected payload', () => { // Arrange - const location = getRandomString(10, 15); + const location = getRandomString(10, 15).toUpperCase(); store.order.damage.glassToReplace = [ { glassLocation: location } ]; const referralCorrelationId = getRandomGuid(); - const referralNumber = getRandomString(6, 6); const accountNumber = getRandomString(6, 6); - const additionalInfo = { - schoolProperty: '', - parkingLot: '' - }; - const insured = { - address: { - state: getRandomString(2, 2) - } - }; - const lossInfo = { - vehicle: { - endorsements: [] - }, - manualGlassNames: [location] - }; - const policy = { - policyState: insured.address.state, - status: getRandomString(6, 8), - currentDeductible: getRandomInt(0, 5000), - noCoverage: getRandomBoolean() - }; - const orderItems = [ - { - name: location.toUpperCase() - } - ]; + const endorsements = []; + const manualGlassNames = [location]; + const policyState = getRandomString(2, 2); + const status = getRandomString(6, 8); + const currentDeductible = getRandomInt(0, 5000); + const noCoverage = getRandomBoolean(); store.order.referralCorrelationId = referralCorrelationId; - store.order.referralNumber = referralNumber; store.issConfig.parentAccountNumber = accountNumber; - store.order.currentDeductible = policy.currentDeductible; - store.order.policy.noCoverage = policy.noCoverage; - store.order.policy.status = policy.status; - store.order.customer.address.state = policy.policyState; + store.order.currentDeductible = currentDeductible; + store.order.policy.noCoverage = noCoverage; + store.order.policy.status = status; + store.order.customer.address.state = policyState; globalMethods.callHttpClient = jest.fn().mockReturnValue(Promise.resolve({})); // Act @@ -1778,54 +1756,31 @@ describe('Store', () => { endpoint: endpoints.FinalDeductible.url, payload: ({ referralCorrelationId, - referralNumber, accountNumber, - additionalInfo: { - schoolProperty: additionalInfo.schoolProperty, - parkingLot: additionalInfo.parkingLot - }, - insured: { - address: { - state: insured.address.state - } - }, - lossInfo: { - vehicle: { - endorsements: lossInfo.vehicle.endorsements - }, - manualGlassNames: lossInfo.manualGlassNames - }, - policy: { - policyState: policy.policyState, - status: policy.status, - currentDeductible: policy.currentDeductible, - noCoverage: policy.noCoverage - }, - orderItems + endorsements, + manualGlassNames, + policyState, + status, + currentDeductible, + noCoverage }) })); }); it('only "Yes" endorsement answers are added to payload', () => { // Arrange - store.order.damage.glassToReplace = []; - const referralCorrelationId = getRandomGuid(); - const referralNumber = getRandomString(6, 6); - const accountNumber = getRandomString(6, 6); - const additionalInfo = { - schoolProperty: '', - parkingLot: '' - }; - const insured = { - address: { - state: getRandomString(2, 2) + const location = getRandomString(10, 15).toUpperCase(); + store.order.damage.glassToReplace = [ + { + glassLocation: location } - }; - const lossInfo = { - vehicle: { - endorsements: [] - }, - manualGlassNames: [] - }; + ]; + const referralCorrelationId = getRandomGuid(); + const accountNumber = getRandomString(6, 6); + const manualGlassNames = [location]; + const policyState = getRandomString(2, 2); + const status = getRandomString(6, 8); + const currentDeductible = getRandomInt(0, 5000); + const noCoverage = getRandomBoolean(); const endorsementAnswers = [ { questionNum: getRandomInt(1, 10), @@ -1846,20 +1801,12 @@ describe('Store', () => { selectedAnswer: 'No' } ]; - const policy = { - policyState: insured.address.state, - status: getRandomString(6, 8), - currentDeductible: getRandomInt(0, 5000), - noCoverage: getRandomBoolean() - }; - const orderItems = []; store.order.referralCorrelationId = referralCorrelationId; - store.order.referralNumber = referralNumber; store.issConfig.parentAccountNumber = accountNumber; - store.order.currentDeductible = policy.currentDeductible; - store.order.policy.noCoverage = policy.noCoverage; - store.order.policy.status = policy.status; - store.order.customer.address.state = policy.policyState; + store.order.currentDeductible = currentDeductible; + store.order.policy.noCoverage = noCoverage; + store.order.policy.status = status; + store.order.customer.address.state = policyState; store.order.policy.endorsementQuestionAnswers = endorsementAnswers; globalMethods.callHttpClient = jest.fn().mockReturnValue(Promise.resolve({})); @@ -1873,161 +1820,41 @@ describe('Store', () => { endpoint: endpoints.FinalDeductible.url, payload: ({ referralCorrelationId, - referralNumber, accountNumber, - additionalInfo: { - schoolProperty: additionalInfo.schoolProperty, - parkingLot: additionalInfo.parkingLot - }, - insured: { - address: { - state: insured.address.state - } - }, - lossInfo: { - vehicle: { - endorsements: expected - }, - manualGlassNames: lossInfo.manualGlassNames - }, - policy: { - policyState: policy.policyState, - status: policy.status, - currentDeductible: policy.currentDeductible, - noCoverage: policy.noCoverage - }, - orderItems + endorsements: expected, + manualGlassNames, + policyState, + status, + currentDeductible, + noCoverage }) })); }); - it('additionalInfo is added to payload when both endorsements are present', () => { + it('manualGlassNames updated if Florida windshield repair', () => { // Arrange - store.order.damage.glassToReplace = []; - const referralCorrelationId = getRandomGuid(); - const referralNumber = getRandomString(6, 6); - const accountNumber = getRandomString(6, 6); - const additionalInfo = { - schoolProperty: 'Yes', - parkingLot: 'Yes' - }; - const insured = { - address: { - state: getRandomString(2, 2) - } - }; - const lossInfo = { - vehicle: { - endorsements: ['Parking Guard', 'Educator'] - }, - manualGlassNames: [] - }; - const endorsementAnswers = [ + const location = 'WINDSHIELD'; + store.order.damage.glassToReplace = [ { - questionNum: getRandomInt(1, 10), - endorsementName: 'Parking Guard', - questionText: getRandomString(50, 100), - selectedAnswer: 'Yes' - }, - { - questionNum: getRandomInt(1, 10), - endorsementName: 'Educator', - questionText: getRandomString(50, 100), - selectedAnswer: 'Yes' + glassLocation: location } ]; - const policy = { - policyState: insured.address.state, - status: getRandomString(6, 8), - currentDeductible: getRandomInt(0, 5000), - noCoverage: getRandomBoolean() - }; - const orderItems = []; - store.order.referralCorrelationId = referralCorrelationId; - store.order.referralNumber = referralNumber; - store.issConfig.parentAccountNumber = accountNumber; - store.order.currentDeductible = policy.currentDeductible; - store.order.policy.noCoverage = policy.noCoverage; - store.order.policy.status = policy.status; - store.order.customer.address.state = policy.policyState; - store.order.policy.endorsementQuestionAnswers = endorsementAnswers; - globalMethods.callHttpClient = jest.fn().mockReturnValue(Promise.resolve({})); - - // Act - store.getFinalDeductible(); - - // Assert - const expected = [endorsementAnswers[0].endorsementName, endorsementAnswers[1].endorsementName]; - expect(globalMethods.callHttpClient).toHaveBeenCalledWith(({ - method: endpoints.FinalDeductible.method, - endpoint: endpoints.FinalDeductible.url, - payload: ({ - referralCorrelationId, - referralNumber, - accountNumber, - additionalInfo: { - schoolProperty: additionalInfo.schoolProperty, - parkingLot: additionalInfo.parkingLot - }, - insured: { - address: { - state: insured.address.state - } - }, - lossInfo: { - vehicle: { - endorsements: expected - }, - manualGlassNames: lossInfo.manualGlassNames - }, - policy: { - policyState: policy.policyState, - status: policy.status, - currentDeductible: policy.currentDeductible, - noCoverage: policy.noCoverage - }, - orderItems - }) - })); - }); - it('manualGlassNames and orderItems updated if Florida windshield repair', () => { - // Arrange store.order.policy.endorsementQuestionAnswers = []; const referralCorrelationId = getRandomGuid(); const referralNumber = getRandomString(6, 6); const accountNumber = getRandomString(6, 6); - const additionalInfo = { - schoolProperty: '', - parkingLot: '' - }; - const insured = { - address: { - state: 'FL' - } - }; - const lossInfo = { - vehicle: { - endorsements: [] - }, - manualGlassNames: ['Windshield'] - }; - const policy = { - policyState: insured.address.state, - status: getRandomString(6, 8), - currentDeductible: getRandomInt(0, 5000), - noCoverage: getRandomBoolean() - }; - const orderItems = [ - { - name: 'WINDSHIELD' - } - ]; + const endorsements = []; + const expectedManualGlassName = ['WINDSHIELD']; + const policyState = getRandomString(2, 2); + const status = getRandomString(6, 8); + const currentDeductible = getRandomInt(0, 5000); + const noCoverage = getRandomBoolean(); store.order.referralCorrelationId = referralCorrelationId; store.order.referralNumber = referralNumber; store.issConfig.parentAccountNumber = accountNumber; - store.order.currentDeductible = policy.currentDeductible; - store.order.policy.noCoverage = policy.noCoverage; - store.order.policy.status = policy.status; - store.order.customer.address.state = policy.policyState; + store.order.currentDeductible = currentDeductible; + store.order.policy.noCoverage = noCoverage; + store.order.policy.status = status; + store.order.customer.address.state = policyState; store.order.damage.isRepair = true; globalMethods.callHttpClient = jest.fn().mockReturnValue(Promise.resolve({})); @@ -2040,30 +1867,13 @@ describe('Store', () => { endpoint: endpoints.FinalDeductible.url, payload: ({ referralCorrelationId, - referralNumber, accountNumber, - additionalInfo: { - schoolProperty: additionalInfo.schoolProperty, - parkingLot: additionalInfo.parkingLot - }, - insured: { - address: { - state: insured.address.state - } - }, - lossInfo: { - vehicle: { - endorsements: lossInfo.vehicle.endorsements - }, - manualGlassNames: lossInfo.manualGlassNames - }, - policy: { - policyState: policy.policyState, - status: policy.status, - currentDeductible: policy.currentDeductible, - noCoverage: policy.noCoverage - }, - orderItems + endorsements, + manualGlassNames: expectedManualGlassName, + policyState, + status, + currentDeductible, + noCoverage }) })); }); From c6bff1797eed1caa2ab07e093e554e92345b7a66 Mon Sep 17 00:00:00 2001 From: Katie Kroell Date: Fri, 10 Nov 2023 14:44:22 -0500 Subject: [PATCH 33/36] move ITACflag call earlier --- src/layouts/coverage-statement/coverage-statement.vue | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/layouts/coverage-statement/coverage-statement.vue b/src/layouts/coverage-statement/coverage-statement.vue index 066e7953..3db996f3 100644 --- a/src/layouts/coverage-statement/coverage-statement.vue +++ b/src/layouts/coverage-statement/coverage-statement.vue @@ -341,6 +341,7 @@ export default { return !!useMainStore().vehicle.carId; }, async initializeComponent() { + useMainStore().updatePolicyITACFlag(this.verifiedITAC); if (this.policyLookupSuccessful && useMainStore().isClaimRegistrationRequired && (this.coveredAndServicePriceAboveOrEqualDeductible || this.verifiedITAC)) { @@ -352,7 +353,6 @@ export default { return this.navigateForward(); }, async navigateForward() { - useMainStore().updatePolicyITACFlag(this.verifiedITAC); if (this.unverified || this.verifiedDeductible) { this.mainStore.saveSupportingItems(this.supportingItems); this.$router.navigate( From faee351ca13a83f288d64ca6b1342057e1bace2b Mon Sep 17 00:00:00 2001 From: Katie Kroell Date: Fri, 10 Nov 2023 15:05:08 -0500 Subject: [PATCH 34/36] fix unit test --- src/layouts/coverage-statement/coverage-statement.spec.js | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/src/layouts/coverage-statement/coverage-statement.spec.js b/src/layouts/coverage-statement/coverage-statement.spec.js index 68ce7fd0..7b701ea2 100644 --- a/src/layouts/coverage-statement/coverage-statement.spec.js +++ b/src/layouts/coverage-statement/coverage-statement.spec.js @@ -797,8 +797,8 @@ describe.skip('coverageStatement.vue', () => { }); describe('coverageStatement.vue-working', () => { - describe('Navigation', () => { - test('Function called on any FORWARD navigation', () => { + describe('ITAC flag', () => { + test('ITAC flag updated once component is initialized', () => { // Arrange const mainInitialState = { order: { @@ -810,7 +810,7 @@ describe('coverageStatement.vue-working', () => { const { wrapper } = getMountedComponent(mainInitialState); // Act - wrapper.vm.forwardButtonAction(); + wrapper.vm.initializeComponent(); // Assert expect(wrapper.vm.mainStore.updatePolicyITACFlag) From 7fb77db81ac08f6ec25f2731d57229fa9e3397c3 Mon Sep 17 00:00:00 2001 From: Katie Kroell Date: Mon, 13 Nov 2023 12:57:59 -0500 Subject: [PATCH 35/36] remove FL logic, update tests --- src/store/index.js | 6 ++--- src/store/store.spec.js | 55 +++++------------------------------------ 2 files changed, 8 insertions(+), 53 deletions(-) diff --git a/src/store/index.js b/src/store/index.js index 1803071d..eb69a5df 100644 --- a/src/store/index.js +++ b/src/store/index.js @@ -531,9 +531,6 @@ export const useMainStore = defineStore({ glassInformation?.forEach((glassPiece) => { manualGlassNamesArray.push(glassPiece?.glassLocation?.toUpperCase()); }); - if (this.order.customer.address.state === 'FL' && this.order.damage.isRepair) { - manualGlassNamesArray.push(damageLocationsSelected.WINDSHIELD.toUpperCase()); - } return new Promise((resolve, reject) => { globalMethods.callHttpClient({ @@ -547,7 +544,8 @@ export const useMainStore = defineStore({ policyState: this.order.customer.address.state, status: this.order.policy.status, currentDeductible: this.order.currentDeductible, - noCoverage: this.order.policy.noCoverage + noCoverage: this.order.policy.noCoverage, + isRepair: this.order.damage.isRepair } }).then((r) => { this.updateDeductible(r.data); diff --git a/src/store/store.spec.js b/src/store/store.spec.js index 6b993a5a..69dc486b 100644 --- a/src/store/store.spec.js +++ b/src/store/store.spec.js @@ -1739,6 +1739,7 @@ describe('Store', () => { const status = getRandomString(6, 8); const currentDeductible = getRandomInt(0, 5000); const noCoverage = getRandomBoolean(); + const isRepair = getRandomBoolean(); store.order.referralCorrelationId = referralCorrelationId; store.issConfig.parentAccountNumber = accountNumber; store.order.currentDeductible = currentDeductible; @@ -1762,7 +1763,8 @@ describe('Store', () => { policyState, status, currentDeductible, - noCoverage + noCoverage, + isRepair }) })); }); @@ -1781,6 +1783,7 @@ describe('Store', () => { const status = getRandomString(6, 8); const currentDeductible = getRandomInt(0, 5000); const noCoverage = getRandomBoolean(); + const isRepair = getRandomBoolean(); const endorsementAnswers = [ { questionNum: getRandomInt(1, 10), @@ -1826,54 +1829,8 @@ describe('Store', () => { policyState, status, currentDeductible, - noCoverage - }) - })); - }); - it('manualGlassNames updated if Florida windshield repair', () => { - // Arrange - const location = 'WINDSHIELD'; - store.order.damage.glassToReplace = [ - { - glassLocation: location - } - ]; - store.order.policy.endorsementQuestionAnswers = []; - const referralCorrelationId = getRandomGuid(); - const referralNumber = getRandomString(6, 6); - const accountNumber = getRandomString(6, 6); - const endorsements = []; - const expectedManualGlassName = ['WINDSHIELD']; - const policyState = getRandomString(2, 2); - const status = getRandomString(6, 8); - const currentDeductible = getRandomInt(0, 5000); - const noCoverage = getRandomBoolean(); - store.order.referralCorrelationId = referralCorrelationId; - store.order.referralNumber = referralNumber; - store.issConfig.parentAccountNumber = accountNumber; - store.order.currentDeductible = currentDeductible; - store.order.policy.noCoverage = noCoverage; - store.order.policy.status = status; - store.order.customer.address.state = policyState; - store.order.damage.isRepair = true; - globalMethods.callHttpClient = jest.fn().mockReturnValue(Promise.resolve({})); - - // Act - store.getFinalDeductible(); - - // Assert - expect(globalMethods.callHttpClient).toHaveBeenCalledWith(({ - method: endpoints.FinalDeductible.method, - endpoint: endpoints.FinalDeductible.url, - payload: ({ - referralCorrelationId, - accountNumber, - endorsements, - manualGlassNames: expectedManualGlassName, - policyState, - status, - currentDeductible, - noCoverage + noCoverage, + isRepair }) })); }); From 6616711c02c98fb7a3689cd7ebfa357a5208c091 Mon Sep 17 00:00:00 2001 From: Katie Kroell Date: Mon, 13 Nov 2023 14:58:31 -0500 Subject: [PATCH 36/36] unit test fix --- src/store/store.spec.js | 2 ++ 1 file changed, 2 insertions(+) diff --git a/src/store/store.spec.js b/src/store/store.spec.js index 69dc486b..eb59c670 100644 --- a/src/store/store.spec.js +++ b/src/store/store.spec.js @@ -1746,6 +1746,7 @@ describe('Store', () => { store.order.policy.noCoverage = noCoverage; store.order.policy.status = status; store.order.customer.address.state = policyState; + store.order.damage.isRepair = isRepair; globalMethods.callHttpClient = jest.fn().mockReturnValue(Promise.resolve({})); // Act @@ -1811,6 +1812,7 @@ describe('Store', () => { store.order.policy.status = status; store.order.customer.address.state = policyState; store.order.policy.endorsementQuestionAnswers = endorsementAnswers; + store.order.damage.isRepair = isRepair; globalMethods.callHttpClient = jest.fn().mockReturnValue(Promise.resolve({})); // Act