From 39615348384603e0500bfdf1131369bd6b01a00e Mon Sep 17 00:00:00 2001 From: Katie Kroell Date: Thu, 20 Jul 2023 11:27:41 -0400 Subject: [PATCH 01/26] refactor store access --- .../coverage-statement/coverage-statement.vue | 34 ++++++++++--------- 1 file changed, 18 insertions(+), 16 deletions(-) diff --git a/src/layouts/coverage-statement/coverage-statement.vue b/src/layouts/coverage-statement/coverage-statement.vue index 689272f8..19b0e0ca 100644 --- a/src/layouts/coverage-statement/coverage-statement.vue +++ b/src/layouts/coverage-statement/coverage-statement.vue @@ -114,8 +114,6 @@ import { errorMessages } from "@/constants/error-messages"; // DEFINE VALIDATION RULES defineRule("selection-required", required(errorMessages.OPTION_REQUIRED)); -const store = useMainStore(); - export default { name: 'coverage-statement', mixins: [baseFormMixin, vehicleQuestionsMixin], @@ -123,7 +121,7 @@ export default { // Call APIs const cmsContentPromise = fetchCmsContentForPage(to.query.issPage); - const supportingItemsPromise = await store.getSupportingItems(); + const supportingItemsPromise = await useMainStore().getSupportingItems(); // Settle promises and get results const promiseResultMap = [ @@ -147,15 +145,15 @@ export default { const resultMap = await settleAllPromises(promiseResultMap); - const clonedGlassParts = store.order.lineItems.glassParts - ? JSON.parse(JSON.stringify(store.order.lineItems.glassParts)) + const clonedGlassParts = useMainStore().order.lineItems.glassParts + ? JSON.parse(JSON.stringify(useMainStore().order.lineItems.glassParts)) : []; const availableLineItems = [ ...resultMap.supportingItems, ...clonedGlassParts, ]; - const pricingResults = await store.getPriceOrderItems(availableLineItems); + const pricingResults = await useMainStore().getPriceOrderItems(availableLineItems); // Call the "next" function to complete the transition to this page. next((vm) => { @@ -181,7 +179,7 @@ export default { }, data() { return { - isVerified: store.order.payment.insuranceCoverage.isVerified, + isVerified: useMainStore().order.payment.insuranceCoverage.isVerified, supportingItems: [], pricedGlassParts: [], availableLineItems: [], @@ -189,6 +187,10 @@ export default { deductibleText: "Your deductible is:", } }, + setup() { + const mainStore = useMainStore(); + return { mainStore }; + }, computed: { verifiedITACAlertHeader() { return this.getCmsContent( @@ -240,12 +242,12 @@ export default { }, vehicleDeductible() { if (this.coverageVerified) { - if (store.order.damage.isRepair) { - const repairDeductible = store.order.policy.deductible.repair + if (this.mainStore.order.damage.isRepair) { + const repairDeductible = this.mainStore.order.policy.deductible.repair return repairDeductible; } else { - const replaceDeductible = store.order.policy.deductible.replace; + const replaceDeductible = this.mainStore.order.policy.deductible.replace; return replaceDeductible; } } @@ -271,7 +273,7 @@ export default { }, verifiedNoComp() { if (this.coverageVerified) { - return store.order.policy.noCoverage; + return this.mainStore.order.policy.noCoverage; } }, verifiedITAC() { @@ -289,8 +291,8 @@ export default { } }, ADASReplace() { - if (!store.order.damage.isRepair) { - let parts = store.order.lineItems.glassParts; + if (!this.mainStore.order.damage.isRepair) { + let parts = this.mainStore.order.lineItems.glassParts; if (parts != null && parts.filter(part => part.requiresRecalibration).length > 0) { return true; @@ -298,12 +300,12 @@ export default { } }, nonADASReplace() { - if (!store.order.damage.isRepair) { + if (!this.mainStore.order.damage.isRepair) { return !this.ADASReplace; } }, nonADASRepair() { - if (store.order.damage.isRepair) { + if (this.mainStore.order.damage.isRepair) { return true; } }, @@ -359,7 +361,7 @@ export default { this.$route ) } - else if (store.issConfig.enableTPAFlow){ + else if (this.mainStore.issConfig.enableTPAFlow){ this.$router.navigate( this.navigationScenarios.CLICKED_FORWARD_WITH_THIRD_PARTY, this.$route From ef6f01a007d5b19f5b750aa8c24c087f64eef71a Mon Sep 17 00:00:00 2001 From: Katie Kroell Date: Fri, 21 Jul 2023 08:48:44 -0400 Subject: [PATCH 02/26] start of unit tests --- .../coverage-statement.spec.js | 109 ++++++++++++++++-- .../coverage-statement/coverage-statement.vue | 5 +- 2 files changed, 104 insertions(+), 10 deletions(-) diff --git a/src/layouts/coverage-statement/coverage-statement.spec.js b/src/layouts/coverage-statement/coverage-statement.spec.js index 15b18c73..b67f4d09 100644 --- a/src/layouts/coverage-statement/coverage-statement.spec.js +++ b/src/layouts/coverage-statement/coverage-statement.spec.js @@ -1,16 +1,109 @@ -describe ('test', () => { - test ('dummy test', () => { - // Arrange - let test = "test"; +// Components +import coverageStatement from '@/layouts/coverage-statement/coverage-statement'; - // Act - test = "test2" +// Supporting Files +import { shallowMount } from '@vue/test-utils'; +import { getMountOptions } from '@/helpers/unit-test-helper.js'; +import { createTestingPinia } from '@pinia/testing'; +import { navigationScenarios } from '@/router/router-constants/navigation-scenarios.js'; +import { useMainStore } from '@/store/index.js'; +import { settleAllPromises } from '@/helpers/layout-helper'; +import { fetchCmsContentForPage } from '@/helpers/cms-content-helper'; +import { render } from '@testing-library/vue'; - // Assert - expect(test.length).toBe(5); +// Mock fetchCmsContentForPage +// jest.mock('@/helpers/cms-content-helper', () => ({ +// fetchCmsContentForPage: jest.fn(), +// processIfStatements: jest.fn(), +// getBodyTextFromCms: jest.fn(), +// })); + +// // Mock our module for promises. +// jest.mock('@/helpers/layout-helper.js', () => ({ +// settleAllPromises: jest.fn(), +// })); + +describe('coverageStatement.vue', () => { + describe('Rendering', () => { + test('Should render site header', () => { + // Arrange + const { wrapper } = setupMocks({}); + + // Act + const siteHeader = wrapper.findComponent({ ref: 'siteHeader' }); + + // Assert + expect(siteHeader.exists()).toBe(true); + }), + test('Should render site footer', () => { + // Arrange + const { wrapper } = setupMocks({}); + + // Act + const footer = wrapper.findComponent({ ref: 'siteFooter' }); + + // Assert + expect(footer.exists()).toBe(true); + }); + test('Should render ITAC alert if ITAC', async () => { + // Arrange + const { wrapper } = setupMocks({}); + + // Act + await wrapper.setData({ + isVerified: true, + verifiedITAC: true, + }) + + // Assert + expect(wrapper.findComponent({ ref: 'verifiedITACAlert' }).exists()).toBe(true); + }); }) }) +const mockMixin = { + methods: { + getCmsContent: jest.fn().mockImplementation(() => ''), + setCmsContent: jest.fn(), + }, +}; + +function setupMocks() +{ + const mountOptions = getMountOptions({ + // router: { + // navigate: jest.fn() + // }, + + // global: { + // plugins: [createTestingPinia()] + // } + }); + + mountOptions.mixins = [mockMixin]; + + // settleAllPromises.mockImplementation(() => apiResponses); + // fetchCmsContentForPage.mockImplementation(() => Promise.resolve()); + + const wrapper = shallowMount(coverageStatement, mountOptions); + wrapper.vm.$refs.siteFooter.updateButtonText = jest.fn(); + return { wrapper }; +} + + +// describe ('test', () => { +// test ('dummy test', () => { +// // Arrange +// let test = "test"; + +// // Act +// test = "test2" + +// // Assert +// expect(test.length).toBe(5); +// }) +// }) + // *Testing to be completed on SSR-603 // // Components diff --git a/src/layouts/coverage-statement/coverage-statement.vue b/src/layouts/coverage-statement/coverage-statement.vue index 19b0e0ca..aaca156f 100644 --- a/src/layouts/coverage-statement/coverage-statement.vue +++ b/src/layouts/coverage-statement/coverage-statement.vue @@ -6,7 +6,7 @@ v-slot="{ meta }" @invalid-submit="onInvalidSubmit">
- +
@@ -14,7 +14,8 @@ v-slot="{ meta }"
+ class="text-center text-black" + ref="siteSubHeader">
Date: Fri, 21 Jul 2023 14:06:49 -0400 Subject: [PATCH 03/26] unit test WIP --- .../coverage-statement.spec.js | 69 +++++++++++++++++-- .../coverage-statement/coverage-statement.vue | 3 + 2 files changed, 67 insertions(+), 5 deletions(-) diff --git a/src/layouts/coverage-statement/coverage-statement.spec.js b/src/layouts/coverage-statement/coverage-statement.spec.js index b67f4d09..16197a57 100644 --- a/src/layouts/coverage-statement/coverage-statement.spec.js +++ b/src/layouts/coverage-statement/coverage-statement.spec.js @@ -10,6 +10,8 @@ import { useMainStore } from '@/store/index.js'; import { settleAllPromises } from '@/helpers/layout-helper'; import { fetchCmsContentForPage } from '@/helpers/cms-content-helper'; import { render } from '@testing-library/vue'; +import { getRandomString, getRandomInt, getRandomBoolean } from '@/helpers/data-generation.js'; + // Mock fetchCmsContentForPage // jest.mock('@/helpers/cms-content-helper', () => ({ @@ -45,18 +47,75 @@ describe('coverageStatement.vue', () => { // Assert expect(footer.exists()).toBe(true); }); - test('Should render ITAC alert if ITAC', async () => { + test('If coverage verified and not No Comp, and deductible more than service price, verifiedITAC returns true', async () => { // Arrange - const { wrapper } = setupMocks({}); + //const { wrapper } = setupMocks({}); + const mountOptions = getMountOptions(); // Act - await wrapper.setData({ + // await wrapper.setData({ + // isVerified: true, + // }) + + const sellingPrice = getRandomInt(100, 500); + const deductible = sellingPrice + 1; + + const mainInitialState = { + order: { + damage: { + isRepair: true + }, + policy: { + noCoverage: false, + deductible: { + repair: deductible, + } + } + } + }; + + mountOptions.global = { + plugins: [createTestingPinia({ + initialState: { + main: mainInitialState + } + })] + } + + const wrapper = shallowMount(coverageStatement, mountOptions); + wrapper.setData({ isVerified: true, - verifiedITAC: true, + availableLineItems: [ + { + sellingPrice: sellingPrice, + kitPrice: 0, + laborAmount: 0, + } + ] }) // Assert - expect(wrapper.findComponent({ ref: 'verifiedITACAlert' }).exists()).toBe(true); + console.log(sellingPrice); + expect(wrapper.vm.verifiedITAC).toBeTruthy(); + //expect(wrapper.findComponent({ ref: 'verifiedITACAlert' }).exists()).toBe(true); + }); + test('If coverage verified is false, verifiedITAC returns false', () => { + + }); + test('If No Comp, verified ITAC returns false', () => { + + }); + test('If deductible is less than service price, verified ITAC is false', () => { + + }); + // need to figure out what happens here + test('If deductible is equal to service price, *TBD', () => { + + }); + test('If isVerified is true, coverageVerified returns true', () => { + + // expect coverageVerified to be true + // expect coverageUnverified to be false }); }) }) diff --git a/src/layouts/coverage-statement/coverage-statement.vue b/src/layouts/coverage-statement/coverage-statement.vue index aaca156f..27e636ed 100644 --- a/src/layouts/coverage-statement/coverage-statement.vue +++ b/src/layouts/coverage-statement/coverage-statement.vue @@ -279,10 +279,13 @@ export default { }, verifiedITAC() { if (this.coverageVerified && !this.verifiedNoComp) { + console.log(this.vehicleDeductible); + console.log(this.totalServicePrice); if (this.vehicleDeductible > this.totalServicePrice) { return true; } } + return false; }, verifiedDeductible() { if (this.coverageVerified && !this.verifiedNoComp) { From 68ccd5599c98a74cd38895b06d339d564381fad1 Mon Sep 17 00:00:00 2001 From: Katie Kroell Date: Mon, 24 Jul 2023 14:19:23 -0400 Subject: [PATCH 04/26] update store references --- .../coverage-statement/coverage-statement.vue | 22 +++++++++++-------- 1 file changed, 13 insertions(+), 9 deletions(-) diff --git a/src/layouts/coverage-statement/coverage-statement.vue b/src/layouts/coverage-statement/coverage-statement.vue index 6596ec48..fb16ae5e 100644 --- a/src/layouts/coverage-statement/coverage-statement.vue +++ b/src/layouts/coverage-statement/coverage-statement.vue @@ -174,9 +174,13 @@ export default { vm.availableLineItems = pricingResults; }); }, + setup() { + const mainStore = useMainStore(); + return { mainStore }; + }, data() { return { - isVerified: store.order.payment.insuranceCoverage.isVerified, + isVerified: useMainStore().order.payment.insuranceCoverage.isVerified, supportingItems: [], pricedGlassParts: [], availableLineItems: [], @@ -234,12 +238,12 @@ export default { }, vehicleDeductible() { if (this.coverageVerified) { - if (store.order.damage.isRepair) { - const repairDeductible = store.order.policy.deductible.repair; + if (this.mainStore.order.damage.isRepair) { + const repairDeductible = this.mainStore.order.policy.deductible.repair; return repairDeductible; } - const replaceDeductible = store.order.policy.deductible.replace; + const replaceDeductible = this.mainStore.order.policy.deductible.replace; return replaceDeductible; } return null; @@ -266,7 +270,7 @@ export default { return !this.isVerified; }, verifiedNoComp() { - return this.coverageVerified ? store.order.policy.noCoverage : false; + return this.coverageVerified ? this.mainStore.order.policy.noCoverage : false; }, verifiedITAC() { return this.coverageVerified @@ -279,8 +283,8 @@ export default { && this.totalServicePrice > this.vehicleDeductible; }, ADASReplace() { - if (!store.order.damage.isRepair) { - const parts = store.order.lineItems.glassParts; + if (!this.mainStore.order.damage.isRepair) { + const parts = this.mainStore.order.lineItems.glassParts; if (parts != null && parts.filter((part) => part.requiresRecalibration).length > 0) { @@ -293,7 +297,7 @@ export default { return !this.ADASReplace; }, nonADASRepair() { - return store.order.damage.isRepair; + return this.mainStore.order.damage.isRepair; }, totalServicePrice() { let total = 0; @@ -350,7 +354,7 @@ export default { if (this.selectedProvider === 'Safelite') { this.$router.navigate(this.navigationScenarios.CLICKED_FORWARD_WITH_SAFELITE, this.$route); - } else if (store.issConfig.enableTPAFlow) { + } else if (this.mainStore.issConfig.enableTPAFlow) { this.$router.navigate(this.navigationScenarios.CLICKED_FORWARD_WITH_THIRD_PARTY, this.$route); } else { From 580e83b010c9157f0f51ab4773d8aad741daa7a4 Mon Sep 17 00:00:00 2001 From: Katie Kroell Date: Mon, 24 Jul 2023 14:20:06 -0400 Subject: [PATCH 05/26] styling fixes --- src/layouts/coverage-statement/coverage-statement.vue | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/layouts/coverage-statement/coverage-statement.vue b/src/layouts/coverage-statement/coverage-statement.vue index fb16ae5e..381bfe96 100644 --- a/src/layouts/coverage-statement/coverage-statement.vue +++ b/src/layouts/coverage-statement/coverage-statement.vue @@ -18,7 +18,7 @@ ref="siteSubHeader">
+ class="d-flex justify-content-center cost mb-5"> {{ formattedServicePrice }}
Date: Mon, 24 Jul 2023 14:21:16 -0400 Subject: [PATCH 06/26] update to NoComp logic --- src/layouts/coverage-statement/coverage-statement.vue | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/layouts/coverage-statement/coverage-statement.vue b/src/layouts/coverage-statement/coverage-statement.vue index 381bfe96..7d8b6ec7 100644 --- a/src/layouts/coverage-statement/coverage-statement.vue +++ b/src/layouts/coverage-statement/coverage-statement.vue @@ -267,10 +267,10 @@ export default { return this.isVerified; }, coverageUnverified() { - return !this.isVerified; + return !this.isVerified && !this.verifiedNoComp; }, verifiedNoComp() { - return this.coverageVerified ? this.mainStore.order.policy.noCoverage : false; + return this.mainStore.order.policy.noCoverage; }, verifiedITAC() { return this.coverageVerified From 14fb8f8d77aa63be4dd4a82c48451715cf3cbe2e Mon Sep 17 00:00:00 2001 From: Katie Kroell Date: Mon, 24 Jul 2023 17:07:34 -0400 Subject: [PATCH 07/26] unit tests for computed properties --- .../coverage-statement.spec.js | 434 ++++++++++++++++-- 1 file changed, 385 insertions(+), 49 deletions(-) diff --git a/src/layouts/coverage-statement/coverage-statement.spec.js b/src/layouts/coverage-statement/coverage-statement.spec.js index 91d05d7d..9f81d22a 100644 --- a/src/layouts/coverage-statement/coverage-statement.spec.js +++ b/src/layouts/coverage-statement/coverage-statement.spec.js @@ -26,6 +26,31 @@ import { getRandomString, getRandomInt, getRandomBoolean } from '@/helpers/data- // })); describe('coverageStatement.vue', () => { + describe("method arePagePrerequisitesValid...", () => { + test("Should return true for valid page requisites if vin exists", () => { + // Arrange + const { wrapper } = setupMocks({}); + useMainStore().order.vehicle.vin = getRandomString(5,20); + + // Act + let arePagePrerequisitesValid = wrapper.vm.arePagePrerequisitesValid(); + + //Assert + expect(arePagePrerequisitesValid).toBe(true); + }); + test("Should return false for valid page requisites if vin is missing", () => { + // Arrange + const { wrapper } = setupMocks({}); + + useMainStore().order.vehicle.vin = null; + + // Act + let arePagePrerequisitesValid = wrapper.vm.arePagePrerequisitesValid(); + + //Assert + expect(arePagePrerequisitesValid).toBe(false); + }); + }); describe('Rendering', () => { test('Should render site header', () => { // Arrange @@ -47,19 +72,13 @@ describe('coverageStatement.vue', () => { // Assert expect(footer.exists()).toBe(true); }); - test('If coverage verified and not No Comp, and deductible more than service price, verifiedITAC returns true', async () => { + }); + describe('Verified ITAC scenario', () => { + test('If coverage verified, not No Comp, and deductible > service price, verifiedITAC returns true', () => { // Arrange - //const { wrapper } = setupMocks({}); const mountOptions = getMountOptions(); - - // Act - // await wrapper.setData({ - // isVerified: true, - // }) - const sellingPrice = getRandomInt(100, 500); const deductible = sellingPrice + 1; - const mainInitialState = { order: { damage: { @@ -73,7 +92,6 @@ describe('coverageStatement.vue', () => { } } }; - mountOptions.global = { plugins: [createTestingPinia({ initialState: { @@ -82,6 +100,7 @@ describe('coverageStatement.vue', () => { })] } + // Act const wrapper = shallowMount(coverageStatement, mountOptions); wrapper.setData({ isVerified: true, @@ -95,29 +114,372 @@ describe('coverageStatement.vue', () => { }) // Assert - console.log(sellingPrice); expect(wrapper.vm.verifiedITAC).toBeTruthy(); - //expect(wrapper.findComponent({ ref: 'verifiedITACAlert' }).exists()).toBe(true); }); - test('If coverage verified is false, verifiedITAC returns false', () => { + test('If coverage unverified, verifiedITAC returns false', () => { + // Arrange + const mountOptions = getMountOptions(); + const mainInitialState = { + order: { + damage: { + isRepair: true + }, + } + }; + mountOptions.global = { + plugins: [createTestingPinia({ + initialState: { + main: mainInitialState + } + })] + } - }); - test('If No Comp, verified ITAC returns false', () => { + // Act + const wrapper = shallowMount(coverageStatement, mountOptions); + wrapper.setData({ + isVerified: false, + }) + // Assert + expect(wrapper.vm.verifiedITAC).toBeFalsy(); }); - test('If deductible is less than service price, verified ITAC is false', () => { + test('If No Comp, verifiedITAC returns false', () => { + // Arrange + const mountOptions = getMountOptions(); + const mainInitialState = { + order: { + damage: { + isRepair: true + }, + policy: { + noCoverage: true, + } + } + }; + mountOptions.global = { + plugins: [createTestingPinia({ + initialState: { + main: mainInitialState + } + })] + } - }); - // need to figure out what happens here - test('If deductible is equal to service price, *TBD', () => { + // Act + const wrapper = shallowMount(coverageStatement, mountOptions); + wrapper.setData({ + isVerified: false, + }) + // Assert + expect(wrapper.vm.verifiedITAC).toBeFalsy(); }); - test('If isVerified is true, coverageVerified returns true', () => { + test('If deductible < service price, verifiedITAC returns false', () => { + // Arrange + const mountOptions = getMountOptions(); + const sellingPrice = getRandomInt(100, 500); + const deductible = sellingPrice - 1; + const mainInitialState = { + order: { + damage: { + isRepair: true + }, + policy: { + noCoverage: false, + deductible: { + repair: deductible, + } + } + } + }; + mountOptions.global = { + plugins: [createTestingPinia({ + initialState: { + main: mainInitialState + } + })] + } - // expect coverageVerified to be true - // expect coverageUnverified to be false + // Act + const wrapper = shallowMount(coverageStatement, mountOptions); + wrapper.setData({ + isVerified: true, + availableLineItems: [ + { + sellingPrice: sellingPrice, + kitPrice: 0, + laborAmount: 0, + } + ] + }) + + // Assert + expect(wrapper.vm.verifiedITAC).toBeFalsy(); }); - }) + }); + describe('Verified Deductible scenario', () => { + test('If coverage verified, not No Comp, and service price > deductible, verifiedITAC returns true', () => { + // Arrange + const mountOptions = getMountOptions(); + const sellingPrice = getRandomInt(100, 500); + const deductible = sellingPrice - 1; + const mainInitialState = { + order: { + damage: { + isRepair: true + }, + policy: { + noCoverage: false, + deductible: { + repair: deductible, + } + } + } + }; + mountOptions.global = { + plugins: [createTestingPinia({ + initialState: { + main: mainInitialState + } + })] + } + + // Act + const wrapper = shallowMount(coverageStatement, mountOptions); + wrapper.setData({ + isVerified: true, + availableLineItems: [ + { + sellingPrice: sellingPrice, + kitPrice: 0, + laborAmount: 0, + } + ] + }) + + // Assert + expect(wrapper.vm.verifiedDeductible).toBeTruthy(); + }); + test('If coverage unverified, verifiedDeductible returns false', () => { + // Arrange + const mountOptions = getMountOptions(); + const mainInitialState = { + order: { + damage: { + isRepair: true + }, + } + }; + mountOptions.global = { + plugins: [createTestingPinia({ + initialState: { + main: mainInitialState + } + })] + } + + // Act + const wrapper = shallowMount(coverageStatement, mountOptions); + wrapper.setData({ + isVerified: false, + }) + + // Assert + expect(wrapper.vm.verifiedDeductible).toBeFalsy(); + }); + test('If No Comp, verifiedDeductible returns false', () => { + // Arrange + const mountOptions = getMountOptions(); + const mainInitialState = { + order: { + damage: { + isRepair: true + }, + policy: { + noCoverage: true, + } + } + }; + mountOptions.global = { + plugins: [createTestingPinia({ + initialState: { + main: mainInitialState + } + })] + } + + // Act + const wrapper = shallowMount(coverageStatement, mountOptions); + wrapper.setData({ + isVerified: false, + }) + + // Assert + expect(wrapper.vm.verifiedDeductible).toBeFalsy(); + }); + test('If service price < deductible, verifiedDeductible returns false', () => { + // Arrange + const mountOptions = getMountOptions(); + const sellingPrice = getRandomInt(100, 500); + const deductible = sellingPrice + 1; + const mainInitialState = { + order: { + damage: { + isRepair: true + }, + policy: { + noCoverage: false, + deductible: { + repair: deductible, + } + } + } + }; + mountOptions.global = { + plugins: [createTestingPinia({ + initialState: { + main: mainInitialState + } + })] + } + + // Act + const wrapper = shallowMount(coverageStatement, mountOptions); + wrapper.setData({ + isVerified: true, + availableLineItems: [ + { + sellingPrice: sellingPrice, + kitPrice: 0, + laborAmount: 0, + } + ] + }) + + // Assert + expect(wrapper.vm.verifiedDeductible).toBeFalsy(); + }); + }); + describe('No Comp scenario', () => { + test('If noCoverage = true, verifiedNoComp returns true', () => { + // Arrange + const mountOptions = getMountOptions(); + const mainInitialState = { + order: { + damage: { + isRepair: true + }, + policy: { + noCoverage: true, + } + } + }; + mountOptions.global = { + plugins: [createTestingPinia({ + initialState: { + main: mainInitialState + } + })] + } + + // Act + const wrapper = shallowMount(coverageStatement, mountOptions); + wrapper.setData({ + isVerified: false, + }) + + // Assert + expect(wrapper.vm.verifiedNoComp).toBeTruthy(); + }); + test('If noCoverage = false, verifiedNoComp returns false', () => { + // Arrange + const mountOptions = getMountOptions(); + const mainInitialState = { + order: { + damage: { + isRepair: true + }, + policy: { + noCoverage: false, + } + } + }; + mountOptions.global = { + plugins: [createTestingPinia({ + initialState: { + main: mainInitialState + } + })] + } + + // Act + const wrapper = shallowMount(coverageStatement, mountOptions); + wrapper.setData({ + isVerified: false, + }) + + // Assert + expect(wrapper.vm.verifiedNoComp).toBeFalsy(); + }); + }); + describe('Unverified scenario', () => { + test('If isVerified is false, coverageUnverified returns true, coverageVerified returns false', () => { + // Arrange + const mountOptions = getMountOptions(); + const mainInitialState = { + order: { + damage: { + isRepair: true + }, + } + }; + mountOptions.global = { + plugins: [createTestingPinia({ + initialState: { + main: mainInitialState + } + })] + } + + // Act + const wrapper = shallowMount(coverageStatement, mountOptions); + wrapper.setData({ + isVerified: false, + }) + + // Assert + expect(wrapper.vm.coverageUnverified).toBeTruthy(); + expect(wrapper.vm.coverageVerified).toBeFalsy(); + }); + test('If isVerified is true, coverageVerified returns true, coverageUnverified returns false', () => { + // Arrange + const mountOptions = getMountOptions(); + const mainInitialState = { + order: { + damage: { + isRepair: true + }, + } + }; + mountOptions.global = { + plugins: [createTestingPinia({ + initialState: { + main: mainInitialState + } + })] + } + + // Act + const wrapper = shallowMount(coverageStatement, mountOptions); + wrapper.setData({ + isVerified: true, + }) + + // Assert + expect(wrapper.vm.coverageVerified).toBeTruthy(); + expect(wrapper.vm.coverageUnverified).toBeFalsy(); + }); + }); + }) const mockMixin = { @@ -196,32 +558,6 @@ function setupMocks() // })); // describe("coverage-statement.vue...", () => { -// describe("method arePagePrerequisitesValid...", () => { -// test("Should return true for valid page requisites if vin exists", () => { -// // Arrange -// const { wrapper } = setupMocks({}); -// useMainStore().order.vehicle.vin = getRandomString(5,20); - -// // Act -// let arePagePrerequisitesValid = wrapper.vm.arePagePrerequisitesValid(); - -// //Assert -// expect(arePagePrerequisitesValid).toBe(true); -// }); - -// test("Should return false for valid page requisites if vin is missing", () => { -// // Arrange -// const { wrapper } = setupMocks({}); - -// useMainStore().order.vehicle.vin = null; - -// // Act -// let arePagePrerequisitesValid = wrapper.vm.arePagePrerequisitesValid(); - -// //Assert -// expect(arePagePrerequisitesValid).toBe(false); -// }); -// }); // describe("navigation", () => { // test("forwardButtonAction should trigger navigateForward", async () => { // // Arrange From 14517035b1309a203708230f44ebc23a2d4be19e Mon Sep 17 00:00:00 2001 From: Katie Kroell Date: Tue, 25 Jul 2023 14:30:58 -0400 Subject: [PATCH 08/26] unit test WIP --- .../coverage-statement.spec.js | 28 ++++++++++++++++--- 1 file changed, 24 insertions(+), 4 deletions(-) diff --git a/src/layouts/coverage-statement/coverage-statement.spec.js b/src/layouts/coverage-statement/coverage-statement.spec.js index 9f81d22a..f93cc922 100644 --- a/src/layouts/coverage-statement/coverage-statement.spec.js +++ b/src/layouts/coverage-statement/coverage-statement.spec.js @@ -479,22 +479,42 @@ describe('coverageStatement.vue', () => { expect(wrapper.vm.coverageUnverified).toBeFalsy(); }); }); + describe('Navigation', () => { + test('Back button clicked triggers navigation', () => { + // Arrange + const wrapper = shallowMount(coverageStatement, getMountOptions({ + router: { + navigate: jest.fn() + }, + })); + mountOptions.mixins = [mockMixin]; + + // Act + wrapper.vm.backButtonAction(); + + // Assert + expect(wrapper.vm.$router.navigate).toHaveBeenCalled(); + expect(wrapper.vm.$router.navigate) + .toHaveBeenCalledWith(navigationScenarios.CLICKED_BACK, undefined); + }); + }); }) - +//const testWidget = getRandomString(50, 100); const mockMixin = { methods: { getCmsContent: jest.fn().mockImplementation(() => ''), setCmsContent: jest.fn(), + getBodyTextFromCms: jest.fn().mockImplementation(() => ''), }, }; function setupMocks() { const mountOptions = getMountOptions({ - // router: { - // navigate: jest.fn() - // }, + router: { + navigate: jest.fn() + }, // global: { // plugins: [createTestingPinia()] From 3026d929fb45a3c8775d682c4905014d1ac24816 Mon Sep 17 00:00:00 2001 From: Katie Kroell Date: Tue, 25 Jul 2023 16:58:37 -0400 Subject: [PATCH 09/26] add null checks --- src/layouts/coverage-statement/coverage-statement.vue | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/src/layouts/coverage-statement/coverage-statement.vue b/src/layouts/coverage-statement/coverage-statement.vue index 7d8b6ec7..459ac1fe 100644 --- a/src/layouts/coverage-statement/coverage-statement.vue +++ b/src/layouts/coverage-statement/coverage-statement.vue @@ -198,7 +198,7 @@ export default { }, verifiedITACAlertBody() { return this.getCmsContent('VerifiedITACAlert', - 'BodyText').replaceAll('{custom:costSavings}', this.costSavings); + 'BodyText')?.replaceAll('{custom:costSavings}', this.costSavings); }, coverageStatementSubHeader() { const subheader = this.getSubheaderTextFromCms('SiteSubHeaderWidget'); @@ -217,17 +217,17 @@ export default { return header; }, nextStepsBody() { - const body = this.getBodyTextFromCms('NextStepsWidget').replaceAll('{custom:damage}', this.damageText); + const body = this.getBodyTextFromCms('NextStepsWidget')?.replaceAll('{custom:damage}', this.damageText); return body; }, continueWithSchedulingBodyText() { return this.getCmsContent('continueWithSchedulingCopy', 'BodyText'); }, unverifiedADASNextStepsBodyText() { - return this.getCmsContent('UnverifiedADASNextStepsWidget', 'BodyText').replaceAll('{custom:damage}', this.damageText); + return this.getCmsContent('UnverifiedADASNextStepsWidget', 'BodyText')?.replaceAll('{custom:damage}', this.damageText); }, unverifiedNonADASNextStepsBodyText() { - return this.getCmsContent('UnverifiedNonADASNextStepsWidget', 'BodyText').replaceAll('{custom:damage}', this.damageText); + return this.getCmsContent('UnverifiedNonADASNextStepsWidget', 'BodyText')?.replaceAll('{custom:damage}', this.damageText); }, unverifiedNonADASRepairBodyText() { return this.getCmsContent('UnverifiedNonADASRepairWidget', 'BodyText'); From 6e92f7b8a150afbaf87ddd5538b741cd516e1179 Mon Sep 17 00:00:00 2001 From: Katie Kroell Date: Tue, 25 Jul 2023 16:58:48 -0400 Subject: [PATCH 10/26] unit test updates --- .../coverage-statement.spec.js | 19 +++++++++++++------ 1 file changed, 13 insertions(+), 6 deletions(-) diff --git a/src/layouts/coverage-statement/coverage-statement.spec.js b/src/layouts/coverage-statement/coverage-statement.spec.js index f93cc922..0b1af437 100644 --- a/src/layouts/coverage-statement/coverage-statement.spec.js +++ b/src/layouts/coverage-statement/coverage-statement.spec.js @@ -11,7 +11,7 @@ import { settleAllPromises } from '@/helpers/layout-helper'; import { fetchCmsContentForPage } from '@/helpers/cms-content-helper'; import { render } from '@testing-library/vue'; import { getRandomString, getRandomInt, getRandomBoolean } from '@/helpers/data-generation.js'; - +import vehicleQuestionsMixin from "@/mixins/vehicle-questions-mixin"; // Mock fetchCmsContentForPage // jest.mock('@/helpers/cms-content-helper', () => ({ @@ -486,17 +486,22 @@ describe('coverageStatement.vue', () => { router: { navigate: jest.fn() }, + route: { + query: { + issPage: 'coverage-statement' + } + } })); - mountOptions.mixins = [mockMixin]; // Act - wrapper.vm.backButtonAction(); + wrapper.vm.navigateBack(); // Assert expect(wrapper.vm.$router.navigate).toHaveBeenCalled(); - expect(wrapper.vm.$router.navigate) - .toHaveBeenCalledWith(navigationScenarios.CLICKED_BACK, undefined); + //expect(wrapper.vm.$router.navigate) + //.toHaveBeenCalledWith(navigationScenarios.CLICKED_BACK, undefined); }); + //test('If Unverified scenario, forwardButtonAction triggers ') }); }) @@ -505,7 +510,7 @@ const mockMixin = { methods: { getCmsContent: jest.fn().mockImplementation(() => ''), setCmsContent: jest.fn(), - getBodyTextFromCms: jest.fn().mockImplementation(() => ''), + navigateBack: jest.fn() }, }; @@ -516,6 +521,7 @@ function setupMocks() navigate: jest.fn() }, + // global: { // plugins: [createTestingPinia()] // } @@ -528,6 +534,7 @@ function setupMocks() const wrapper = shallowMount(coverageStatement, mountOptions); wrapper.vm.$refs.siteFooter.updateButtonText = jest.fn(); + return { wrapper }; } From f44f81f54f8f08e60c00f2baddf15193dd7d6911 Mon Sep 17 00:00:00 2001 From: Katie Kroell Date: Wed, 26 Jul 2023 15:47:34 -0400 Subject: [PATCH 11/26] replace missing routes --- src/router/router-constants/routing-table.js | 15 ++++++++++++++- 1 file changed, 14 insertions(+), 1 deletion(-) diff --git a/src/router/router-constants/routing-table.js b/src/router/router-constants/routing-table.js index 09e34b01..5e0252d9 100644 --- a/src/router/router-constants/routing-table.js +++ b/src/router/router-constants/routing-table.js @@ -429,7 +429,20 @@ const routingTable = function (store) { { scenario: navigationScenarios.CLICKED_FORWARD, destinationIssPageValue: issPageValues.PROVIDER_PREFERENCE - } + }, + { + scenario: navigationScenarios.CLICKED_FORWARD_WITH_SAFELITE, + destinationIssPageValue: issPageValues.SERVICE_LOCATION + }, + { + scenario: navigationScenarios.CLICKED_FORWARD_WITH_TPA_ENABLED, + destinationIssPageValue: issPageValues.TPA_SEARCH + }, + { + scenario: navigationScenarios.CLICKED_FORWARD_WITH_TPA_DISABLED, + destinationIssPageValue: issPageValues.BAILOUT_PAGE + }, + ] }, { From 187cf5243c114d6a573bfb2eeb9d166b5d9b73e6 Mon Sep 17 00:00:00 2001 From: Katie Kroell Date: Wed, 26 Jul 2023 15:47:59 -0400 Subject: [PATCH 12/26] updates to routes --- .../coverage-statement/coverage-statement.vue | 12 +++++++----- 1 file changed, 7 insertions(+), 5 deletions(-) diff --git a/src/layouts/coverage-statement/coverage-statement.vue b/src/layouts/coverage-statement/coverage-statement.vue index 459ac1fe..2419819e 100644 --- a/src/layouts/coverage-statement/coverage-statement.vue +++ b/src/layouts/coverage-statement/coverage-statement.vue @@ -19,11 +19,13 @@
+ v-html="explanatoryText" + ref="explanatoryText">
+ v-html="secondaryText" + ref="secondaryText">
Date: Wed, 26 Jul 2023 15:48:22 -0400 Subject: [PATCH 13/26] navigation unit tests --- .../coverage-statement.spec.js | 246 ++++++++++++++++-- 1 file changed, 226 insertions(+), 20 deletions(-) diff --git a/src/layouts/coverage-statement/coverage-statement.spec.js b/src/layouts/coverage-statement/coverage-statement.spec.js index 0b1af437..04bc28a2 100644 --- a/src/layouts/coverage-statement/coverage-statement.spec.js +++ b/src/layouts/coverage-statement/coverage-statement.spec.js @@ -7,11 +7,7 @@ import { getMountOptions } from '@/helpers/unit-test-helper.js'; import { createTestingPinia } from '@pinia/testing'; import { navigationScenarios } from '@/router/router-constants/navigation-scenarios.js'; import { useMainStore } from '@/store/index.js'; -import { settleAllPromises } from '@/helpers/layout-helper'; -import { fetchCmsContentForPage } from '@/helpers/cms-content-helper'; -import { render } from '@testing-library/vue'; -import { getRandomString, getRandomInt, getRandomBoolean } from '@/helpers/data-generation.js'; -import vehicleQuestionsMixin from "@/mixins/vehicle-questions-mixin"; +import { getRandomString, getRandomInt } from '@/helpers/data-generation.js'; // Mock fetchCmsContentForPage // jest.mock('@/helpers/cms-content-helper', () => ({ @@ -62,6 +58,36 @@ describe('coverageStatement.vue', () => { // Assert expect(siteHeader.exists()).toBe(true); }), + test('Should render site subheader', () => { + // Arrange + const { wrapper } = setupMocks({}); + + // Act + const subheader = wrapper.find({ ref: 'siteSubHeader' }); + + // Assert + expect(subheader.exists()).toBe(true); + }); + test('Should render explanatory text', () => { + // Arrange + const { wrapper } = setupMocks({}); + + // Act + const explanatoryText = wrapper.find({ ref: 'explanatoryText' }); + + // Assert + expect(explanatoryText.exists()).toBe(true); + }); + test('Should render secondary text', () => { + // Arrange + const { wrapper } = setupMocks({}); + + // Act + const secondaryText = wrapper.find({ ref: 'secondaryText' }); + + // Assert + expect(secondaryText.exists()).toBe(true); + }); test('Should render site footer', () => { // Arrange const { wrapper } = setupMocks({}); @@ -76,7 +102,12 @@ describe('coverageStatement.vue', () => { describe('Verified ITAC scenario', () => { test('If coverage verified, not No Comp, and deductible > service price, verifiedITAC returns true', () => { // Arrange - const mountOptions = getMountOptions(); + const mountOptions = getMountOptions({ + methods: { + getCmsContent: jest.fn().mockImplementation(() => ''), + setCmsContent: jest.fn(), + }, + }); const sellingPrice = getRandomInt(100, 500); const deductible = sellingPrice + 1; const mainInitialState = { @@ -480,37 +511,212 @@ describe('coverageStatement.vue', () => { }); }); describe('Navigation', () => { - test('Back button clicked triggers navigation', () => { + test('If Unverified, navigate forward with CLICKED_FORWARD scenario', () => { // Arrange + const mountOptions = getMountOptions(); + const mainInitialState = { + order: { + damage: { + isRepair: true + }, + } + }; + mountOptions.global = { + plugins: [createTestingPinia({ + initialState: { + main: mainInitialState + } + })] + } + + // Act const wrapper = shallowMount(coverageStatement, getMountOptions({ router: { navigate: jest.fn() }, - route: { - query: { - issPage: 'coverage-statement' - } - } })); - + wrapper.setData({ + isVerified: false, + }) + // Act - wrapper.vm.navigateBack(); + wrapper.vm.forwardButtonAction(); // Assert - expect(wrapper.vm.$router.navigate).toHaveBeenCalled(); - //expect(wrapper.vm.$router.navigate) - //.toHaveBeenCalledWith(navigationScenarios.CLICKED_BACK, undefined); + expect(wrapper.vm.$router.navigate) + .toHaveBeenCalledWith(navigationScenarios.CLICKED_FORWARD, undefined); + }); + test('If Verified Deductible, navigate forward with CLICKED_FORWARD scenario', () => { + // Arrange + const mountOptions = getMountOptions(); + const sellingPrice = getRandomInt(100, 500); + const deductible = sellingPrice - 1; + const mainInitialState = { + order: { + damage: { + isRepair: true + }, + policy: { + noCoverage: false, + deductible: { + repair: deductible, + } + } + } + }; + mountOptions.global = { + plugins: [createTestingPinia({ + initialState: { + main: mainInitialState + } + })] + } + + const wrapper = shallowMount(coverageStatement, getMountOptions({ + router: { + navigate: jest.fn() + }, + })); + wrapper.setData({ + isVerified: true, + availableLineItems: [ + { + sellingPrice: sellingPrice, + kitPrice: 0, + laborAmount: 0, + } + ] + }); + + // Act + wrapper.vm.forwardButtonAction(); + + // Assert + //expect(wrapper.vm.verifiedDeductible).toBeTruthy(); + expect(wrapper.vm.$router.navigate) + .toHaveBeenCalledWith(navigationScenarios.CLICKED_FORWARD, undefined); + }); + test.only('If Verified ITAC and selected Safelite, navigate forward with CLICKED_FORWARD_WITH_SAFELITE scenario', () => { + // Arrange + const mountOptions = getMountOptions(); + const sellingPrice = getRandomInt(100, 500); + const deductible = sellingPrice + 1; + const mainInitialState = { + order: { + damage: { + isRepair: true + }, + policy: { + noCoverage: false, + deductible: { + repair: deductible, + } + } + }, + }; + mountOptions.global = { + plugins: [createTestingPinia({ + initialState: { + main: mainInitialState + } + })] + } + + const wrapper = shallowMount(coverageStatement, getMountOptions({ + router: { + navigate: jest.fn() + }, + })); + wrapper.setData({ + isVerified: true, + availableLineItems: [ + { + sellingPrice: sellingPrice, + kitPrice: 0, + laborAmount: 0, + } + ], + selectedProvider: 'Safelite' + }); + wrapper.vm.$refs.siteFooter.updateButtonText = jest.fn(); + useMainStore().order.policy.noCoverage = false; + + // Act + wrapper.vm.forwardButtonAction(); + + // Assert + console.log(wrapper.vm.coverageVerified); + console.log(wrapper.vm.verifiedNoComp); + console.log(wrapper.vm.vehicleDeductible); + console.log(sellingPrice); + console.log(wrapper.vm.verifiedITAC); + //expect(wrapper.vm.verifiedITAC).toBeTruthy(); + // expect(wrapper.vm.$router.navigate) + // .toHaveBeenCalledWith(navigationScenarios.CLICKED_FORWARD_WITH_SAFELITE, undefined); + }); + test('If Verified ITAC, selected other shop, and TPA enabled, navigate forward with CLICKED_FORWARD_WITH_TPA_ENABLED scenario', () => { + // Arrange + const mountOptions = getMountOptions(); + const sellingPrice = getRandomInt(100, 500); + const deductible = sellingPrice + 100; + const mainInitialState = { + order: { + damage: { + isRepair: true + }, + policy: { + noCoverage: false, + deductible: { + repair: deductible, + } + } + }, + issConfig: { + enableTPAFlow: true + } + }; + mountOptions.global = { + plugins: [createTestingPinia({ + initialState: { + main: mainInitialState + } + })] + } + + const wrapper = shallowMount(coverageStatement, getMountOptions({ + router: { + navigate: jest.fn() + }, + })); + wrapper.setData({ + isVerified: true, + availableLineItems: [ + { + sellingPrice: sellingPrice, + kitPrice: 0, + laborAmount: 0, + } + ], + selectedProvider: 'Other' + }); + wrapper.vm.$refs.siteFooter.updateButtonText = jest.fn(); + + // Act + wrapper.vm.forwardButtonAction(); + + // Assert + //expect(wrapper.vm.verifiedITAC).toBeTruthy(); + expect(wrapper.vm.$router.navigate) + .toHaveBeenCalledWith(navigationScenarios.CLICKED_FORWARD_WITH_SAFELITE, undefined); }); - //test('If Unverified scenario, forwardButtonAction triggers ') }); }) -//const testWidget = getRandomString(50, 100); + const mockMixin = { methods: { getCmsContent: jest.fn().mockImplementation(() => ''), setCmsContent: jest.fn(), - navigateBack: jest.fn() }, }; From fde1e3c6a5b5390291f3778386bc374f1eb1c9f3 Mon Sep 17 00:00:00 2001 From: Katie Kroell Date: Wed, 26 Jul 2023 16:47:35 -0400 Subject: [PATCH 14/26] all tests passing --- .../coverage-statement/coverage-statement.spec.js | 13 +++++++------ 1 file changed, 7 insertions(+), 6 deletions(-) diff --git a/src/layouts/coverage-statement/coverage-statement.spec.js b/src/layouts/coverage-statement/coverage-statement.spec.js index 04bc28a2..9b133a2e 100644 --- a/src/layouts/coverage-statement/coverage-statement.spec.js +++ b/src/layouts/coverage-statement/coverage-statement.spec.js @@ -596,7 +596,7 @@ describe('coverageStatement.vue', () => { expect(wrapper.vm.$router.navigate) .toHaveBeenCalledWith(navigationScenarios.CLICKED_FORWARD, undefined); }); - test.only('If Verified ITAC and selected Safelite, navigate forward with CLICKED_FORWARD_WITH_SAFELITE scenario', () => { + test('If Verified ITAC and selected Safelite, navigate forward with CLICKED_FORWARD_WITH_SAFELITE scenario', () => { // Arrange const mountOptions = getMountOptions(); const sellingPrice = getRandomInt(100, 500); @@ -665,7 +665,7 @@ describe('coverageStatement.vue', () => { isRepair: true }, policy: { - noCoverage: false, + //noCoverage: false, deductible: { repair: deductible, } @@ -700,14 +700,15 @@ describe('coverageStatement.vue', () => { selectedProvider: 'Other' }); wrapper.vm.$refs.siteFooter.updateButtonText = jest.fn(); - + useMainStore().order.policy.noCoverage = false; + // Act wrapper.vm.forwardButtonAction(); // Assert - //expect(wrapper.vm.verifiedITAC).toBeTruthy(); - expect(wrapper.vm.$router.navigate) - .toHaveBeenCalledWith(navigationScenarios.CLICKED_FORWARD_WITH_SAFELITE, undefined); + expect(wrapper.vm.verifiedITAC).toBeTruthy(); + // expect(wrapper.vm.$router.navigate) + // .toHaveBeenCalledWith(navigationScenarios.CLICKED_FORWARD_WITH_SAFELITE, undefined); }); }); From 85c29e04be6efca89ff4e339b8a6ccccb379a05d Mon Sep 17 00:00:00 2001 From: Katie Kroell Date: Thu, 27 Jul 2023 16:21:53 -0400 Subject: [PATCH 15/26] add bailout routing --- src/router/router-constants/routing-table.js | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/src/router/router-constants/routing-table.js b/src/router/router-constants/routing-table.js index 5e0252d9..138eaaa7 100644 --- a/src/router/router-constants/routing-table.js +++ b/src/router/router-constants/routing-table.js @@ -442,6 +442,10 @@ const routingTable = function (store) { scenario: navigationScenarios.CLICKED_FORWARD_WITH_TPA_DISABLED, destinationIssPageValue: issPageValues.BAILOUT_PAGE }, + { + scenario: navigationScenarios.CLICKED_FORWARD_WITH_INVALID_STATE, + destinationIssPageValue: issPageValues.BAILOUT_PAGE + }, ] }, From 7d21d3b697b40ef32dce9255e8f7a4094d408f54 Mon Sep 17 00:00:00 2001 From: Katie Kroell Date: Thu, 27 Jul 2023 16:22:14 -0400 Subject: [PATCH 16/26] updates to navigation --- .../coverage-statement/coverage-statement.vue | 16 +++++++++++----- 1 file changed, 11 insertions(+), 5 deletions(-) diff --git a/src/layouts/coverage-statement/coverage-statement.vue b/src/layouts/coverage-statement/coverage-statement.vue index 2419819e..ee137a54 100644 --- a/src/layouts/coverage-statement/coverage-statement.vue +++ b/src/layouts/coverage-statement/coverage-statement.vue @@ -114,6 +114,7 @@ import { useMainStore } from '@/store/index.js'; import vehicleQuestionsMixin from '@/mixins/vehicle-questions-mixin.js'; import globalRules from '@/constants/global-rules.js'; import baseFormMixin from '@/mixins/base-form-mixin.js'; +import { navigationScenarios } from '@/router/router-constants/navigation-scenarios.js'; export default { name: 'coverage-statement', @@ -125,7 +126,8 @@ export default { recalModal, alert, contentGroupModal, - buttonQuestion + buttonQuestion, + navigationScenarios }, mixins: [baseFormMixin, vehicleQuestionsMixin], async beforeRouteEnter(to, from, next) { @@ -350,20 +352,24 @@ export default { }, async navigateForward() { if (this.coverageUnverified || this.verifiedDeductible) { - this.$router.navigate(this.navigationScenarios.CLICKED_FORWARD, + this.$router.navigate(navigationScenarios.CLICKED_FORWARD, this.$route); } else if (this.verifiedITAC || this.verifiedNoComp) { if (this.selectedProvider === 'Safelite') { - this.$router.navigate(this.navigationScenarios.CLICKED_FORWARD_WITH_SAFELITE, + this.$router.navigate(navigationScenarios.CLICKED_FORWARD_WITH_SAFELITE, this.$route); } else if (this.selectedProvider === 'Other' && this.mainStore.issConfig.enableTPAFlow) { - this.$router.navigate(this.navigationScenarios.CLICKED_FORWARD_WITH_TPA_ENABLED, + this.$router.navigate(navigationScenarios.CLICKED_FORWARD_WITH_TPA_ENABLED, this.$route); } else { - this.$router.navigate(this.navigationScenarios.CLICKED_FORWARD_WITH_TPA_DISABLED, + this.$router.navigate(navigationScenarios.CLICKED_FORWARD_WITH_TPA_DISABLED, this.$route); } } + else { + this.$router.navigate(navigationScenarios.CLICKED_FORWARD_WITH_INVALID_STATE, + this.$route); + } }, openModalAction(modalName) { this.$refs[modalName.args].openModal(); From 8448ae3da29b7f26c7aa3e57a64c42ae352839b4 Mon Sep 17 00:00:00 2001 From: Katie Kroell Date: Thu, 27 Jul 2023 16:22:25 -0400 Subject: [PATCH 17/26] unit tests --- .../coverage-statement.spec.js | 343 +++++++++++++++--- 1 file changed, 297 insertions(+), 46 deletions(-) diff --git a/src/layouts/coverage-statement/coverage-statement.spec.js b/src/layouts/coverage-statement/coverage-statement.spec.js index 9b133a2e..71a864d8 100644 --- a/src/layouts/coverage-statement/coverage-statement.spec.js +++ b/src/layouts/coverage-statement/coverage-statement.spec.js @@ -2,7 +2,7 @@ import coverageStatement from '@/layouts/coverage-statement/coverage-statement'; // Supporting Files -import { shallowMount } from '@vue/test-utils'; +import { mount, shallowMount } from '@vue/test-utils'; import { getMountOptions } from '@/helpers/unit-test-helper.js'; import { createTestingPinia } from '@pinia/testing'; import { navigationScenarios } from '@/router/router-constants/navigation-scenarios.js'; @@ -513,7 +513,19 @@ describe('coverageStatement.vue', () => { describe('Navigation', () => { test('If Unverified, navigate forward with CLICKED_FORWARD scenario', () => { // Arrange - const mountOptions = getMountOptions(); + const footer = { + render: () => {}, + methods: { + updateButtonText: jest.fn() + } + } + + const mountOptions = { + router: { + navigate: jest.fn() + }, + mixins: [mockMixin] + }; const mainInitialState = { order: { damage: { @@ -526,15 +538,23 @@ describe('coverageStatement.vue', () => { initialState: { main: mainInitialState } - })] + })], + stubs: { + 'siteFooter': footer, + siteHeader: true, + recalModal: true, + contentGroupModal: true, + alert: true, + }, + mocks: { + $router: { + navigate: jest.fn() + } + } } // Act - const wrapper = shallowMount(coverageStatement, getMountOptions({ - router: { - navigate: jest.fn() - }, - })); + const wrapper = mount(coverageStatement, mountOptions); wrapper.setData({ isVerified: false, }) @@ -548,7 +568,20 @@ describe('coverageStatement.vue', () => { }); test('If Verified Deductible, navigate forward with CLICKED_FORWARD scenario', () => { // Arrange - const mountOptions = getMountOptions(); + const footer = { + render: () => {}, + methods: { + updateButtonText: jest.fn() + } + } + + const mountOptions = { + router: { + navigate: jest.fn() + }, + mixins: [mockMixin] + }; + const sellingPrice = getRandomInt(100, 500); const deductible = sellingPrice - 1; const mainInitialState = { @@ -569,14 +602,22 @@ describe('coverageStatement.vue', () => { initialState: { main: mainInitialState } - })] + })], + stubs: { + 'siteFooter': footer, + siteHeader: true, + recalModal: true, + contentGroupModal: true, + alert: true, + }, + mocks: { + $router: { + navigate: jest.fn() + } + } } - const wrapper = shallowMount(coverageStatement, getMountOptions({ - router: { - navigate: jest.fn() - }, - })); + const wrapper = mount(coverageStatement, mountOptions); wrapper.setData({ isVerified: true, availableLineItems: [ @@ -592,13 +633,24 @@ describe('coverageStatement.vue', () => { wrapper.vm.forwardButtonAction(); // Assert - //expect(wrapper.vm.verifiedDeductible).toBeTruthy(); expect(wrapper.vm.$router.navigate) .toHaveBeenCalledWith(navigationScenarios.CLICKED_FORWARD, undefined); }); test('If Verified ITAC and selected Safelite, navigate forward with CLICKED_FORWARD_WITH_SAFELITE scenario', () => { // Arrange - const mountOptions = getMountOptions(); + const footer = { + render: () => {}, + methods: { + updateButtonText: jest.fn() + } + } + + const mountOptions = { + router: { + navigate: jest.fn() + }, + mixins: [mockMixin] + }; const sellingPrice = getRandomInt(100, 500); const deductible = sellingPrice + 1; const mainInitialState = { @@ -613,20 +665,29 @@ describe('coverageStatement.vue', () => { } } }, + }; mountOptions.global = { plugins: [createTestingPinia({ initialState: { main: mainInitialState } - })] + })], + stubs: { + 'siteFooter': footer, + siteHeader: true, + recalModal: true, + contentGroupModal: true, + alert: true, + }, + mocks: { + $router: { + navigate: jest.fn() + } + } } - const wrapper = shallowMount(coverageStatement, getMountOptions({ - router: { - navigate: jest.fn() - }, - })); + const wrapper = mount(coverageStatement, mountOptions); wrapper.setData({ isVerified: true, availableLineItems: [ @@ -638,34 +699,40 @@ describe('coverageStatement.vue', () => { ], selectedProvider: 'Safelite' }); - wrapper.vm.$refs.siteFooter.updateButtonText = jest.fn(); - useMainStore().order.policy.noCoverage = false; // Act wrapper.vm.forwardButtonAction(); // Assert - console.log(wrapper.vm.coverageVerified); - console.log(wrapper.vm.verifiedNoComp); - console.log(wrapper.vm.vehicleDeductible); - console.log(sellingPrice); - console.log(wrapper.vm.verifiedITAC); //expect(wrapper.vm.verifiedITAC).toBeTruthy(); - // expect(wrapper.vm.$router.navigate) - // .toHaveBeenCalledWith(navigationScenarios.CLICKED_FORWARD_WITH_SAFELITE, undefined); + expect(wrapper.vm.$router.navigate) + .toHaveBeenCalledWith(navigationScenarios.CLICKED_FORWARD_WITH_SAFELITE, undefined); }); test('If Verified ITAC, selected other shop, and TPA enabled, navigate forward with CLICKED_FORWARD_WITH_TPA_ENABLED scenario', () => { // Arrange - const mountOptions = getMountOptions(); + const footer = { + render: () => {}, + methods: { + updateButtonText: jest.fn() + } + } + + const mountOptions = { + router: { + navigate: jest.fn() + }, + mixins: [mockMixin] + }; + const sellingPrice = getRandomInt(100, 500); - const deductible = sellingPrice + 100; + const deductible = sellingPrice + 1; const mainInitialState = { order: { damage: { isRepair: true }, policy: { - //noCoverage: false, + noCoverage: false, deductible: { repair: deductible, } @@ -680,14 +747,22 @@ describe('coverageStatement.vue', () => { initialState: { main: mainInitialState } - })] + })], + stubs: { + 'siteFooter': footer, + siteHeader: true, + recalModal: true, + contentGroupModal: true, + alert: true, + }, + mocks: { + $router: { + navigate: jest.fn() + } + } } - const wrapper = shallowMount(coverageStatement, getMountOptions({ - router: { - navigate: jest.fn() - }, - })); + const wrapper = mount(coverageStatement, mountOptions); wrapper.setData({ isVerified: true, availableLineItems: [ @@ -699,18 +774,194 @@ describe('coverageStatement.vue', () => { ], selectedProvider: 'Other' }); - wrapper.vm.$refs.siteFooter.updateButtonText = jest.fn(); - useMainStore().order.policy.noCoverage = false; + // Act wrapper.vm.forwardButtonAction(); // Assert - expect(wrapper.vm.verifiedITAC).toBeTruthy(); - // expect(wrapper.vm.$router.navigate) - // .toHaveBeenCalledWith(navigationScenarios.CLICKED_FORWARD_WITH_SAFELITE, undefined); + //expect(wrapper.vm.verifiedITAC).toBeTruthy(); + expect(wrapper.vm.$router.navigate) + .toHaveBeenCalledWith(navigationScenarios.CLICKED_FORWARD_WITH_TPA_ENABLED, undefined); + }); + test('If Verified ITAC, selected other shop, and TPA disabled, navigate forward with CLICKED_FORWARD_WITH_TPA_DISABLED scenario', () => { + // Arrange + const footer = { + render: () => {}, + methods: { + updateButtonText: jest.fn() + } + } + + const mountOptions = { + router: { + navigate: jest.fn() + }, + mixins: [mockMixin] + }; + + const sellingPrice = getRandomInt(100, 500); + const deductible = sellingPrice + 1; + const mainInitialState = { + order: { + damage: { + isRepair: true + }, + policy: { + noCoverage: false, + deductible: { + repair: deductible, + } + } + }, + issConfig: { + enableTPAFlow: false + } + }; + mountOptions.global = { + plugins: [createTestingPinia({ + initialState: { + main: mainInitialState + } + })], + stubs: { + 'siteFooter': footer, + siteHeader: true, + recalModal: true, + contentGroupModal: true, + alert: true, + }, + mocks: { + $router: { + navigate: jest.fn() + } + } + } + + const wrapper = mount(coverageStatement, mountOptions); + wrapper.setData({ + isVerified: true, + availableLineItems: [ + { + sellingPrice: sellingPrice, + kitPrice: 0, + laborAmount: 0, + } + ], + selectedProvider: 'Other' + }); + + + // Act + wrapper.vm.forwardButtonAction(); + + // Assert + //expect(wrapper.vm.verifiedITAC).toBeTruthy(); + expect(wrapper.vm.$router.navigate) + .toHaveBeenCalledWith(navigationScenarios.CLICKED_FORWARD_WITH_TPA_DISABLED, undefined); + }); + test('If No Comp and selected Safelite, navigate forward with CLICKED_FORWARD scenario', () => { + // Arrange + const footer = { + render: () => {}, + methods: { + updateButtonText: jest.fn() + } + } + + const mountOptions = { + router: { + navigate: jest.fn() + }, + mixins: [mockMixin] + }; + + const sellingPrice = getRandomInt(100, 500); + const deductible = sellingPrice - 1; + const mainInitialState = { + order: { + damage: { + isRepair: true + }, + policy: { + noCoverage: true, + } + } + }; + mountOptions.global = { + plugins: [createTestingPinia({ + initialState: { + main: mainInitialState + } + })], + stubs: { + 'siteFooter': footer, + siteHeader: true, + recalModal: true, + contentGroupModal: true, + alert: true, + }, + mocks: { + $router: { + navigate: jest.fn() + } + } + } + + const wrapper = mount(coverageStatement, mountOptions); + wrapper.setData({ + isVerified: false, + selectedProvider: 'Safelite' + }); + + // Act + wrapper.vm.forwardButtonAction(); + + // Assert + //expect(wrapper.vm.verifiedNoComp).toBeTruthy(); + expect(wrapper.vm.$router.navigate) + .toHaveBeenCalledWith(navigationScenarios.CLICKED_FORWARD_WITH_SAFELITE, undefined); }); }); + // describe("claim registration api call", () => { + // it.only("claim registration not required => method not called", async () => { + // // Arrange + // const wrapper = setupMocks({}); + + // const store = useMainStore(); + // store.isClaimRegistrationRequired = false; + + // const to = { + // query: { issPage: getRandomString(4,10) } + // }; + // const next = jest.fn(); + + // // SUT + // coverageStatement.beforeRouteEnter.call(wrapper.vm, to, undefined, next) + + // // Assert + // expect(store.registerClaim).not.toHaveBeenCalled(); + // }); + + // it("claim registration required => register claim method called", async () => { + // // Arrange + // const wrapper = setupMocks({}); + + // const store = useMainStore(); + // store.isClaimRegistrationRequired = true; + + // const to = { + // query: { issPage: getRandomString(4,10) } + // }; + // const next = jest.fn(); + + // // SUT + // coverageStatement.beforeRouteEnter.call(wrapper.vm, to, undefined, next) + + // // Assert + // expect(store.registerClaim).toHaveBeenCalled(); + // }); + // }) }) From 0c7ebd4995cf58b5355e935ab244668645342b18 Mon Sep 17 00:00:00 2001 From: Katie Kroell Date: Thu, 27 Jul 2023 17:05:02 -0400 Subject: [PATCH 18/26] fix to navigation scenario names --- src/layouts/coverage-statement/coverage-statement.vue | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/layouts/coverage-statement/coverage-statement.vue b/src/layouts/coverage-statement/coverage-statement.vue index 5ac76ace..c98f3e1a 100644 --- a/src/layouts/coverage-statement/coverage-statement.vue +++ b/src/layouts/coverage-statement/coverage-statement.vue @@ -356,10 +356,10 @@ export default { this.$router.navigate(navigationScenarios.CLICKED_FORWARD_WITH_SAFELITE, this.$route); } else if (store.issConfig.enableTPAFlow) { - this.$router.navigate(navigationScenarios.CLICKED_FORWARD_WITH_THIRD_PARTY, + this.$router.navigate(navigationScenarios.CLICKED_FORWARD_WITH_TPA_DISABLED, this.$route); } else { - this.$router.navigate(navigationScenarios.CLICKED_FORWARD_WITH_BAILOUT, + this.$router.navigate(navigationScenarios.CLICKED_FORWARD_WITH_TPA_DISABLED, this.$route); } } From d675378cdf59ddeea8aeff7a063b7f9a184ddde7 Mon Sep 17 00:00:00 2001 From: Katie Kroell Date: Thu, 27 Jul 2023 17:08:08 -0400 Subject: [PATCH 19/26] add missing nav scenario --- src/router/router-constants/navigation-scenarios.js | 1 + 1 file changed, 1 insertion(+) diff --git a/src/router/router-constants/navigation-scenarios.js b/src/router/router-constants/navigation-scenarios.js index 4b749c5d..36f5c88e 100644 --- a/src/router/router-constants/navigation-scenarios.js +++ b/src/router/router-constants/navigation-scenarios.js @@ -54,6 +54,7 @@ const navigationScenarios = { // Coverage Statement CLICKED_BACK_WITH_REPAIR: 'CLICKED_BACK_WITH_REPAIR', + CLICKED_FORWARD_WITH_INVALID_STATE: 'CLICKED_FORWARD_WITH_INVALID_STATE', // Provider Preference CLICKED_FORWARD_WITH_SAFELITE: 'CLICKED_FORWARD_WITH_SAFELITE', From ca58d8708351e3d191d74159340460c528f1be19 Mon Sep 17 00:00:00 2001 From: Katie Kroell Date: Thu, 27 Jul 2023 17:08:27 -0400 Subject: [PATCH 20/26] unit test WIP --- .../coverage-statement/coverage-statement.spec.js | 10 +++++++++- 1 file changed, 9 insertions(+), 1 deletion(-) diff --git a/src/layouts/coverage-statement/coverage-statement.spec.js b/src/layouts/coverage-statement/coverage-statement.spec.js index 1cd68288..de0d2ba7 100644 --- a/src/layouts/coverage-statement/coverage-statement.spec.js +++ b/src/layouts/coverage-statement/coverage-statement.spec.js @@ -23,7 +23,7 @@ import { getRandomString, getRandomInt } from '@/helpers/data-generation.js'; describe('coverageStatement.vue', () => { describe("method arePagePrerequisitesValid...", () => { - test("Should return true for valid page requisites if vin exists", () => { + test.only("Should return true for valid page requisites if vin exists", () => { // Arrange const { wrapper } = setupMocks({}); useMainStore().order.vehicle.vin = getRandomString(5,20); @@ -519,6 +519,13 @@ describe('coverageStatement.vue', () => { updateButtonText: jest.fn() } } + const loadingModal = { + render: () => {}, + methods: { + showModal: jest.fn(), + hideModal: jest.fn() + } + } const mountOptions = { router: { @@ -545,6 +552,7 @@ describe('coverageStatement.vue', () => { recalModal: true, contentGroupModal: true, alert: true, + 'loadingModal': loadingModal }, mocks: { $router: { From 73044bac7a115ebae125b06a741d52d662e64a3f Mon Sep 17 00:00:00 2001 From: Katie Kroell Date: Fri, 28 Jul 2023 15:39:40 -0400 Subject: [PATCH 21/26] sync up with most recent changes --- .../coverage-statement/coverage-statement.vue | 47 +++++++------------ 1 file changed, 16 insertions(+), 31 deletions(-) diff --git a/src/layouts/coverage-statement/coverage-statement.vue b/src/layouts/coverage-statement/coverage-statement.vue index c98f3e1a..5d8965b7 100644 --- a/src/layouts/coverage-statement/coverage-statement.vue +++ b/src/layouts/coverage-statement/coverage-statement.vue @@ -176,9 +176,6 @@ export default { }, data() { return { - // isVerified: useMainStore().order.payment.insuranceCoverage.isVerified, - // supportingItems: [], - // pricedGlassParts: [], availableLineItems: [], selectedProvider: '', deductibleText: 'Your deductible is:', @@ -203,27 +200,19 @@ export default { 'BodyText')?.replaceAll('{custom:costSavings}', this.costSavings); }, coverageStatementSubHeader() { - const subheader = this.getSubheaderTextFromCms('SiteSubHeaderWidget'); - return subheader; + return this.getSubheaderTextFromCms('SiteSubHeaderWidget'); }, secondaryText() { - const secondaryText = this.getSecondaryTextFromCms('SiteSubHeaderWidget'); - return secondaryText; + return this.getSecondaryTextFromCms('SiteSubHeaderWidget'); }, explanatoryText() { - const explanatoryText = this.getExplantoryTextFromCms('ExplanatoryTextWidget'); - return explanatoryText; + return this.getExplantoryTextFromCms('ExplanatoryTextWidget'); }, nextStepsHeader() { - const header = this.getHeaderTextFromCms('NextStepsWidget'); - return header; + return this.getHeaderTextFromCms('NextStepsWidget'); }, nextStepsBody() { - const body = this.getBodyTextFromCms('NextStepsWidget')?.replaceAll('{custom:damage}', this.damageText); - return body; - }, - continueWithSchedulingBodyText() { - return this.getCmsContent('continueWithSchedulingCopy', 'BodyText'); + return this.getBodyTextFromCms('NextStepsWidget')?.replaceAll('{custom:damage}', this.damageText); }, unverifiedADASNextStepsBodyText() { return this.getCmsContent('UnverifiedADASNextStepsWidget', 'BodyText')?.replaceAll('{custom:damage}', this.damageText); @@ -239,12 +228,12 @@ export default { return damageString === 'match' ? '' : damageString; }, vehicleDeductible() { - if (this.mainStore.order.damage.isRepair) { - const repairDeductible = this.mainStore.order.policy.deductible.repair; + if (useMainStore().order.damage.isRepair) { + const repairDeductible = useMainStore().order.policy.deductible.repair; return repairDeductible; } - const replaceDeductible = this.mainStore.order.policy.deductible.replace; + const replaceDeductible = useMainStore().order.policy.deductible.replace; return replaceDeductible; }, formattedDeductible() { @@ -260,7 +249,7 @@ export default { return useMainStore().payment.insuranceCoverage.isVerified; }, verifiedNoComp() { - return this.policyLookupSuccessful ? store.order.policy.noCoverage : false; + return this.policyLookupSuccessful ? useMainStore().order.policy.noCoverage : false; }, verifiedITAC() { return this.policyLookupSuccessful @@ -271,7 +260,7 @@ export default { return !this.verifiedNoComp && this.totalServicePrice >= this.vehicleDeductible; }, verifiedDeductible() { - return this.isClaimRegistrationRequired + return useMainStore().isClaimRegistrationRequired ? this.registerClaimSuccessful && this.coveredAndServicePriceAboveOrEqualDeductible : this.policyLookupSuccessful && this.coveredAndServicePriceAboveOrEqualDeductible; }, @@ -279,11 +268,11 @@ export default { return !this.verifiedDeductible && !this.verifiedITAC && !this.verifiedNoComp; }, isADAS() { - const parts = store.order.lineItems.glassParts; + const parts = useMainStore().order.lineItems.glassParts; return parts != null && parts.find((part) => part.requiresRecalibration); }, isRepair() { - return this.mainStore.order.damage.isRepair; + return useMainStore().order.damage.isRepair; }, totalServicePrice() { let total = 0; @@ -339,10 +328,7 @@ export default { }, methods: { arePagePrerequisitesValid() { - if (useMainStore().vehicle.vin) { - return true; - } - return false; + return !!useMainStore().vehicle.vin; }, async forwardButtonAction() { return this.navigateForward(); @@ -355,8 +341,8 @@ export default { if (this.selectedProvider === 'Safelite') { this.$router.navigate(navigationScenarios.CLICKED_FORWARD_WITH_SAFELITE, this.$route); - } else if (store.issConfig.enableTPAFlow) { - this.$router.navigate(navigationScenarios.CLICKED_FORWARD_WITH_TPA_DISABLED, + } else if (useMainStore().issConfig.enableTPAFlow) { + this.$router.navigate(navigationScenarios.CLICKED_FORWARD_WITH_TPA_ENABLED, this.$route); } else { this.$router.navigate(navigationScenarios.CLICKED_FORWARD_WITH_TPA_DISABLED, @@ -428,8 +414,7 @@ export default { return `$${formattedPriceFloat}`; }, getITACCostSavings(vehicleDeductible, totalServicePrice) { - const savings = vehicleDeductible - totalServicePrice; - return savings; + return vehicleDeductible - totalServicePrice; } } }; From 17876c64160cf801fdaf7953faa5b7ac2c7d075c Mon Sep 17 00:00:00 2001 From: Katie Kroell Date: Fri, 28 Jul 2023 15:40:06 -0400 Subject: [PATCH 22/26] all tests passing but claim reg call --- .../coverage-statement.spec.js | 829 ++++++++++-------- 1 file changed, 478 insertions(+), 351 deletions(-) diff --git a/src/layouts/coverage-statement/coverage-statement.spec.js b/src/layouts/coverage-statement/coverage-statement.spec.js index de0d2ba7..c1c730ad 100644 --- a/src/layouts/coverage-statement/coverage-statement.spec.js +++ b/src/layouts/coverage-statement/coverage-statement.spec.js @@ -2,28 +2,30 @@ import coverageStatement from '@/layouts/coverage-statement/coverage-statement'; // Supporting Files -import { mount, shallowMount } from '@vue/test-utils'; +import { mount } from '@vue/test-utils'; import { getMountOptions } from '@/helpers/unit-test-helper.js'; import { createTestingPinia } from '@pinia/testing'; import { navigationScenarios } from '@/router/router-constants/navigation-scenarios.js'; import { useMainStore } from '@/store/index.js'; import { getRandomString, getRandomInt } from '@/helpers/data-generation.js'; +import { settleAllPromises } from '@/helpers/layout-helper.js'; +import { fetchCmsContentForPage } from '@/helpers/cms-content-helper'; -// Mock fetchCmsContentForPage -// jest.mock('@/helpers/cms-content-helper', () => ({ -// fetchCmsContentForPage: jest.fn(), -// processIfStatements: jest.fn(), -// getBodyTextFromCms: jest.fn(), -// })); +// Mock our module for promises +jest.mock("@/helpers/layout-helper.js", () => ({ + settleAllPromises: jest.fn(), +})); -// // Mock our module for promises. -// jest.mock('@/helpers/layout-helper.js', () => ({ -// settleAllPromises: jest.fn(), -// })); +// Mock fetchCmsContentForPage, setupModalLinks, and processIfStatements +jest.mock("@/helpers/cms-content-helper", () => ({ + fetchCmsContentForPage: jest.fn(), + setupModalLinks: jest.fn(), + processIfStatements: jest.fn() +})); describe('coverageStatement.vue', () => { describe("method arePagePrerequisitesValid...", () => { - test.only("Should return true for valid page requisites if vin exists", () => { + test("Should return true for valid page requisites if vin exists", () => { // Arrange const { wrapper } = setupMocks({}); useMainStore().order.vehicle.vin = getRandomString(5,20); @@ -100,15 +102,20 @@ describe('coverageStatement.vue', () => { }); }); describe('Verified ITAC scenario', () => { - test('If coverage verified, not No Comp, and deductible > service price, verifiedITAC returns true', () => { + const loadingModal = { + render: () => {}, + methods: { + showModal: jest.fn(), + hideModal: jest.fn() + } + } + const sellingPrice = getRandomInt(100, 500); + + test('If policy lookup successful, not No Comp, and deductible > service price, verifiedITAC returns true', () => { // Arrange - const mountOptions = getMountOptions({ - methods: { - getCmsContent: jest.fn().mockImplementation(() => ''), - setCmsContent: jest.fn(), - }, - }); - const sellingPrice = getRandomInt(100, 500); + const mountOptions = { + mixins: [mockMixin] + }; const deductible = sellingPrice + 1; const mainInitialState = { order: { @@ -119,7 +126,8 @@ describe('coverageStatement.vue', () => { noCoverage: false, deductible: { repair: deductible, - } + }, + policyLookupSuccessful: true } } }; @@ -128,13 +136,20 @@ describe('coverageStatement.vue', () => { initialState: { main: mainInitialState } - })] + })], + stubs: { + 'siteFooter': footer, + siteHeader: true, + recalModal: true, + contentGroupModal: true, + alert: true, + 'loadingModal': loadingModal + }, } // Act - const wrapper = shallowMount(coverageStatement, mountOptions); + const wrapper = mount(coverageStatement, mountOptions); wrapper.setData({ - isVerified: true, availableLineItems: [ { sellingPrice: sellingPrice, @@ -147,14 +162,20 @@ describe('coverageStatement.vue', () => { // Assert expect(wrapper.vm.verifiedITAC).toBeTruthy(); }); - test('If coverage unverified, verifiedITAC returns false', () => { + test('If policy lookup unsuccessful, verifiedITAC returns false', () => { // Arrange - const mountOptions = getMountOptions(); + const mountOptions = { + mixins: [mockMixin] + }; + const mainInitialState = { order: { damage: { isRepair: true }, + policy: { + policyLookupSuccessful: false + } } }; mountOptions.global = { @@ -162,21 +183,28 @@ describe('coverageStatement.vue', () => { initialState: { main: mainInitialState } - })] + })], + stubs: { + 'siteFooter': footer, + siteHeader: true, + recalModal: true, + contentGroupModal: true, + alert: true, + 'loadingModal': loadingModal + }, } // Act - const wrapper = shallowMount(coverageStatement, mountOptions); - wrapper.setData({ - isVerified: false, - }) + const wrapper = mount(coverageStatement, mountOptions); // Assert expect(wrapper.vm.verifiedITAC).toBeFalsy(); }); test('If No Comp, verifiedITAC returns false', () => { // Arrange - const mountOptions = getMountOptions(); + const mountOptions = { + mixins: [mockMixin] + }; const mainInitialState = { order: { damage: { @@ -192,22 +220,28 @@ describe('coverageStatement.vue', () => { initialState: { main: mainInitialState } - })] + })], + stubs: { + 'siteFooter': footer, + siteHeader: true, + recalModal: true, + contentGroupModal: true, + alert: true, + 'loadingModal': loadingModal + }, } // Act - const wrapper = shallowMount(coverageStatement, mountOptions); - wrapper.setData({ - isVerified: false, - }) + const wrapper = mount(coverageStatement, mountOptions); // Assert expect(wrapper.vm.verifiedITAC).toBeFalsy(); }); test('If deductible < service price, verifiedITAC returns false', () => { // Arrange - const mountOptions = getMountOptions(); - const sellingPrice = getRandomInt(100, 500); + const mountOptions = { + mixins: [mockMixin] + }; const deductible = sellingPrice - 1; const mainInitialState = { order: { @@ -227,13 +261,20 @@ describe('coverageStatement.vue', () => { initialState: { main: mainInitialState } - })] + })], + stubs: { + 'siteFooter': footer, + siteHeader: true, + recalModal: true, + contentGroupModal: true, + alert: true, + 'loadingModal': loadingModal + }, } // Act - const wrapper = shallowMount(coverageStatement, mountOptions); + const wrapper = mount(coverageStatement, mountOptions); wrapper.setData({ - isVerified: true, availableLineItems: [ { sellingPrice: sellingPrice, @@ -248,9 +289,19 @@ describe('coverageStatement.vue', () => { }); }); describe('Verified Deductible scenario', () => { - test('If coverage verified, not No Comp, and service price > deductible, verifiedITAC returns true', () => { + const loadingModal = { + render: () => {}, + methods: { + showModal: jest.fn(), + hideModal: jest.fn() + } + } + + test('If policy lookup successful, not No Comp, and service price > deductible, verifiedITAC returns true', () => { // Arrange - const mountOptions = getMountOptions(); + const mountOptions = { + mixins: [mockMixin] + }; const sellingPrice = getRandomInt(100, 500); const deductible = sellingPrice - 1; const mainInitialState = { @@ -262,7 +313,8 @@ describe('coverageStatement.vue', () => { noCoverage: false, deductible: { repair: deductible, - } + }, + policyLookupSuccessful: true } } }; @@ -271,13 +323,20 @@ describe('coverageStatement.vue', () => { initialState: { main: mainInitialState } - })] + })], + stubs: { + 'siteFooter': footer, + siteHeader: true, + recalModal: true, + contentGroupModal: true, + alert: true, + 'loadingModal': loadingModal + }, } // Act - const wrapper = shallowMount(coverageStatement, mountOptions); + const wrapper = mount(coverageStatement, mountOptions); wrapper.setData({ - isVerified: true, availableLineItems: [ { sellingPrice: sellingPrice, @@ -290,14 +349,19 @@ describe('coverageStatement.vue', () => { // Assert expect(wrapper.vm.verifiedDeductible).toBeTruthy(); }); - test('If coverage unverified, verifiedDeductible returns false', () => { + test('If policy lookup unsuccessful, verifiedDeductible returns false', () => { // Arrange - const mountOptions = getMountOptions(); + const mountOptions = { + mixins: [mockMixin] + }; const mainInitialState = { order: { damage: { isRepair: true }, + policy: { + policyLookupSuccessful: false + } } }; mountOptions.global = { @@ -305,21 +369,29 @@ describe('coverageStatement.vue', () => { initialState: { main: mainInitialState } - })] + })], + stubs: { + 'siteFooter': footer, + siteHeader: true, + recalModal: true, + contentGroupModal: true, + alert: true, + 'loadingModal': loadingModal + }, } // Act - const wrapper = shallowMount(coverageStatement, mountOptions); - wrapper.setData({ - isVerified: false, - }) + const wrapper = mount(coverageStatement, mountOptions); // Assert expect(wrapper.vm.verifiedDeductible).toBeFalsy(); }); test('If No Comp, verifiedDeductible returns false', () => { // Arrange - const mountOptions = getMountOptions(); + const mountOptions = { + mixins: [mockMixin] + }; + const mainInitialState = { order: { damage: { @@ -335,21 +407,28 @@ describe('coverageStatement.vue', () => { initialState: { main: mainInitialState } - })] + })], + stubs: { + 'siteFooter': footer, + siteHeader: true, + recalModal: true, + contentGroupModal: true, + alert: true, + 'loadingModal': loadingModal + }, } // Act - const wrapper = shallowMount(coverageStatement, mountOptions); - wrapper.setData({ - isVerified: false, - }) - + const wrapper = mount(coverageStatement, mountOptions); + // Assert expect(wrapper.vm.verifiedDeductible).toBeFalsy(); }); test('If service price < deductible, verifiedDeductible returns false', () => { // Arrange - const mountOptions = getMountOptions(); + const mountOptions = { + mixins: [mockMixin] + }; const sellingPrice = getRandomInt(100, 500); const deductible = sellingPrice + 1; const mainInitialState = { @@ -370,13 +449,20 @@ describe('coverageStatement.vue', () => { initialState: { main: mainInitialState } - })] + })], + stubs: { + 'siteFooter': footer, + siteHeader: true, + recalModal: true, + contentGroupModal: true, + alert: true, + 'loadingModal': loadingModal + }, } // Act - const wrapper = shallowMount(coverageStatement, mountOptions); + const wrapper = mount(coverageStatement, mountOptions); wrapper.setData({ - isVerified: true, availableLineItems: [ { sellingPrice: sellingPrice, @@ -391,9 +477,19 @@ describe('coverageStatement.vue', () => { }); }); describe('No Comp scenario', () => { + const loadingModal = { + render: () => {}, + methods: { + showModal: jest.fn(), + hideModal: jest.fn() + } + } + test('If noCoverage = true, verifiedNoComp returns true', () => { // Arrange - const mountOptions = getMountOptions(); + const mountOptions = { + mixins: [mockMixin] + }; const mainInitialState = { order: { damage: { @@ -401,6 +497,7 @@ describe('coverageStatement.vue', () => { }, policy: { noCoverage: true, + policyLookupSuccessful: true } } }; @@ -409,21 +506,28 @@ describe('coverageStatement.vue', () => { initialState: { main: mainInitialState } - })] + })], + stubs: { + 'siteFooter': footer, + siteHeader: true, + recalModal: true, + contentGroupModal: true, + alert: true, + 'loadingModal': loadingModal + }, } // Act - const wrapper = shallowMount(coverageStatement, mountOptions); - wrapper.setData({ - isVerified: false, - }) - + const wrapper = mount(coverageStatement, mountOptions); + // Assert expect(wrapper.vm.verifiedNoComp).toBeTruthy(); }); test('If noCoverage = false, verifiedNoComp returns false', () => { // Arrange - const mountOptions = getMountOptions(); + const mountOptions = { + mixins: [mockMixin] + }; const mainInitialState = { order: { damage: { @@ -439,28 +543,46 @@ describe('coverageStatement.vue', () => { initialState: { main: mainInitialState } - })] + })], + stubs: { + 'siteFooter': footer, + siteHeader: true, + recalModal: true, + contentGroupModal: true, + alert: true, + 'loadingModal': loadingModal + }, } // Act - const wrapper = shallowMount(coverageStatement, mountOptions); - wrapper.setData({ - isVerified: false, - }) - + const wrapper = mount(coverageStatement, mountOptions); + // Assert expect(wrapper.vm.verifiedNoComp).toBeFalsy(); }); }); describe('Unverified scenario', () => { - test('If isVerified is false, coverageUnverified returns true, coverageVerified returns false', () => { + const loadingModal = { + render: () => {}, + methods: { + showModal: jest.fn(), + hideModal: jest.fn() + } + } + + test('If policyLookupSuccessful false, unverified returns true', () => { // Arrange - const mountOptions = getMountOptions(); + const mountOptions = { + mixins: [mockMixin] + }; const mainInitialState = { order: { damage: { isRepair: true }, + policy: { + policyLookupSuccessful: false + } } }; mountOptions.global = { @@ -468,27 +590,36 @@ describe('coverageStatement.vue', () => { initialState: { main: mainInitialState } - })] + })], + stubs: { + 'siteFooter': footer, + siteHeader: true, + recalModal: true, + contentGroupModal: true, + alert: true, + 'loadingModal': loadingModal + }, } // Act - const wrapper = shallowMount(coverageStatement, mountOptions); - wrapper.setData({ - isVerified: false, - }) - + const wrapper = mount(coverageStatement, mountOptions); + // Assert - expect(wrapper.vm.coverageUnverified).toBeTruthy(); - expect(wrapper.vm.coverageVerified).toBeFalsy(); + expect(wrapper.vm.unverified).toBeTruthy(); }); - test('If isVerified is true, coverageVerified returns true, coverageUnverified returns false', () => { + test('If policyLookupSuccessful is true, unverified returns false', () => { // Arrange - const mountOptions = getMountOptions(); + const mountOptions = { + mixins: [mockMixin] + }; const mainInitialState = { order: { damage: { isRepair: true }, + policy: { + policyLookupSuccessful: true + } } }; mountOptions.global = { @@ -496,37 +627,42 @@ describe('coverageStatement.vue', () => { initialState: { main: mainInitialState } - })] + })], + stubs: { + 'siteFooter': footer, + siteHeader: true, + recalModal: true, + contentGroupModal: true, + alert: true, + 'loadingModal': loadingModal + }, } // Act - const wrapper = shallowMount(coverageStatement, mountOptions); - wrapper.setData({ - isVerified: true, - }) + const wrapper = mount(coverageStatement, mountOptions); // Assert - expect(wrapper.vm.coverageVerified).toBeTruthy(); - expect(wrapper.vm.coverageUnverified).toBeFalsy(); + expect(wrapper.vm.unverified).toBeFalsy(); }); }); describe('Navigation', () => { + const footer = { + render: () => {}, + methods: { + updateButtonText: jest.fn() + } + } + const loadingModal = { + render: () => {}, + methods: { + showModal: jest.fn(), + hideModal: jest.fn() + } + } + const sellingPrice = getRandomInt(100, 500); + test('If Unverified, navigate forward with CLICKED_FORWARD scenario', () => { // Arrange - const footer = { - render: () => {}, - methods: { - updateButtonText: jest.fn() - } - } - const loadingModal = { - render: () => {}, - methods: { - showModal: jest.fn(), - hideModal: jest.fn() - } - } - const mountOptions = { router: { navigate: jest.fn() @@ -538,6 +674,9 @@ describe('coverageStatement.vue', () => { damage: { isRepair: true }, + policy: { + policyLookupSuccessful: false + } } }; mountOptions.global = { @@ -563,9 +702,6 @@ describe('coverageStatement.vue', () => { // Act const wrapper = mount(coverageStatement, mountOptions); - wrapper.setData({ - isVerified: false, - }) // Act wrapper.vm.forwardButtonAction(); @@ -576,13 +712,6 @@ describe('coverageStatement.vue', () => { }); test('If Verified Deductible, navigate forward with CLICKED_FORWARD scenario', () => { // Arrange - const footer = { - render: () => {}, - methods: { - updateButtonText: jest.fn() - } - } - const mountOptions = { router: { navigate: jest.fn() @@ -590,7 +719,6 @@ describe('coverageStatement.vue', () => { mixins: [mockMixin] }; - const sellingPrice = getRandomInt(100, 500); const deductible = sellingPrice - 1; const mainInitialState = { order: { @@ -601,7 +729,8 @@ describe('coverageStatement.vue', () => { noCoverage: false, deductible: { repair: deductible, - } + }, + policyLookupSuccessful: true } } }; @@ -617,6 +746,7 @@ describe('coverageStatement.vue', () => { recalModal: true, contentGroupModal: true, alert: true, + 'loadingModal': loadingModal }, mocks: { $router: { @@ -627,7 +757,6 @@ describe('coverageStatement.vue', () => { const wrapper = mount(coverageStatement, mountOptions); wrapper.setData({ - isVerified: true, availableLineItems: [ { sellingPrice: sellingPrice, @@ -646,20 +775,12 @@ describe('coverageStatement.vue', () => { }); test('If Verified ITAC and selected Safelite, navigate forward with CLICKED_FORWARD_WITH_SAFELITE scenario', () => { // Arrange - const footer = { - render: () => {}, - methods: { - updateButtonText: jest.fn() - } - } - const mountOptions = { router: { navigate: jest.fn() }, mixins: [mockMixin] }; - const sellingPrice = getRandomInt(100, 500); const deductible = sellingPrice + 1; const mainInitialState = { order: { @@ -670,7 +791,8 @@ describe('coverageStatement.vue', () => { noCoverage: false, deductible: { repair: deductible, - } + }, + policyLookupSuccessful: true } }, @@ -687,6 +809,7 @@ describe('coverageStatement.vue', () => { recalModal: true, contentGroupModal: true, alert: true, + 'loadingModal': loadingModal }, mocks: { $router: { @@ -697,7 +820,6 @@ describe('coverageStatement.vue', () => { const wrapper = mount(coverageStatement, mountOptions); wrapper.setData({ - isVerified: true, availableLineItems: [ { sellingPrice: sellingPrice, @@ -712,19 +834,11 @@ describe('coverageStatement.vue', () => { wrapper.vm.forwardButtonAction(); // Assert - //expect(wrapper.vm.verifiedITAC).toBeTruthy(); expect(wrapper.vm.$router.navigate) .toHaveBeenCalledWith(navigationScenarios.CLICKED_FORWARD_WITH_SAFELITE, undefined); }); test('If Verified ITAC, selected other shop, and TPA enabled, navigate forward with CLICKED_FORWARD_WITH_TPA_ENABLED scenario', () => { // Arrange - const footer = { - render: () => {}, - methods: { - updateButtonText: jest.fn() - } - } - const mountOptions = { router: { navigate: jest.fn() @@ -732,7 +846,6 @@ describe('coverageStatement.vue', () => { mixins: [mockMixin] }; - const sellingPrice = getRandomInt(100, 500); const deductible = sellingPrice + 1; const mainInitialState = { order: { @@ -743,7 +856,8 @@ describe('coverageStatement.vue', () => { noCoverage: false, deductible: { repair: deductible, - } + }, + policyLookupSuccessful: true } }, issConfig: { @@ -762,6 +876,7 @@ describe('coverageStatement.vue', () => { recalModal: true, contentGroupModal: true, alert: true, + 'loadingModal': loadingModal }, mocks: { $router: { @@ -772,7 +887,6 @@ describe('coverageStatement.vue', () => { const wrapper = mount(coverageStatement, mountOptions); wrapper.setData({ - isVerified: true, availableLineItems: [ { sellingPrice: sellingPrice, @@ -783,24 +897,15 @@ describe('coverageStatement.vue', () => { selectedProvider: 'Other' }); - // Act wrapper.vm.forwardButtonAction(); // Assert - //expect(wrapper.vm.verifiedITAC).toBeTruthy(); expect(wrapper.vm.$router.navigate) .toHaveBeenCalledWith(navigationScenarios.CLICKED_FORWARD_WITH_TPA_ENABLED, undefined); }); test('If Verified ITAC, selected other shop, and TPA disabled, navigate forward with CLICKED_FORWARD_WITH_TPA_DISABLED scenario', () => { // Arrange - const footer = { - render: () => {}, - methods: { - updateButtonText: jest.fn() - } - } - const mountOptions = { router: { navigate: jest.fn() @@ -808,7 +913,6 @@ describe('coverageStatement.vue', () => { mixins: [mockMixin] }; - const sellingPrice = getRandomInt(100, 500); const deductible = sellingPrice + 1; const mainInitialState = { order: { @@ -819,7 +923,8 @@ describe('coverageStatement.vue', () => { noCoverage: false, deductible: { repair: deductible, - } + }, + policyLookupSuccessful: true } }, issConfig: { @@ -838,6 +943,7 @@ describe('coverageStatement.vue', () => { recalModal: true, contentGroupModal: true, alert: true, + 'loadingModal': loadingModal }, mocks: { $router: { @@ -848,7 +954,6 @@ describe('coverageStatement.vue', () => { const wrapper = mount(coverageStatement, mountOptions); wrapper.setData({ - isVerified: true, availableLineItems: [ { sellingPrice: sellingPrice, @@ -859,7 +964,6 @@ describe('coverageStatement.vue', () => { selectedProvider: 'Other' }); - // Act wrapper.vm.forwardButtonAction(); @@ -870,13 +974,6 @@ describe('coverageStatement.vue', () => { }); test('If No Comp and selected Safelite, navigate forward with CLICKED_FORWARD scenario', () => { // Arrange - const footer = { - render: () => {}, - methods: { - updateButtonText: jest.fn() - } - } - const mountOptions = { router: { navigate: jest.fn() @@ -884,8 +981,6 @@ describe('coverageStatement.vue', () => { mixins: [mockMixin] }; - const sellingPrice = getRandomInt(100, 500); - const deductible = sellingPrice - 1; const mainInitialState = { order: { damage: { @@ -893,6 +988,7 @@ describe('coverageStatement.vue', () => { }, policy: { noCoverage: true, + policyLookupSuccessful: true } } }; @@ -908,6 +1004,7 @@ describe('coverageStatement.vue', () => { recalModal: true, contentGroupModal: true, alert: true, + 'loadingModal': loadingModal }, mocks: { $router: { @@ -926,50 +1023,196 @@ describe('coverageStatement.vue', () => { wrapper.vm.forwardButtonAction(); // Assert - //expect(wrapper.vm.verifiedNoComp).toBeTruthy(); expect(wrapper.vm.$router.navigate) .toHaveBeenCalledWith(navigationScenarios.CLICKED_FORWARD_WITH_SAFELITE, undefined); }); }); - // describe("claim registration api call", () => { - // it.only("claim registration not required => method not called", async () => { - // // Arrange - // const wrapper = setupMocks({}); + describe('ADAS', () => { + const loadingModal = { + render: () => {}, + methods: { + showModal: jest.fn(), + hideModal: jest.fn() + } + } + test("if Replace and parts require recalibration, isADAS should return true", () => { + // Arrange + const mountOptions = { + mixins: [mockMixin] + }; - // const store = useMainStore(); - // store.isClaimRegistrationRequired = false; + const mainInitialState = { + order: { + damage: { + isRepair: false + }, + lineItems: { + glassParts: [ + { + requiresRecalibration: true + } + ] + } + } + }; + + mountOptions.global = { + plugins: [createTestingPinia({ + initialState: { + main: mainInitialState + } + })], + stubs: { + 'siteFooter': footer, + siteHeader: true, + recalModal: true, + contentGroupModal: true, + alert: true, + 'loadingModal': loadingModal + }, + } - // const to = { - // query: { issPage: getRandomString(4,10) } - // }; - // const next = jest.fn(); + // Act + const wrapper = mount(coverageStatement, mountOptions); - // // SUT - // coverageStatement.beforeRouteEnter.call(wrapper.vm, to, undefined, next) + // Assert + expect(wrapper.vm.isADAS).toBeTruthy(); + }); + test("if Replace and parts do not require recalibration, isADAS should return false", () => { + // Arrange + const mountOptions = { + mixins: [mockMixin] + }; - // // Assert - // expect(store.registerClaim).not.toHaveBeenCalled(); - // }); + const mainInitialState = { + order: { + damage: { + isRepair: false + }, + lineItems: { + glassParts: [ + { + requiresRecalibration: false + } + ] + } + } + }; + + mountOptions.global = { + plugins: [createTestingPinia({ + initialState: { + main: mainInitialState + } + })], + stubs: { + 'siteFooter': footer, + siteHeader: true, + recalModal: true, + contentGroupModal: true, + alert: true, + 'loadingModal': loadingModal + }, + } - // it("claim registration required => register claim method called", async () => { - // // Arrange - // const wrapper = setupMocks({}); + // Act + const wrapper = mount(coverageStatement, mountOptions); - // const store = useMainStore(); - // store.isClaimRegistrationRequired = true; + // Assert + expect(wrapper.vm.isADAS).toBeFalsy(); + }); + test("if Repair, isADAS should return true", () => { + // Arrange + const mountOptions = { + mixins: [mockMixin] + }; - // const to = { - // query: { issPage: getRandomString(4,10) } - // }; - // const next = jest.fn(); + const mainInitialState = { + order: { + damage: { + isRepair: true + }, + } + }; + + mountOptions.global = { + plugins: [createTestingPinia({ + initialState: { + main: mainInitialState + } + })], + stubs: { + 'siteFooter': footer, + siteHeader: true, + recalModal: true, + contentGroupModal: true, + alert: true, + 'loadingModal': loadingModal + }, + } - // // SUT - // coverageStatement.beforeRouteEnter.call(wrapper.vm, to, undefined, next) + // Act + const wrapper = mount(coverageStatement, mountOptions); - // // Assert - // expect(store.registerClaim).toHaveBeenCalled(); - // }); - // }) + // Assert + expect(wrapper.vm.isADAS).toBeFalsy(); + }); + }) + describe("claim registration api call", () => { + it("claim registration not required => method not called", async () => { + // Arrange + const wrapper = setupMocks({}); + + const store = useMainStore(); + store.isClaimRegistrationRequired = false; + + const to = { + query: { issPage: getRandomString(4,10) } + }; + const next = jest.fn(); + + // SUT + coverageStatement.beforeRouteEnter.call(wrapper.vm, to, undefined, next) + + // Assert + expect(store.registerClaim).not.toHaveBeenCalled(); + }); + + it("claim registration required => register claim method called", async () => { + // Arrange + const sellingPrice = getRandomInt(50,100); + const deductible = sellingPrice - 1; + const { wrapper } = setupMocks({ + }); + + await wrapper.setData({ + availableLineItems: [ + { + sellingPrice: sellingPrice, + kitPrice: 0, + laborAmount: 0, + } + ] + }) + + const store = useMainStore(); + store.order.policy.policyLookupSuccessful = true; + store.isClaimRegistrationRequired = true; + store.order.policy.noCoverage = false; + store.order.damage.isRepair = true; + store.order.policy.deductible.repair = deductible; + + const to = { + query: { issPage: getRandomString(4,10) } + }; + const next = jest.fn(); + + // SUT + coverageStatement.beforeRouteEnter.call(wrapper.vm, to, undefined, next); + // Assert + expect(store.registerClaim).toHaveBeenCalled(); + }); + }) }) @@ -979,6 +1222,20 @@ const mockMixin = { setCmsContent: jest.fn(), }, }; +const footer = { + render: () => {}, + methods: { + updateButtonText: jest.fn() + } +} + +const loadingModal = { + render: () => {}, + methods: { + showModal: jest.fn(), + hideModal: jest.fn() + } +} function setupMocks() { @@ -986,170 +1243,40 @@ function setupMocks() router: { navigate: jest.fn() }, - - - // global: { - // plugins: [createTestingPinia()] - // } }); + mountOptions.global = { + stubs: { + 'siteFooter': footer, + siteHeader: true, + recalModal: true, + contentGroupModal: true, + alert: true, + 'loadingModal': loadingModal + }, + } + mountOptions.mixins = [mockMixin]; - // settleAllPromises.mockImplementation(() => apiResponses); - // fetchCmsContentForPage.mockImplementation(() => Promise.resolve()); + const apiResponses = { + supportingItems: [], + }; + const apiPromise = Promise.resolve(apiResponses); + settleAllPromises.mockImplementation(() => apiPromise); + fetchCmsContentForPage.mockImplementation(() => Promise.resolve()); - const wrapper = shallowMount(coverageStatement, mountOptions); + const wrapper = mount(coverageStatement, mountOptions); wrapper.vm.$refs.siteFooter.updateButtonText = jest.fn(); - + wrapper.vm.$refs.loadingModal.showModal = jest.fn(); return { wrapper }; } -// describe ('test', () => { -// test ('dummy test', () => { -// // Arrange -// let test = "test"; - -// // Act -// test = "test2" - -// // Assert -// expect(test.length).toBe(5); -// }) -// }) - -// *Testing to be completed on SSR-603 - -// // Components -// import coverageStatement from "@/layouts/coverage-statement/coverage-statement.vue"; - -// // Supporting files -// import { shallowMount } from "@vue/test-utils"; -// import { getMountOptions } from "@/helpers/unit-test-helper.js"; -// import { useMainStore } from "@/store"; -// import baseMixin from "@/mixins/base-mixin"; -// import vehicleQuestionsMixin from "@/mixins/vehicle-questions-mixin"; -// import { applicationConfig } from "@/constants/application-config"; -// import { fetchCmsContentForPage, setupModalLinks } from "@/helpers/cms-content-helper"; -// import { settleAllPromises } from "@/helpers/layout-helper.js"; -// import { createTestingPinia } from '@pinia/testing'; -// import { getRandomString } from '@/helpers/data-generation.js'; - -// jest.mock("@/helpers/damage-helper", () => ({ -// getDamageString: jest.fn(), -// })); - -// // Mock our module for promises. -// jest.mock("@/helpers/layout-helper.js", () => ({ -// settleAllPromises: jest.fn(), -// })); - -// // Mock fetchCmsContentForPage, setupModalLinks -// jest.mock("@/helpers/cms-content-helper", () => ({ -// fetchCmsContentForPage: jest.fn(), -// setupModalLinks: jest.fn(), -// })); - // describe("coverage-statement.vue...", () => { -// describe("navigation", () => { -// test("forwardButtonAction should trigger navigateForward", async () => { -// // Arrange -// const { wrapper } = setupMocks({}); - -// wrapper.vm.navigateForward = jest.fn(); - -// // Act -// await wrapper.vm.forwardButtonAction(); - -// //Assert -// expect(wrapper.vm.navigateForward).toHaveBeenCalled(); -// }); -// }); // describe("display correct coverage statement", () => { -// test("If damage is Repair, display NonADASRepair coverage statement", async () => { -// // Arrange -// const wrapper = shallowMount(coverageStatement, { -// mixins: [mockMixin], -// }); - -// useMainStore().order.damage.isRepair = true; - -// // Assert -// expect(wrapper.vm.bodyText).toEqual("NonADASRepairTestReturn"); -// }) - -// test("If damage is NonADAS Replace, display NonADASReplace coverage statement", async () => { -// // Arrange -// const wrapper = shallowMount(coverageStatement, { -// mixins: [mockMixin], -// }); - -// useMainStore().lineItems.glassParts = -// [ -// { -// requiresRecalibration: false, -// } -// ]; -// useMainStore().order.damage.isRepair = false; - -// // Assert -// expect(wrapper.vm.bodyText).toEqual("NonADASReplaceTestReturn"); -// }) - -// test("If damage is ADAS Replace, display ADASReplace coverage statement", async () => { -// // Arrange -// const wrapper = shallowMount(coverageStatement, { -// mixins: [mockMixin], -// }); -// useMainStore().lineItems.glassParts = [ -// { -// requiresRecalibration: true, -// } -// ]; -// useMainStore().order.damage.isRepair = false; - -// // Assert -// expect(wrapper.vm.bodyText).toEqual("ADASReplaceTestReturn"); -// }) +// // }); -// describe("claim registration api call", () => { -// it("claim registration not required => method not called", async () => { -// // Arrange -// const wrapper = setupMocks({}); - -// const store = useMainStore(); -// store.isClaimRegistrationRequired = false; - -// const to = { -// query: { issPage: getRandomString(4,10) } -// }; -// const next = jest.fn(); - -// // SUT -// coverageStatement.beforeRouteEnter.call(wrapper.vm, to, undefined, next) - -// // Assert -// expect(store.registerClaim).not.toHaveBeenCalled(); -// }); - -// it("claim registration required => register claim method called", async () => { -// // Arrange -// const wrapper = setupMocks({}); - -// const store = useMainStore(); -// store.isClaimRegistrationRequired = true; - -// const to = { -// query: { issPage: getRandomString(4,10) } -// }; -// const next = jest.fn(); - -// // SUT -// coverageStatement.beforeRouteEnter.call(wrapper.vm, to, undefined, next) - -// // Assert -// expect(store.registerClaim).toHaveBeenCalled(); -// }); +// // }) // }); From 1777bf08e4306caae66d4126d94e591e2b1d785f Mon Sep 17 00:00:00 2001 From: Katie Kroell Date: Fri, 28 Jul 2023 15:41:49 -0400 Subject: [PATCH 23/26] cleanup --- .../coverage-statement.spec.js | 67 ------------------- 1 file changed, 67 deletions(-) diff --git a/src/layouts/coverage-statement/coverage-statement.spec.js b/src/layouts/coverage-statement/coverage-statement.spec.js index c1c730ad..7628a873 100644 --- a/src/layouts/coverage-statement/coverage-statement.spec.js +++ b/src/layouts/coverage-statement/coverage-statement.spec.js @@ -1270,70 +1270,3 @@ function setupMocks() wrapper.vm.$refs.loadingModal.showModal = jest.fn(); return { wrapper }; } - - -// describe("coverage-statement.vue...", () => { -// describe("display correct coverage statement", () => { -// -// }); -// -// }) -// }); - -// const mockMixin = { -// methods: { -// getCmsContent: jest.fn((contentName) => { -// if (contentName === "UnverifiedADASNextStepsWidget") { -// return "ADASReplaceTestReturn" -// } -// else if (contentName === "UnverifiedNonADASRepairWidget") { -// return "NonADASRepairTestReturn" -// } -// else if (contentName === "UnverifiedNonADASNextStepsWidget") { -// return "NonADASReplaceTestReturn" -// } -// return null; -// }), -// } -// }; - -// function setupMocks({ -// pageHeaderWidgetHeaderText, -// mountOptionsMockData = {}, -// }) { -// //Mock api responses -// const apiResponses = { -// cmsContent: { -// SiteSubHeaderWidget: pageHeaderWidgetHeaderText, -// FunnelHeaderWidget: { -// LogoImage: -// `${applicationConfig.ISS_DEV_CMS_DOMAIN}/images/default-source/default-album/logos/insuranceLogo.jpg`, -// }, -// ColorQuestionWidget: "Please choose your rear window tint color", -// FeatureQuestionWidget: "Ok no choose features", -// AlertWidget: { -// BodyText: "Please choose your tint color", -// HeadlineText: "Just a few more steps to go", -// }, -// unverifiedNonADASRepairBodyText: "Repair body text", -// }, -// }; - -// const apiPromise = Promise.resolve(apiResponses); - -// settleAllPromises.mockImplementation(() => apiPromise); -// fetchCmsContentForPage.mockImplementation(() => Promise.resolve()); - -// const mountOptions = getMountOptions({}); - -// mountOptions.mixins = [baseMixin, vehicleQuestionsMixin]; -// mountOptions.global = { -// plugins: [createTestingPinia()] -// } - -// const wrapper = shallowMount(coverageStatement, mountOptions); - -// wrapper.vm.setCmsContent = baseMixin.methods.setCmsContent; - -// return { wrapper }; -// } From a3de3f7ca4b16e055bc82fc317a5dc8267cbf818 Mon Sep 17 00:00:00 2001 From: brydon1 Date: Fri, 28 Jul 2023 16:29:42 -0400 Subject: [PATCH 24/26] Fixing styling --- .../coverage-statement.spec.js | 493 ++++++++---------- 1 file changed, 220 insertions(+), 273 deletions(-) diff --git a/src/layouts/coverage-statement/coverage-statement.spec.js b/src/layouts/coverage-statement/coverage-statement.spec.js index 7628a873..d9b8f0aa 100644 --- a/src/layouts/coverage-statement/coverage-statement.spec.js +++ b/src/layouts/coverage-statement/coverage-statement.spec.js @@ -12,40 +12,95 @@ import { settleAllPromises } from '@/helpers/layout-helper.js'; import { fetchCmsContentForPage } from '@/helpers/cms-content-helper'; // Mock our module for promises -jest.mock("@/helpers/layout-helper.js", () => ({ +jest.mock('@/helpers/layout-helper.js', () => ({ settleAllPromises: jest.fn(), })); // Mock fetchCmsContentForPage, setupModalLinks, and processIfStatements -jest.mock("@/helpers/cms-content-helper", () => ({ +jest.mock('@/helpers/cms-content-helper', () => ({ fetchCmsContentForPage: jest.fn(), setupModalLinks: jest.fn(), processIfStatements: jest.fn() })); +const mockMixin = { + methods: { + getCmsContent: jest.fn().mockImplementation(() => ''), + setCmsContent: jest.fn() + } +}; + +const footerStub = { + render: () => {}, + methods: { + updateButtonText: jest.fn() + } +}; + +const loadingModalStub = { + render: () => {}, + methods: { + showModal: jest.fn(), + hideModal: jest.fn() + } +}; + +function setupMocks() { + const mountOptions = getMountOptions({ + router: { + navigate: jest.fn() + } + }); + + mountOptions.global = { + stubs: { + siteFooter: footerStub, + siteHeader: true, + recalModal: true, + contentGroupModal: true, + alert: true, + loadingModal: loadingModalStub + } + }; + + mountOptions.mixins = [mockMixin]; + + const apiResponses = { + supportingItems: [] + }; + const apiPromise = Promise.resolve(apiResponses); + settleAllPromises.mockImplementation(() => apiPromise); + fetchCmsContentForPage.mockImplementation(() => Promise.resolve()); + + const wrapper = mount(coverageStatement, mountOptions); + wrapper.vm.$refs.siteFooter.updateButtonText = jest.fn(); + wrapper.vm.$refs.loadingModal.showModal = jest.fn(); + return { wrapper }; +} + describe('coverageStatement.vue', () => { - describe("method arePagePrerequisitesValid...", () => { - test("Should return true for valid page requisites if vin exists", () => { + describe('method arePagePrerequisitesValid...', () => { + test('Should return true for valid page requisites if vin exists', () => { // Arrange const { wrapper } = setupMocks({}); useMainStore().order.vehicle.vin = getRandomString(5,20); // Act - let arePagePrerequisitesValid = wrapper.vm.arePagePrerequisitesValid(); + const arePagePrerequisitesValid = wrapper.vm.arePagePrerequisitesValid(); - //Assert + // Assert expect(arePagePrerequisitesValid).toBe(true); }); - test("Should return false for valid page requisites if vin is missing", () => { + test('Should return false for valid page requisites if vin is missing', () => { // Arrange const { wrapper } = setupMocks({}); - + useMainStore().order.vehicle.vin = null; // Act - let arePagePrerequisitesValid = wrapper.vm.arePagePrerequisitesValid(); + const arePagePrerequisitesValid = wrapper.vm.arePagePrerequisitesValid(); - //Assert + // Assert expect(arePagePrerequisitesValid).toBe(false); }); }); @@ -59,7 +114,7 @@ describe('coverageStatement.vue', () => { // Assert expect(siteHeader.exists()).toBe(true); - }), + }); test('Should render site subheader', () => { // Arrange const { wrapper } = setupMocks({}); @@ -70,6 +125,7 @@ describe('coverageStatement.vue', () => { // Assert expect(subheader.exists()).toBe(true); }); + test('Should render explanatory text', () => { // Arrange const { wrapper } = setupMocks({}); @@ -102,20 +158,12 @@ describe('coverageStatement.vue', () => { }); }); describe('Verified ITAC scenario', () => { - const loadingModal = { - render: () => {}, - methods: { - showModal: jest.fn(), - hideModal: jest.fn() - } - } - const sellingPrice = getRandomInt(100, 500); - test('If policy lookup successful, not No Comp, and deductible > service price, verifiedITAC returns true', () => { // Arrange const mountOptions = { mixins: [mockMixin] }; + const sellingPrice = getRandomInt(100, 500); const deductible = sellingPrice + 1; const mainInitialState = { order: { @@ -125,7 +173,7 @@ describe('coverageStatement.vue', () => { policy: { noCoverage: false, deductible: { - repair: deductible, + repair: deductible }, policyLookupSuccessful: true } @@ -138,26 +186,26 @@ describe('coverageStatement.vue', () => { } })], stubs: { - 'siteFooter': footer, + siteFooter: footerStub, siteHeader: true, recalModal: true, contentGroupModal: true, alert: true, - 'loadingModal': loadingModal - }, - } + loadingModal: loadingModalStub + } + }; // Act const wrapper = mount(coverageStatement, mountOptions); wrapper.setData({ availableLineItems: [ { - sellingPrice: sellingPrice, - kitPrice: 0, - laborAmount: 0, + sellingPrice, + kitPrice: 0, + laborAmount: 0 } ] - }) + }); // Assert expect(wrapper.vm.verifiedITAC).toBeTruthy(); @@ -167,7 +215,7 @@ describe('coverageStatement.vue', () => { const mountOptions = { mixins: [mockMixin] }; - + const mainInitialState = { order: { damage: { @@ -185,14 +233,14 @@ describe('coverageStatement.vue', () => { } })], stubs: { - 'siteFooter': footer, + siteFooter: footerStub, siteHeader: true, recalModal: true, contentGroupModal: true, alert: true, - 'loadingModal': loadingModal - }, - } + loadingModal: loadingModalStub + } + }; // Act const wrapper = mount(coverageStatement, mountOptions); @@ -211,7 +259,7 @@ describe('coverageStatement.vue', () => { isRepair: true }, policy: { - noCoverage: true, + noCoverage: true } } }; @@ -222,14 +270,14 @@ describe('coverageStatement.vue', () => { } })], stubs: { - 'siteFooter': footer, + siteFooter: footerStub, siteHeader: true, recalModal: true, contentGroupModal: true, alert: true, - 'loadingModal': loadingModal - }, - } + loadingModal: loadingModalStub + } + }; // Act const wrapper = mount(coverageStatement, mountOptions); @@ -242,6 +290,7 @@ describe('coverageStatement.vue', () => { const mountOptions = { mixins: [mockMixin] }; + const sellingPrice = getRandomInt(100, 500); const deductible = sellingPrice - 1; const mainInitialState = { order: { @@ -251,7 +300,7 @@ describe('coverageStatement.vue', () => { policy: { noCoverage: false, deductible: { - repair: deductible, + repair: deductible } } } @@ -263,40 +312,32 @@ describe('coverageStatement.vue', () => { } })], stubs: { - 'siteFooter': footer, + siteFooter: footerStub, siteHeader: true, recalModal: true, contentGroupModal: true, alert: true, - 'loadingModal': loadingModal - }, - } + loadingModal: loadingModalStub + } + }; // Act const wrapper = mount(coverageStatement, mountOptions); wrapper.setData({ availableLineItems: [ { - sellingPrice: sellingPrice, - kitPrice: 0, - laborAmount: 0, + sellingPrice, + kitPrice: 0, + laborAmount: 0 } ] - }) + }); // Assert expect(wrapper.vm.verifiedITAC).toBeFalsy(); }); }); describe('Verified Deductible scenario', () => { - const loadingModal = { - render: () => {}, - methods: { - showModal: jest.fn(), - hideModal: jest.fn() - } - } - test('If policy lookup successful, not No Comp, and service price > deductible, verifiedITAC returns true', () => { // Arrange const mountOptions = { @@ -312,7 +353,7 @@ describe('coverageStatement.vue', () => { policy: { noCoverage: false, deductible: { - repair: deductible, + repair: deductible }, policyLookupSuccessful: true } @@ -325,26 +366,26 @@ describe('coverageStatement.vue', () => { } })], stubs: { - 'siteFooter': footer, + siteFooter: footerStub, siteHeader: true, recalModal: true, contentGroupModal: true, alert: true, - 'loadingModal': loadingModal - }, - } + loadingModal: loadingModalStub + } + }; // Act const wrapper = mount(coverageStatement, mountOptions); wrapper.setData({ availableLineItems: [ { - sellingPrice: sellingPrice, - kitPrice: 0, - laborAmount: 0, + sellingPrice, + kitPrice: 0, + laborAmount: 0 } ] - }) + }); // Assert expect(wrapper.vm.verifiedDeductible).toBeTruthy(); @@ -371,14 +412,14 @@ describe('coverageStatement.vue', () => { } })], stubs: { - 'siteFooter': footer, + siteFooter: footerStub, siteHeader: true, recalModal: true, contentGroupModal: true, alert: true, - 'loadingModal': loadingModal - }, - } + loadingModal: loadingModalStub + } + }; // Act const wrapper = mount(coverageStatement, mountOptions); @@ -398,7 +439,7 @@ describe('coverageStatement.vue', () => { isRepair: true }, policy: { - noCoverage: true, + noCoverage: true } } }; @@ -409,18 +450,18 @@ describe('coverageStatement.vue', () => { } })], stubs: { - 'siteFooter': footer, + siteFooter: footerStub, siteHeader: true, recalModal: true, contentGroupModal: true, alert: true, - 'loadingModal': loadingModal - }, - } + loadingModal: loadingModalStub + } + }; // Act const wrapper = mount(coverageStatement, mountOptions); - + // Assert expect(wrapper.vm.verifiedDeductible).toBeFalsy(); }); @@ -439,7 +480,7 @@ describe('coverageStatement.vue', () => { policy: { noCoverage: false, deductible: { - repair: deductible, + repair: deductible } } } @@ -451,40 +492,32 @@ describe('coverageStatement.vue', () => { } })], stubs: { - 'siteFooter': footer, + siteFooter: footerStub, siteHeader: true, recalModal: true, contentGroupModal: true, alert: true, - 'loadingModal': loadingModal - }, - } + loadingModal: loadingModalStub + } + }; // Act const wrapper = mount(coverageStatement, mountOptions); wrapper.setData({ availableLineItems: [ { - sellingPrice: sellingPrice, - kitPrice: 0, - laborAmount: 0, + sellingPrice, + kitPrice: 0, + laborAmount: 0 } ] - }) + }); // Assert expect(wrapper.vm.verifiedDeductible).toBeFalsy(); }); }); describe('No Comp scenario', () => { - const loadingModal = { - render: () => {}, - methods: { - showModal: jest.fn(), - hideModal: jest.fn() - } - } - test('If noCoverage = true, verifiedNoComp returns true', () => { // Arrange const mountOptions = { @@ -508,18 +541,18 @@ describe('coverageStatement.vue', () => { } })], stubs: { - 'siteFooter': footer, + siteFooter: footerStub, siteHeader: true, recalModal: true, contentGroupModal: true, alert: true, - 'loadingModal': loadingModal - }, - } + loadingModal: loadingModalStub + } + }; // Act const wrapper = mount(coverageStatement, mountOptions); - + // Assert expect(wrapper.vm.verifiedNoComp).toBeTruthy(); }); @@ -534,7 +567,7 @@ describe('coverageStatement.vue', () => { isRepair: true }, policy: { - noCoverage: false, + noCoverage: false } } }; @@ -545,31 +578,23 @@ describe('coverageStatement.vue', () => { } })], stubs: { - 'siteFooter': footer, + siteFooter: footerStub, siteHeader: true, recalModal: true, contentGroupModal: true, alert: true, - 'loadingModal': loadingModal - }, - } + loadingModal: loadingModalStub + } + }; // Act const wrapper = mount(coverageStatement, mountOptions); - + // Assert expect(wrapper.vm.verifiedNoComp).toBeFalsy(); }); }); describe('Unverified scenario', () => { - const loadingModal = { - render: () => {}, - methods: { - showModal: jest.fn(), - hideModal: jest.fn() - } - } - test('If policyLookupSuccessful false, unverified returns true', () => { // Arrange const mountOptions = { @@ -592,18 +617,18 @@ describe('coverageStatement.vue', () => { } })], stubs: { - 'siteFooter': footer, + siteFooter: footerStub, siteHeader: true, recalModal: true, contentGroupModal: true, alert: true, - 'loadingModal': loadingModal - }, - } + loadingModal: loadingModalStub + } + }; // Act const wrapper = mount(coverageStatement, mountOptions); - + // Assert expect(wrapper.vm.unverified).toBeTruthy(); }); @@ -629,14 +654,14 @@ describe('coverageStatement.vue', () => { } })], stubs: { - 'siteFooter': footer, + siteFooter: footerStub, siteHeader: true, recalModal: true, contentGroupModal: true, alert: true, - 'loadingModal': loadingModal - }, - } + loadingModal: loadingModalStub + } + }; // Act const wrapper = mount(coverageStatement, mountOptions); @@ -646,21 +671,6 @@ describe('coverageStatement.vue', () => { }); }); describe('Navigation', () => { - const footer = { - render: () => {}, - methods: { - updateButtonText: jest.fn() - } - } - const loadingModal = { - render: () => {}, - methods: { - showModal: jest.fn(), - hideModal: jest.fn() - } - } - const sellingPrice = getRandomInt(100, 500); - test('If Unverified, navigate forward with CLICKED_FORWARD scenario', () => { // Arrange const mountOptions = { @@ -686,23 +696,23 @@ describe('coverageStatement.vue', () => { } })], stubs: { - 'siteFooter': footer, + siteFooter: footerStub, siteHeader: true, recalModal: true, contentGroupModal: true, alert: true, - 'loadingModal': loadingModal + loadingModal: loadingModalStub }, mocks: { $router: { navigate: jest.fn() } } - } + }; // Act const wrapper = mount(coverageStatement, mountOptions); - + // Act wrapper.vm.forwardButtonAction(); @@ -719,6 +729,7 @@ describe('coverageStatement.vue', () => { mixins: [mockMixin] }; + const sellingPrice = getRandomInt(100, 500); const deductible = sellingPrice - 1; const mainInitialState = { order: { @@ -728,7 +739,7 @@ describe('coverageStatement.vue', () => { policy: { noCoverage: false, deductible: { - repair: deductible, + repair: deductible }, policyLookupSuccessful: true } @@ -741,27 +752,27 @@ describe('coverageStatement.vue', () => { } })], stubs: { - 'siteFooter': footer, + siteFooter: footerStub, siteHeader: true, recalModal: true, contentGroupModal: true, alert: true, - 'loadingModal': loadingModal + loadingModal: loadingModalStub }, mocks: { $router: { navigate: jest.fn() } } - } + }; const wrapper = mount(coverageStatement, mountOptions); wrapper.setData({ availableLineItems: [ { - sellingPrice: sellingPrice, - kitPrice: 0, - laborAmount: 0, + sellingPrice, + kitPrice: 0, + laborAmount: 0 } ] }); @@ -781,6 +792,7 @@ describe('coverageStatement.vue', () => { }, mixins: [mockMixin] }; + const sellingPrice = getRandomInt(100, 500); const deductible = sellingPrice + 1; const mainInitialState = { order: { @@ -790,12 +802,11 @@ describe('coverageStatement.vue', () => { policy: { noCoverage: false, deductible: { - repair: deductible, + repair: deductible }, policyLookupSuccessful: true } - }, - + } }; mountOptions.global = { plugins: [createTestingPinia({ @@ -804,12 +815,12 @@ describe('coverageStatement.vue', () => { } })], stubs: { - 'siteFooter': footer, + siteFooter: footerStub, siteHeader: true, recalModal: true, contentGroupModal: true, alert: true, - 'loadingModal': loadingModal + loadingModal: loadingModalStub }, mocks: { $router: { @@ -822,22 +833,22 @@ describe('coverageStatement.vue', () => { wrapper.setData({ availableLineItems: [ { - sellingPrice: sellingPrice, - kitPrice: 0, - laborAmount: 0, + sellingPrice, + kitPrice: 0, + laborAmount: 0 } ], selectedProvider: 'Safelite' }); - + // Act wrapper.vm.forwardButtonAction(); // Assert expect(wrapper.vm.$router.navigate) - .toHaveBeenCalledWith(navigationScenarios.CLICKED_FORWARD_WITH_SAFELITE, undefined); + .toHaveBeenCalledWith(navigationScenarios.CLICKED_FORWARD_WITH_SAFELITE, undefined); }); - test('If Verified ITAC, selected other shop, and TPA enabled, navigate forward with CLICKED_FORWARD_WITH_TPA_ENABLED scenario', () => { + test('If Verified ITAC, selected other shop, and TPA enabled, navigate forward w/ CLICKED_FORWARD_WITH_TPA_ENABLED', () => { // Arrange const mountOptions = { router: { @@ -845,7 +856,7 @@ describe('coverageStatement.vue', () => { }, mixins: [mockMixin] }; - + const sellingPrice = getRandomInt(100, 500); const deductible = sellingPrice + 1; const mainInitialState = { order: { @@ -855,7 +866,7 @@ describe('coverageStatement.vue', () => { policy: { noCoverage: false, deductible: { - repair: deductible, + repair: deductible }, policyLookupSuccessful: true } @@ -871,12 +882,12 @@ describe('coverageStatement.vue', () => { } })], stubs: { - 'siteFooter': footer, + siteFooter: footerStub, siteHeader: true, recalModal: true, contentGroupModal: true, alert: true, - 'loadingModal': loadingModal + loadingModal: loadingModalStub }, mocks: { $router: { @@ -889,14 +900,14 @@ describe('coverageStatement.vue', () => { wrapper.setData({ availableLineItems: [ { - sellingPrice: sellingPrice, - kitPrice: 0, - laborAmount: 0, + sellingPrice, + kitPrice: 0, + laborAmount: 0 } ], selectedProvider: 'Other' }); - + // Act wrapper.vm.forwardButtonAction(); @@ -904,7 +915,7 @@ describe('coverageStatement.vue', () => { expect(wrapper.vm.$router.navigate) .toHaveBeenCalledWith(navigationScenarios.CLICKED_FORWARD_WITH_TPA_ENABLED, undefined); }); - test('If Verified ITAC, selected other shop, and TPA disabled, navigate forward with CLICKED_FORWARD_WITH_TPA_DISABLED scenario', () => { + test('If Verified ITAC, selected other shop, and TPA disabled, navigate forward w/ CLICKED_FORWARD_WITH_TPA_DISABLED', () => { // Arrange const mountOptions = { router: { @@ -912,7 +923,7 @@ describe('coverageStatement.vue', () => { }, mixins: [mockMixin] }; - + const sellingPrice = getRandomInt(100, 500); const deductible = sellingPrice + 1; const mainInitialState = { order: { @@ -922,7 +933,7 @@ describe('coverageStatement.vue', () => { policy: { noCoverage: false, deductible: { - repair: deductible, + repair: deductible }, policyLookupSuccessful: true } @@ -938,37 +949,36 @@ describe('coverageStatement.vue', () => { } })], stubs: { - 'siteFooter': footer, + siteFooter: footerStub, siteHeader: true, recalModal: true, contentGroupModal: true, alert: true, - 'loadingModal': loadingModal + loadingModal: loadingModalStub }, mocks: { $router: { navigate: jest.fn() } } - } + }; const wrapper = mount(coverageStatement, mountOptions); wrapper.setData({ availableLineItems: [ { - sellingPrice: sellingPrice, - kitPrice: 0, - laborAmount: 0, + sellingPrice, + kitPrice: 0, + laborAmount: 0 } ], selectedProvider: 'Other' }); - + // Act wrapper.vm.forwardButtonAction(); // Assert - //expect(wrapper.vm.verifiedITAC).toBeTruthy(); expect(wrapper.vm.$router.navigate) .toHaveBeenCalledWith(navigationScenarios.CLICKED_FORWARD_WITH_TPA_DISABLED, undefined); }); @@ -999,19 +1009,19 @@ describe('coverageStatement.vue', () => { } })], stubs: { - 'siteFooter': footer, + siteFooter: footerStub, siteHeader: true, recalModal: true, contentGroupModal: true, alert: true, - 'loadingModal': loadingModal + loadingModal: loadingModalStub }, mocks: { $router: { navigate: jest.fn() } } - } + }; const wrapper = mount(coverageStatement, mountOptions); wrapper.setData({ @@ -1028,14 +1038,7 @@ describe('coverageStatement.vue', () => { }); }); describe('ADAS', () => { - const loadingModal = { - render: () => {}, - methods: { - showModal: jest.fn(), - hideModal: jest.fn() - } - } - test("if Replace and parts require recalibration, isADAS should return true", () => { + test('if Replace and parts require recalibration, isADAS should return true', () => { // Arrange const mountOptions = { mixins: [mockMixin] @@ -1055,7 +1058,7 @@ describe('coverageStatement.vue', () => { } } }; - + mountOptions.global = { plugins: [createTestingPinia({ initialState: { @@ -1063,14 +1066,14 @@ describe('coverageStatement.vue', () => { } })], stubs: { - 'siteFooter': footer, + siteFooter: footerStub, siteHeader: true, recalModal: true, contentGroupModal: true, alert: true, - 'loadingModal': loadingModal - }, - } + loadingModal: loadingModalStub + } + }; // Act const wrapper = mount(coverageStatement, mountOptions); @@ -1078,7 +1081,7 @@ describe('coverageStatement.vue', () => { // Assert expect(wrapper.vm.isADAS).toBeTruthy(); }); - test("if Replace and parts do not require recalibration, isADAS should return false", () => { + test('if Replace and parts do not require recalibration, isADAS should return false', () => { // Arrange const mountOptions = { mixins: [mockMixin] @@ -1098,7 +1101,7 @@ describe('coverageStatement.vue', () => { } } }; - + mountOptions.global = { plugins: [createTestingPinia({ initialState: { @@ -1106,14 +1109,14 @@ describe('coverageStatement.vue', () => { } })], stubs: { - 'siteFooter': footer, + siteFooter: footerStub, siteHeader: true, recalModal: true, contentGroupModal: true, alert: true, - 'loadingModal': loadingModal - }, - } + loadingModal: loadingModalStub + } + }; // Act const wrapper = mount(coverageStatement, mountOptions); @@ -1121,7 +1124,7 @@ describe('coverageStatement.vue', () => { // Assert expect(wrapper.vm.isADAS).toBeFalsy(); }); - test("if Repair, isADAS should return true", () => { + test('if Repair, isADAS should return true', () => { // Arrange const mountOptions = { mixins: [mockMixin] @@ -1131,10 +1134,10 @@ describe('coverageStatement.vue', () => { order: { damage: { isRepair: true - }, + } } }; - + mountOptions.global = { plugins: [createTestingPinia({ initialState: { @@ -1142,14 +1145,14 @@ describe('coverageStatement.vue', () => { } })], stubs: { - 'siteFooter': footer, + siteFooter: footerStub, siteHeader: true, recalModal: true, contentGroupModal: true, alert: true, - 'loadingModal': loadingModal - }, - } + loadingModal: loadingModalStub + } + }; // Act const wrapper = mount(coverageStatement, mountOptions); @@ -1157,9 +1160,9 @@ describe('coverageStatement.vue', () => { // Assert expect(wrapper.vm.isADAS).toBeFalsy(); }); - }) - describe("claim registration api call", () => { - it("claim registration not required => method not called", async () => { + }); + describe.only('claim registration api call', () => { + it('claim registration not required => method not called', async () => { // Arrange const wrapper = setupMocks({}); @@ -1178,9 +1181,9 @@ describe('coverageStatement.vue', () => { expect(store.registerClaim).not.toHaveBeenCalled(); }); - it("claim registration required => register claim method called", async () => { + it.only('claim registration required => register claim method called', async () => { // Arrange - const sellingPrice = getRandomInt(50,100); + const sellingPrice = getRandomInt(50, 100); const deductible = sellingPrice - 1; const { wrapper } = setupMocks({ }); @@ -1188,12 +1191,12 @@ describe('coverageStatement.vue', () => { await wrapper.setData({ availableLineItems: [ { - sellingPrice: sellingPrice, - kitPrice: 0, - laborAmount: 0, + sellingPrice, + kitPrice: 0, + laborAmount: 0 } ] - }) + }); const store = useMainStore(); store.order.policy.policyLookupSuccessful = true; @@ -1201,9 +1204,9 @@ describe('coverageStatement.vue', () => { store.order.policy.noCoverage = false; store.order.damage.isRepair = true; store.order.policy.deductible.repair = deductible; - + const to = { - query: { issPage: getRandomString(4,10) } + query: { issPage: getRandomString(4, 10) } }; const next = jest.fn(); @@ -1212,61 +1215,5 @@ describe('coverageStatement.vue', () => { // Assert expect(store.registerClaim).toHaveBeenCalled(); }); - }) - -}) - -const mockMixin = { - methods: { - getCmsContent: jest.fn().mockImplementation(() => ''), - setCmsContent: jest.fn(), - }, -}; -const footer = { - render: () => {}, - methods: { - updateButtonText: jest.fn() - } -} - -const loadingModal = { - render: () => {}, - methods: { - showModal: jest.fn(), - hideModal: jest.fn() - } -} - -function setupMocks() -{ - const mountOptions = getMountOptions({ - router: { - navigate: jest.fn() - }, }); - - mountOptions.global = { - stubs: { - 'siteFooter': footer, - siteHeader: true, - recalModal: true, - contentGroupModal: true, - alert: true, - 'loadingModal': loadingModal - }, - } - - mountOptions.mixins = [mockMixin]; - - const apiResponses = { - supportingItems: [], - }; - const apiPromise = Promise.resolve(apiResponses); - settleAllPromises.mockImplementation(() => apiPromise); - fetchCmsContentForPage.mockImplementation(() => Promise.resolve()); - - const wrapper = mount(coverageStatement, mountOptions); - wrapper.vm.$refs.siteFooter.updateButtonText = jest.fn(); - wrapper.vm.$refs.loadingModal.showModal = jest.fn(); - return { wrapper }; -} +}); From c7de5b3713a05fec050c89520a2122c03a17b238 Mon Sep 17 00:00:00 2001 From: brydon1 Date: Mon, 31 Jul 2023 09:17:23 -0400 Subject: [PATCH 25/26] Refactoring to reduce size of file --- .../coverage-statement.spec.js | 660 ++++-------------- .../coverage-statement/coverage-statement.vue | 2 +- 2 files changed, 118 insertions(+), 544 deletions(-) diff --git a/src/layouts/coverage-statement/coverage-statement.spec.js b/src/layouts/coverage-statement/coverage-statement.spec.js index 497f5170..1877f831 100644 --- a/src/layouts/coverage-statement/coverage-statement.spec.js +++ b/src/layouts/coverage-statement/coverage-statement.spec.js @@ -11,12 +11,10 @@ import { getRandomString, getRandomInt } from '@/helpers/data-generation.js'; import { settleAllPromises } from '@/helpers/layout-helper.js'; import { fetchCmsContentForPage } from '@/helpers/cms-content-helper'; -// Mock our module for promises jest.mock('@/helpers/layout-helper.js', () => ({ settleAllPromises: jest.fn() })); -// Mock fetchCmsContentForPage, setupModalLinks, and processIfStatements jest.mock('@/helpers/cms-content-helper', () => ({ fetchCmsContentForPage: jest.fn(), setupModalLinks: jest.fn(), @@ -45,25 +43,34 @@ const loadingModalStub = { } }; -function setupMocks() { +function getMountedComponent(mainInitialState = {}, initialData = {}) { const mountOptions = getMountOptions({ router: { navigate: jest.fn() } }); - mountOptions.global = { - stubs: { - siteFooter: footerStub, - siteHeader: true, - recalModal: true, - contentGroupModal: true, - alert: true, - loadingModal: loadingModalStub - } + mountOptions.global.stubs = { + siteFooter: footerStub, + siteHeader: true, + recalModal: true, + contentGroupModal: true, + alert: true, + loadingModal: loadingModalStub }; - + mountOptions.global.plugins = [createTestingPinia({ + initialState: { + main: mainInitialState + } + })]; mountOptions.mixins = [mockMixin]; + mountOptions.data = () => ( + initialData + // { + // foo: 'fromOptions', + + // } + ); const apiResponses = { supportingItems: [] @@ -73,8 +80,6 @@ function setupMocks() { fetchCmsContentForPage.mockImplementation(() => Promise.resolve()); const wrapper = mount(coverageStatement, mountOptions); - wrapper.vm.$refs.siteFooter.updateButtonText = jest.fn(); - wrapper.vm.$refs.loadingModal.showModal = jest.fn(); return { wrapper }; } @@ -82,32 +87,41 @@ describe('coverageStatement.vue', () => { describe('method arePagePrerequisitesValid...', () => { test('Should return true for valid page requisites if vin exists', () => { // Arrange - const { wrapper } = setupMocks({}); - useMainStore().order.vehicle.vin = getRandomString(5,20); + const { wrapper } = getMountedComponent({ + order: { + vehicle: { + vin: getRandomString(5, 20) + } + } + }); // Act const arePagePrerequisitesValid = wrapper.vm.arePagePrerequisitesValid(); // Assert - expect(arePagePrerequisitesValid).toBe(true); + expect(arePagePrerequisitesValid).toBeTruthy(); }); test('Should return false for valid page requisites if vin is missing', () => { // Arrange - const { wrapper } = setupMocks({}); - - useMainStore().order.vehicle.vin = null; + const { wrapper } = getMountedComponent({ + order: { + vehicle: { + vin: null + } + } + }); // Act const arePagePrerequisitesValid = wrapper.vm.arePagePrerequisitesValid(); // Assert - expect(arePagePrerequisitesValid).toBe(false); + expect(arePagePrerequisitesValid).not.toBeTruthy(); }); }); describe('Rendering', () => { test('Should render site header', () => { // Arrange - const { wrapper } = setupMocks({}); + const { wrapper } = getMountedComponent({}); // Act const siteHeader = wrapper.findComponent({ ref: 'siteHeader' }); @@ -117,7 +131,7 @@ describe('coverageStatement.vue', () => { }); test('Should render site subheader', () => { // Arrange - const { wrapper } = setupMocks({}); + const { wrapper } = getMountedComponent({}); // Act const subheader = wrapper.find({ ref: 'siteSubHeader' }); @@ -128,7 +142,7 @@ describe('coverageStatement.vue', () => { test('Should render explanatory text', () => { // Arrange - const { wrapper } = setupMocks({}); + const { wrapper } = getMountedComponent({}); // Act const explanatoryText = wrapper.find({ ref: 'explanatoryText' }); @@ -138,7 +152,7 @@ describe('coverageStatement.vue', () => { }); test('Should render secondary text', () => { // Arrange - const { wrapper } = setupMocks({}); + const { wrapper } = getMountedComponent({}); // Act const secondaryText = wrapper.find({ ref: 'secondaryText' }); @@ -148,7 +162,7 @@ describe('coverageStatement.vue', () => { }); test('Should render site footer', () => { // Arrange - const { wrapper } = setupMocks({}); + const { wrapper } = getMountedComponent({}); // Act const footer = wrapper.findComponent({ ref: 'siteFooter' }); @@ -160,9 +174,6 @@ describe('coverageStatement.vue', () => { describe('Verified ITAC scenario', () => { test('If policy lookup successful, not No Comp, and deductible > service price, verifiedITAC returns true', () => { // Arrange - const mountOptions = { - mixins: [mockMixin] - }; const sellingPrice = getRandomInt(100, 500); const deductible = sellingPrice + 1; const mainInitialState = { @@ -179,24 +190,7 @@ describe('coverageStatement.vue', () => { } } }; - mountOptions.global = { - plugins: [createTestingPinia({ - initialState: { - main: mainInitialState - } - })], - stubs: { - siteFooter: footerStub, - siteHeader: true, - recalModal: true, - contentGroupModal: true, - alert: true, - loadingModal: loadingModalStub - } - }; - - // Act - const wrapper = mount(coverageStatement, mountOptions); + const { wrapper } = getMountedComponent(mainInitialState); wrapper.setData({ availableLineItems: [ { @@ -212,10 +206,6 @@ describe('coverageStatement.vue', () => { }); test('If policy lookup unsuccessful, verifiedITAC returns false', () => { // Arrange - const mountOptions = { - mixins: [mockMixin] - }; - const mainInitialState = { order: { damage: { @@ -226,33 +216,13 @@ describe('coverageStatement.vue', () => { } } }; - mountOptions.global = { - plugins: [createTestingPinia({ - initialState: { - main: mainInitialState - } - })], - stubs: { - siteFooter: footerStub, - siteHeader: true, - recalModal: true, - contentGroupModal: true, - alert: true, - loadingModal: loadingModalStub - } - }; - - // Act - const wrapper = mount(coverageStatement, mountOptions); + const { wrapper } = getMountedComponent(mainInitialState); // Assert expect(wrapper.vm.verifiedITAC).toBeFalsy(); }); test('If No Comp, verifiedITAC returns false', () => { // Arrange - const mountOptions = { - mixins: [mockMixin] - }; const mainInitialState = { order: { damage: { @@ -263,33 +233,13 @@ describe('coverageStatement.vue', () => { } } }; - mountOptions.global = { - plugins: [createTestingPinia({ - initialState: { - main: mainInitialState - } - })], - stubs: { - siteFooter: footerStub, - siteHeader: true, - recalModal: true, - contentGroupModal: true, - alert: true, - loadingModal: loadingModalStub - } - }; - - // Act - const wrapper = mount(coverageStatement, mountOptions); + const { wrapper } = getMountedComponent(mainInitialState); // Assert expect(wrapper.vm.verifiedITAC).toBeFalsy(); }); test('If deductible < service price, verifiedITAC returns false', () => { // Arrange - const mountOptions = { - mixins: [mockMixin] - }; const sellingPrice = getRandomInt(100, 500); const deductible = sellingPrice - 1; const mainInitialState = { @@ -305,24 +255,8 @@ describe('coverageStatement.vue', () => { } } }; - mountOptions.global = { - plugins: [createTestingPinia({ - initialState: { - main: mainInitialState - } - })], - stubs: { - siteFooter: footerStub, - siteHeader: true, - recalModal: true, - contentGroupModal: true, - alert: true, - loadingModal: loadingModalStub - } - }; - // Act - const wrapper = mount(coverageStatement, mountOptions); + const { wrapper } = getMountedComponent(mainInitialState); wrapper.setData({ availableLineItems: [ { @@ -340,9 +274,6 @@ describe('coverageStatement.vue', () => { describe('Verified Deductible scenario', () => { test('If policy lookup successful, not No Comp, and service price > deductible, verifiedITAC returns true', () => { // Arrange - const mountOptions = { - mixins: [mockMixin] - }; const sellingPrice = getRandomInt(100, 500); const deductible = sellingPrice - 1; const mainInitialState = { @@ -359,24 +290,8 @@ describe('coverageStatement.vue', () => { } } }; - mountOptions.global = { - plugins: [createTestingPinia({ - initialState: { - main: mainInitialState - } - })], - stubs: { - siteFooter: footerStub, - siteHeader: true, - recalModal: true, - contentGroupModal: true, - alert: true, - loadingModal: loadingModalStub - } - }; - // Act - const wrapper = mount(coverageStatement, mountOptions); + const { wrapper } = getMountedComponent(mainInitialState); wrapper.setData({ availableLineItems: [ { @@ -392,9 +307,6 @@ describe('coverageStatement.vue', () => { }); test('If policy lookup unsuccessful, verifiedDeductible returns false', () => { // Arrange - const mountOptions = { - mixins: [mockMixin] - }; const mainInitialState = { order: { damage: { @@ -405,34 +317,13 @@ describe('coverageStatement.vue', () => { } } }; - mountOptions.global = { - plugins: [createTestingPinia({ - initialState: { - main: mainInitialState - } - })], - stubs: { - siteFooter: footerStub, - siteHeader: true, - recalModal: true, - contentGroupModal: true, - alert: true, - loadingModal: loadingModalStub - } - }; - - // Act - const wrapper = mount(coverageStatement, mountOptions); + const { wrapper } = getMountedComponent(mainInitialState); // Assert expect(wrapper.vm.verifiedDeductible).toBeFalsy(); }); test('If No Comp, verifiedDeductible returns false', () => { // Arrange - const mountOptions = { - mixins: [mockMixin] - }; - const mainInitialState = { order: { damage: { @@ -443,33 +334,12 @@ describe('coverageStatement.vue', () => { } } }; - mountOptions.global = { - plugins: [createTestingPinia({ - initialState: { - main: mainInitialState - } - })], - stubs: { - siteFooter: footerStub, - siteHeader: true, - recalModal: true, - contentGroupModal: true, - alert: true, - loadingModal: loadingModalStub - } - }; - - // Act - const wrapper = mount(coverageStatement, mountOptions); + const { wrapper } = getMountedComponent(mainInitialState); // Assert expect(wrapper.vm.verifiedDeductible).toBeFalsy(); }); test('If service price < deductible, verifiedDeductible returns false', () => { - // Arrange - const mountOptions = { - mixins: [mockMixin] - }; const sellingPrice = getRandomInt(100, 500); const deductible = sellingPrice + 1; const mainInitialState = { @@ -485,24 +355,8 @@ describe('coverageStatement.vue', () => { } } }; - mountOptions.global = { - plugins: [createTestingPinia({ - initialState: { - main: mainInitialState - } - })], - stubs: { - siteFooter: footerStub, - siteHeader: true, - recalModal: true, - contentGroupModal: true, - alert: true, - loadingModal: loadingModalStub - } - }; - // Act - const wrapper = mount(coverageStatement, mountOptions); + const { wrapper } = getMountedComponent(mainInitialState); wrapper.setData({ availableLineItems: [ { @@ -520,9 +374,6 @@ describe('coverageStatement.vue', () => { describe('No Comp scenario', () => { test('If noCoverage = true, verifiedNoComp returns true', () => { // Arrange - const mountOptions = { - mixins: [mockMixin] - }; const mainInitialState = { order: { damage: { @@ -534,33 +385,13 @@ describe('coverageStatement.vue', () => { } } }; - mountOptions.global = { - plugins: [createTestingPinia({ - initialState: { - main: mainInitialState - } - })], - stubs: { - siteFooter: footerStub, - siteHeader: true, - recalModal: true, - contentGroupModal: true, - alert: true, - loadingModal: loadingModalStub - } - }; - - // Act - const wrapper = mount(coverageStatement, mountOptions); + const { wrapper } = getMountedComponent(mainInitialState); // Assert expect(wrapper.vm.verifiedNoComp).toBeTruthy(); }); test('If noCoverage = false, verifiedNoComp returns false', () => { // Arrange - const mountOptions = { - mixins: [mockMixin] - }; const mainInitialState = { order: { damage: { @@ -571,24 +402,7 @@ describe('coverageStatement.vue', () => { } } }; - mountOptions.global = { - plugins: [createTestingPinia({ - initialState: { - main: mainInitialState - } - })], - stubs: { - siteFooter: footerStub, - siteHeader: true, - recalModal: true, - contentGroupModal: true, - alert: true, - loadingModal: loadingModalStub - } - }; - - // Act - const wrapper = mount(coverageStatement, mountOptions); + const { wrapper } = getMountedComponent(mainInitialState); // Assert expect(wrapper.vm.verifiedNoComp).toBeFalsy(); @@ -597,9 +411,6 @@ describe('coverageStatement.vue', () => { describe('Unverified scenario', () => { test('If policyLookupSuccessful false, unverified returns true', () => { // Arrange - const mountOptions = { - mixins: [mockMixin] - }; const mainInitialState = { order: { damage: { @@ -610,33 +421,13 @@ describe('coverageStatement.vue', () => { } } }; - mountOptions.global = { - plugins: [createTestingPinia({ - initialState: { - main: mainInitialState - } - })], - stubs: { - siteFooter: footerStub, - siteHeader: true, - recalModal: true, - contentGroupModal: true, - alert: true, - loadingModal: loadingModalStub - } - }; - - // Act - const wrapper = mount(coverageStatement, mountOptions); + const { wrapper } = getMountedComponent(mainInitialState); // Assert expect(wrapper.vm.unverified).toBeTruthy(); }); test('If policyLookupSuccessful is true, unverified returns false', () => { // Arrange - const mountOptions = { - mixins: [mockMixin] - }; const mainInitialState = { order: { damage: { @@ -647,24 +438,7 @@ describe('coverageStatement.vue', () => { } } }; - mountOptions.global = { - plugins: [createTestingPinia({ - initialState: { - main: mainInitialState - } - })], - stubs: { - siteFooter: footerStub, - siteHeader: true, - recalModal: true, - contentGroupModal: true, - alert: true, - loadingModal: loadingModalStub - } - }; - - // Act - const wrapper = mount(coverageStatement, mountOptions); + const { wrapper } = getMountedComponent(mainInitialState); // Assert expect(wrapper.vm.unverified).toBeFalsy(); @@ -673,12 +447,6 @@ describe('coverageStatement.vue', () => { describe('Navigation', () => { test('If Unverified, navigate forward with CLICKED_FORWARD scenario', () => { // Arrange - const mountOptions = { - router: { - navigate: jest.fn() - }, - mixins: [mockMixin] - }; const mainInitialState = { order: { damage: { @@ -689,29 +457,7 @@ describe('coverageStatement.vue', () => { } } }; - mountOptions.global = { - plugins: [createTestingPinia({ - initialState: { - main: mainInitialState - } - })], - stubs: { - siteFooter: footerStub, - siteHeader: true, - recalModal: true, - contentGroupModal: true, - alert: true, - loadingModal: loadingModalStub - }, - mocks: { - $router: { - navigate: jest.fn() - } - } - }; - - // Act - const wrapper = mount(coverageStatement, mountOptions); + const { wrapper } = getMountedComponent(mainInitialState); // Act wrapper.vm.forwardButtonAction(); @@ -722,13 +468,6 @@ describe('coverageStatement.vue', () => { }); test('If Verified Deductible, navigate forward with CLICKED_FORWARD scenario', () => { // Arrange - const mountOptions = { - router: { - navigate: jest.fn() - }, - mixins: [mockMixin] - }; - const sellingPrice = getRandomInt(100, 500); const deductible = sellingPrice - 1; const mainInitialState = { @@ -745,28 +484,7 @@ describe('coverageStatement.vue', () => { } } }; - mountOptions.global = { - plugins: [createTestingPinia({ - initialState: { - main: mainInitialState - } - })], - stubs: { - siteFooter: footerStub, - siteHeader: true, - recalModal: true, - contentGroupModal: true, - alert: true, - loadingModal: loadingModalStub - }, - mocks: { - $router: { - navigate: jest.fn() - } - } - }; - - const wrapper = mount(coverageStatement, mountOptions); + const { wrapper } = getMountedComponent(mainInitialState); wrapper.setData({ availableLineItems: [ { @@ -786,12 +504,6 @@ describe('coverageStatement.vue', () => { }); test('If Verified ITAC and selected Safelite, navigate forward with CLICKED_FORWARD_WITH_SAFELITE scenario', () => { // Arrange - const mountOptions = { - router: { - navigate: jest.fn() - }, - mixins: [mockMixin] - }; const sellingPrice = getRandomInt(100, 500); const deductible = sellingPrice + 1; const mainInitialState = { @@ -808,28 +520,7 @@ describe('coverageStatement.vue', () => { } } }; - mountOptions.global = { - plugins: [createTestingPinia({ - initialState: { - main: mainInitialState - } - })], - stubs: { - siteFooter: footerStub, - siteHeader: true, - recalModal: true, - contentGroupModal: true, - alert: true, - loadingModal: loadingModalStub - }, - mocks: { - $router: { - navigate: jest.fn() - } - } - } - - const wrapper = mount(coverageStatement, mountOptions); + const { wrapper } = getMountedComponent(mainInitialState); wrapper.setData({ availableLineItems: [ { @@ -850,12 +541,6 @@ describe('coverageStatement.vue', () => { }); test('If Verified ITAC, selected other shop, and TPA enabled, navigate forward w/ CLICKED_FORWARD_WITH_TPA_ENABLED', () => { // Arrange - const mountOptions = { - router: { - navigate: jest.fn() - }, - mixins: [mockMixin] - }; const sellingPrice = getRandomInt(100, 500); const deductible = sellingPrice + 1; const mainInitialState = { @@ -875,28 +560,7 @@ describe('coverageStatement.vue', () => { enableTPAFlow: true } }; - mountOptions.global = { - plugins: [createTestingPinia({ - initialState: { - main: mainInitialState - } - })], - stubs: { - siteFooter: footerStub, - siteHeader: true, - recalModal: true, - contentGroupModal: true, - alert: true, - loadingModal: loadingModalStub - }, - mocks: { - $router: { - navigate: jest.fn() - } - } - } - - const wrapper = mount(coverageStatement, mountOptions); + const { wrapper } = getMountedComponent(mainInitialState); wrapper.setData({ availableLineItems: [ { @@ -917,12 +581,6 @@ describe('coverageStatement.vue', () => { }); test('If Verified ITAC, selected other shop, and TPA disabled, navigate forward w/ CLICKED_FORWARD_WITH_TPA_DISABLED', () => { // Arrange - const mountOptions = { - router: { - navigate: jest.fn() - }, - mixins: [mockMixin] - }; const sellingPrice = getRandomInt(100, 500); const deductible = sellingPrice + 1; const mainInitialState = { @@ -942,28 +600,7 @@ describe('coverageStatement.vue', () => { enableTPAFlow: false } }; - mountOptions.global = { - plugins: [createTestingPinia({ - initialState: { - main: mainInitialState - } - })], - stubs: { - siteFooter: footerStub, - siteHeader: true, - recalModal: true, - contentGroupModal: true, - alert: true, - loadingModal: loadingModalStub - }, - mocks: { - $router: { - navigate: jest.fn() - } - } - }; - - const wrapper = mount(coverageStatement, mountOptions); + const { wrapper } = getMountedComponent(mainInitialState); wrapper.setData({ availableLineItems: [ { @@ -984,13 +621,6 @@ describe('coverageStatement.vue', () => { }); test('If No Comp and selected Safelite, navigate forward with CLICKED_FORWARD scenario', () => { // Arrange - const mountOptions = { - router: { - navigate: jest.fn() - }, - mixins: [mockMixin] - }; - const mainInitialState = { order: { damage: { @@ -1002,28 +632,7 @@ describe('coverageStatement.vue', () => { } } }; - mountOptions.global = { - plugins: [createTestingPinia({ - initialState: { - main: mainInitialState - } - })], - stubs: { - siteFooter: footerStub, - siteHeader: true, - recalModal: true, - contentGroupModal: true, - alert: true, - loadingModal: loadingModalStub - }, - mocks: { - $router: { - navigate: jest.fn() - } - } - }; - - const wrapper = mount(coverageStatement, mountOptions); + const { wrapper } = getMountedComponent(mainInitialState); wrapper.setData({ isVerified: false, selectedProvider: 'Safelite' @@ -1040,10 +649,6 @@ describe('coverageStatement.vue', () => { describe('ADAS', () => { test('if Replace and parts require recalibration, isADAS should return true', () => { // Arrange - const mountOptions = { - mixins: [mockMixin] - }; - const mainInitialState = { order: { damage: { @@ -1058,35 +663,13 @@ describe('coverageStatement.vue', () => { } } }; - - mountOptions.global = { - plugins: [createTestingPinia({ - initialState: { - main: mainInitialState - } - })], - stubs: { - siteFooter: footerStub, - siteHeader: true, - recalModal: true, - contentGroupModal: true, - alert: true, - loadingModal: loadingModalStub - } - }; - - // Act - const wrapper = mount(coverageStatement, mountOptions); + const { wrapper } = getMountedComponent(mainInitialState); // Assert expect(wrapper.vm.isADAS).toBeTruthy(); }); test('if Replace and parts do not require recalibration, isADAS should return false', () => { // Arrange - const mountOptions = { - mixins: [mockMixin] - }; - const mainInitialState = { order: { damage: { @@ -1101,35 +684,13 @@ describe('coverageStatement.vue', () => { } } }; - - mountOptions.global = { - plugins: [createTestingPinia({ - initialState: { - main: mainInitialState - } - })], - stubs: { - siteFooter: footerStub, - siteHeader: true, - recalModal: true, - contentGroupModal: true, - alert: true, - loadingModal: loadingModalStub - } - }; - - // Act - const wrapper = mount(coverageStatement, mountOptions); + const { wrapper } = getMountedComponent(mainInitialState); // Assert expect(wrapper.vm.isADAS).toBeFalsy(); }); test('if Repair, isADAS should return true', () => { // Arrange - const mountOptions = { - mixins: [mockMixin] - }; - const mainInitialState = { order: { damage: { @@ -1137,25 +698,7 @@ describe('coverageStatement.vue', () => { } } }; - - mountOptions.global = { - plugins: [createTestingPinia({ - initialState: { - main: mainInitialState - } - })], - stubs: { - siteFooter: footerStub, - siteHeader: true, - recalModal: true, - contentGroupModal: true, - alert: true, - loadingModal: loadingModalStub - } - }; - - // Act - const wrapper = mount(coverageStatement, mountOptions); + const { wrapper } = getMountedComponent(mainInitialState); // Assert expect(wrapper.vm.isADAS).toBeFalsy(); @@ -1165,18 +708,22 @@ describe('coverageStatement.vue', () => { // TODO fix test to actually work it('claim registration not required => method not called', async () => { // Arrange - const wrapper = setupMocks({}); + getMountedComponent({ + issConfig: { + isClaimRegistrationRequired: false + } + }); const store = useMainStore(); - store.isClaimRegistrationRequired = false; + // store.isClaimRegistrationRequired = false; - const to = { - query: { issPage: getRandomString(4, 10) } - }; - const next = jest.fn(); + // const to = { + // query: { issPage: getRandomString(4, 10) } + // }; + // const next = jest.fn(); // SUT - coverageStatement.beforeRouteEnter.call(wrapper.vm, to, undefined, next); + // coverageStatement.beforeRouteEnter.call(wrapper.vm, to, undefined, next); // Assert expect(store.registerClaim).not.toHaveBeenCalled(); @@ -1186,9 +733,24 @@ describe('coverageStatement.vue', () => { // Arrange const sellingPrice = getRandomInt(50, 100); const deductible = sellingPrice - 1; - const { wrapper } = setupMocks({}); - - await wrapper.setData({ + const initialStore = { + order: { + policy: { + policyLookupSuccessful: true, + noCoverage: false, + deductible: { + repair: deductible + } + }, + damage: { + isRepair: true + } + }, + issConfig: { + isClaimRegistrationRequired: true + } + }; + const initialData = { availableLineItems: [ { sellingPrice, @@ -1196,24 +758,36 @@ describe('coverageStatement.vue', () => { laborAmount: 0 } ] - }); - - const store = useMainStore(); - store.order.policy.policyLookupSuccessful = true; - store.isClaimRegistrationRequired = true; - store.order.policy.noCoverage = false; - store.order.damage.isRepair = true; - store.order.policy.deductible.repair = deductible; - - const to = { - query: { issPage: getRandomString(4, 10) } }; - const next = jest.fn(); + const { wrapper } = getMountedComponent(initialStore, initialData); + + // console.log(wrapper.vm.availableLineItems); + // await wrapper.setData({ + // availableLineItems: [ + // { + // sellingPrice, + // kitPrice: 0, + // laborAmount: 0 + // } + // ] + // }); + + // const store = useMainStore(); + // store.order.policy.policyLookupSuccessful = true; + // store.isClaimRegistrationRequired = true; + // store.order.policy.noCoverage = false; + // store.order.damage.isRepair = true; + // store.order.policy.deductible.repair = deductible; + + // const to = { + // query: { issPage: getRandomString(4, 10) } + // }; + // const next = jest.fn(); // SUT - coverageStatement.beforeRouteEnter.call(wrapper.vm, to, undefined, next); + // coverageStatement.beforeRouteEnter.call(wrapper.vm, to, undefined, next); // Assert - expect(store.registerClaim).toHaveBeenCalled(); + // expect(store.registerClaim).toHaveBeenCalled(); }); }); }); diff --git a/src/layouts/coverage-statement/coverage-statement.vue b/src/layouts/coverage-statement/coverage-statement.vue index f51f2905..06ee239d 100644 --- a/src/layouts/coverage-statement/coverage-statement.vue +++ b/src/layouts/coverage-statement/coverage-statement.vue @@ -118,7 +118,7 @@ import { useMainStore } from '@/store/index.js'; import vehicleQuestionsMixin from '@/mixins/vehicle-questions-mixin.js'; import globalRules from '@/constants/global-rules.js'; import baseFormMixin from '@/mixins/base-form-mixin.js'; -import navigationScenarios from '@/router/router-constants/navigation-scenarios.js'; +import { navigationScenarios } from '@/router/router-constants/navigation-scenarios.js'; export default { name: 'coverage-statement', From 79cae6ddd9c34a1a0e64d0b7b28edccfe00110e9 Mon Sep 17 00:00:00 2001 From: brydon1 Date: Mon, 31 Jul 2023 16:09:19 -0400 Subject: [PATCH 26/26] Fixing claim registration tests --- .../coverage-statement.spec.js | 48 +++---------------- .../coverage-statement/coverage-statement.vue | 2 +- 2 files changed, 7 insertions(+), 43 deletions(-) diff --git a/src/layouts/coverage-statement/coverage-statement.spec.js b/src/layouts/coverage-statement/coverage-statement.spec.js index 1877f831..261c31f1 100644 --- a/src/layouts/coverage-statement/coverage-statement.spec.js +++ b/src/layouts/coverage-statement/coverage-statement.spec.js @@ -704,32 +704,20 @@ describe('coverageStatement.vue', () => { expect(wrapper.vm.isADAS).toBeFalsy(); }); }); - describe.only('claim registration api call', () => { - // TODO fix test to actually work + describe('claim registration api call', () => { it('claim registration not required => method not called', async () => { // Arrange - getMountedComponent({ + const { wrapper } = getMountedComponent({ issConfig: { isClaimRegistrationRequired: false } }); - const store = useMainStore(); - // store.isClaimRegistrationRequired = false; - - // const to = { - // query: { issPage: getRandomString(4, 10) } - // }; - // const next = jest.fn(); - - // SUT - // coverageStatement.beforeRouteEnter.call(wrapper.vm, to, undefined, next); - // Assert - expect(store.registerClaim).not.toHaveBeenCalled(); + expect(wrapper.vm.mainStore.registerClaim).not.toHaveBeenCalled(); }); - it.only('claim registration required => register claim method called', async () => { + it('claim registration required => register claim method called', async () => { // Arrange const sellingPrice = getRandomInt(50, 100); const deductible = sellingPrice - 1; @@ -759,35 +747,11 @@ describe('coverageStatement.vue', () => { } ] }; + const { wrapper } = getMountedComponent(initialStore, initialData); - // console.log(wrapper.vm.availableLineItems); - // await wrapper.setData({ - // availableLineItems: [ - // { - // sellingPrice, - // kitPrice: 0, - // laborAmount: 0 - // } - // ] - // }); - - // const store = useMainStore(); - // store.order.policy.policyLookupSuccessful = true; - // store.isClaimRegistrationRequired = true; - // store.order.policy.noCoverage = false; - // store.order.damage.isRepair = true; - // store.order.policy.deductible.repair = deductible; - - // const to = { - // query: { issPage: getRandomString(4, 10) } - // }; - // const next = jest.fn(); - - // SUT - // coverageStatement.beforeRouteEnter.call(wrapper.vm, to, undefined, next); // Assert - // expect(store.registerClaim).toHaveBeenCalled(); + expect(wrapper.vm.mainStore.registerClaim).toHaveBeenCalled(); }); }); }); diff --git a/src/layouts/coverage-statement/coverage-statement.vue b/src/layouts/coverage-statement/coverage-statement.vue index 06ee239d..d72a4b90 100644 --- a/src/layouts/coverage-statement/coverage-statement.vue +++ b/src/layouts/coverage-statement/coverage-statement.vue @@ -316,7 +316,7 @@ export default { if (this.policyLookupSuccessful && useMainStore().isClaimRegistrationRequired && this.coveredAndServicePriceAboveOrEqualDeductible) { - await useMainStore().registerClaim().catch(() => {}); + await useMainStore().registerClaim()?.catch(() => {}); } vm.$refs.loadingModal.hideModal(); },