From 934d6abba3f3846e5891b86277c964b17a190cb5 Mon Sep 17 00:00:00 2001 From: Kroell Date: Fri, 3 Mar 2023 14:26:08 -0500 Subject: [PATCH 01/22] start of navigation for coverage-statement --- .../coverage-statement/coverage-statement.vue | 39 +++++++------------ src/mixins/vehicle-questions-mixin.js | 1 + src/router/router-constants/issPage-values.js | 1 + .../router-constants/navigation-scenarios.js | 2 + src/router/router-constants/routing-table.js | 27 +++++++++++++ 5 files changed, 44 insertions(+), 26 deletions(-) diff --git a/src/layouts/coverage-statement/coverage-statement.vue b/src/layouts/coverage-statement/coverage-statement.vue index 7778c6e6..fc02a350 100644 --- a/src/layouts/coverage-statement/coverage-statement.vue +++ b/src/layouts/coverage-statement/coverage-statement.vue @@ -28,7 +28,7 @@ @@ -44,36 +44,25 @@ import { Form } from 'vee-validate'; import siteFooter from '@/iss-components/site-footer/site-footer.vue'; import siteHeader from '@/iss-components/site-header/site-header.vue'; import siteSubHeader from '@/iss-components/site-sub-header/site-sub-header.vue'; -import vehicleBanner from '@/iss-components/vehicle-banner/vehicle-banner.vue'; import textBlock from "@/digital-components/text-block/text-block"; -import modal from "@/digital-components/modal/modal"; -import textLink from '@/ux-components/text-link/text-link.vue'; import recalModal from '@/layouts/coverage-statement/recal-modal/recal-modal.vue'; // Import Supporting Files -import { - fetchCmsContentForPage, - doesCopyContainTextLink, - splitCopyOnCMSPlaceHolder, - getRouterLinkDisplayTextFromCopy, - getRouterLinkRouteFromCopy -} from '@/helpers/cms-content-helper'; +import { fetchCmsContentForPage } from '@/helpers/cms-content-helper'; import { settleAllPromises } from '@/helpers/layout-helper'; import { getDamageString } from '@/helpers/damage-helper.js'; import { useMainStore } from "@/store"; +import vehicleQuestionsMixin from "@/mixins/vehicle-questions-mixin"; export default { name: 'coverage-statement', - mixins: [baseFormMixin], + mixins: [baseFormMixin, vehicleQuestionsMixin], components: { siteFooter, siteHeader, siteSubHeader, Form, - vehicleBanner, textBlock, - modal, - textLink, recalModal }, computed: { @@ -130,22 +119,20 @@ export default { }); }, methods: { - doesCopyContainTextLink, - splitCopyOnCMSPlaceHolder, - getRouterLinkDisplayTextFromCopy, - getRouterLinkRouteFromCopy, arePagePrerequisiteValid() { return true; }, - backButtonAction() { - /** - * this.navigationScenarios comes from base-mixin - */ - this.$router.navigate(this.navigationScenarios.CLICKED_BACK, this.$route); + async forwardButtonAction() { + return this.navigateForward(); + }, + + navigateForward() { + this.$router.navigate( + this.navigationScenarios.CLICKED_FORWARD_COVERAGE_STATEMENT, + this.$route + ); }, }, - async forwardButtonAction() {}, - resetDependentState() {}, }; diff --git a/src/mixins/vehicle-questions-mixin.js b/src/mixins/vehicle-questions-mixin.js index 8a67d9b4..28fdc4b7 100644 --- a/src/mixins/vehicle-questions-mixin.js +++ b/src/mixins/vehicle-questions-mixin.js @@ -50,6 +50,7 @@ export default { issPageValues.MOLDING_QUESTIONS, issPageValues.CAPABILITY_QUESTIONS, issPageValues.QUOTE, + issPageValues.COVERAGE_STATEMENT, ]; return ( diff --git a/src/router/router-constants/issPage-values.js b/src/router/router-constants/issPage-values.js index eb882ecc..5c5d41a5 100644 --- a/src/router/router-constants/issPage-values.js +++ b/src/router/router-constants/issPage-values.js @@ -17,6 +17,7 @@ export const issPageValues = { MOLDING_QUESTIONS: "molding-questions", CAPABILITY_QUESTIONS: "capability-questions", COVERAGE_STATEMENT: "coverage-statement", + PROVIDER_PREFERENCE: "provider-preference", REVEAL: "reveal", ESTIMATE: "estimate", ADDRESS_VEHICLES: "address-vehicles", diff --git a/src/router/router-constants/navigation-scenarios.js b/src/router/router-constants/navigation-scenarios.js index 38601f9d..a02eddb7 100644 --- a/src/router/router-constants/navigation-scenarios.js +++ b/src/router/router-constants/navigation-scenarios.js @@ -40,6 +40,8 @@ const navigationScenarios = { CLICKED_BACK_WITH_CAPABILITY_QUESTIONS: "CLICKED_BACK_WITH_CAPABILITY_QUESTIONS", CLICKED_BACK_WITH_VIN_AND_NO_MORE_QUESTIONS: "CLICKED_BACK_WITH_VIN_AND_NO_MORE_QUESTIONS", CLICKED_BACK_WITH_NO_VIN_NOR_QUESTIONS: "CLICKED_BACK_WITH_NO_VIN_NOR_QUESTIONS", + + CLICKED_FORWARD_COVERAGE_STATEMENT: "CLICKED_FORWARD_COVERAGE_STATEMENT", }; export { navigationScenarios }; \ No newline at end of file diff --git a/src/router/router-constants/routing-table.js b/src/router/router-constants/routing-table.js index 95b1d2a3..4775600b 100644 --- a/src/router/router-constants/routing-table.js +++ b/src/router/router-constants/routing-table.js @@ -393,6 +393,33 @@ const routingTable = function(store) { }, ], }, + { + issPageValue: issPageValues.COVERAGE_STATEMENT, + maps: [ + { + scenario: navigationScenarios.CLICKED_BACK_WITH_PART_QUESTIONS, + destinationIssPageValue: issPageValues.PART_QUESTIONS, + }, + { + scenario: navigationScenarios.CLICKED_BACK_WITH_MULTIPLE_PARTS_TO_CHOOSE, + destinationIssPageValue: issPageValues.VEHICLE_PARTS, + }, + { + scenario: navigationScenarios.CLICKED_BACK_WITH_MOLDING_QUESTIONS, + destinationIssPageValue: issPageValues.MOLDING_QUESTIONS, + }, + { + scenario: navigationScenarios.CLICKED_BACK_WITH_CAPABILITY_QUESTIONS, + destinationIssPageValue: issPageValues.CAPABILITY_QUESTIONS, + }, + { + scenario: navigationScenarios.CLICKED_FORWARD_COVERAGE_STATEMENT, + destinationIssPageValue: issPageValues.PROVIDER_PREFERENCE, + }, + ], + + }, + ]; }; From 1fa2810eefd026bbe55754109a3061adb130bdd3 Mon Sep 17 00:00:00 2001 From: Kroell Date: Fri, 3 Mar 2023 14:28:41 -0500 Subject: [PATCH 02/22] styling fix for modal window --- .../coverage-statement/coverage-statement.vue | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/src/layouts/coverage-statement/coverage-statement.vue b/src/layouts/coverage-statement/coverage-statement.vue index fc02a350..21f98fb1 100644 --- a/src/layouts/coverage-statement/coverage-statement.vue +++ b/src/layouts/coverage-statement/coverage-statement.vue @@ -137,10 +137,10 @@ export default { From 54b0e07d1bceb5cfa7769ac4175363bf2ac10f4b Mon Sep 17 00:00:00 2001 From: Kroell Date: Mon, 6 Mar 2023 14:22:50 -0500 Subject: [PATCH 03/22] additional navigation scenarios --- src/router/router-constants/routing-table.js | 8 ++++++++ 1 file changed, 8 insertions(+) diff --git a/src/router/router-constants/routing-table.js b/src/router/router-constants/routing-table.js index 4775600b..a3f0b523 100644 --- a/src/router/router-constants/routing-table.js +++ b/src/router/router-constants/routing-table.js @@ -396,6 +396,14 @@ const routingTable = function(store) { { issPageValue: issPageValues.COVERAGE_STATEMENT, maps: [ + { + scenario: navigationScenarios.CLICKED_BACK_WITH_VIN_AND_NO_MORE_QUESTIONS, + destinationIssPageValue: issPageValues.VIN_LOOKUP, + }, + { + scenario: navigationScenarios.CLICKED_BACK_WITH_NO_VIN_NOR_QUESTIONS, + destinationIssPageValue: issPageValues.ESTIMATE, + }, { scenario: navigationScenarios.CLICKED_BACK_WITH_PART_QUESTIONS, destinationIssPageValue: issPageValues.PART_QUESTIONS, From a933503b04989641c6dbb8a7035c8b9454ef198c Mon Sep 17 00:00:00 2001 From: Kroell Date: Mon, 6 Mar 2023 16:05:00 -0500 Subject: [PATCH 04/22] fix to arePrereqsValid method --- src/layouts/coverage-statement/coverage-statement.vue | 8 ++++++-- 1 file changed, 6 insertions(+), 2 deletions(-) diff --git a/src/layouts/coverage-statement/coverage-statement.vue b/src/layouts/coverage-statement/coverage-statement.vue index 21f98fb1..c6284d37 100644 --- a/src/layouts/coverage-statement/coverage-statement.vue +++ b/src/layouts/coverage-statement/coverage-statement.vue @@ -119,9 +119,13 @@ export default { }); }, methods: { - arePagePrerequisiteValid() { - return true; + arePagePrerequisitesValid() { + if (useMainStore().order.vehicle.carId) { + return true; + } + return false; }, + async forwardButtonAction() { return this.navigateForward(); }, From 7310d43c1a96dc24c3d1f7cf4be7177f0618360b Mon Sep 17 00:00:00 2001 From: Kroell Date: Mon, 6 Mar 2023 16:05:25 -0500 Subject: [PATCH 05/22] start of unit testing for coverage statement --- .../coverage-statement.spec.js | 115 ++++++++++++++++++ 1 file changed, 115 insertions(+) create mode 100644 src/layouts/coverage-statement/coverage-statement.spec.js diff --git a/src/layouts/coverage-statement/coverage-statement.spec.js b/src/layouts/coverage-statement/coverage-statement.spec.js new file mode 100644 index 00000000..c94576cc --- /dev/null +++ b/src/layouts/coverage-statement/coverage-statement.spec.js @@ -0,0 +1,115 @@ +// 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 vehicleQuestionsMixin from "@/mixins/vehicle-questions-mixin"; +import baseFormMixin from "@/mixins/base-form-mixin"; + +// Mock our module for promises. +jest.mock("@/helpers/layout-helper.js", () => ({ + settleAllPromises: jest.fn(), +})); + +// Mock fetchCmsContentForPage +jest.mock("@/helpers/cms-content-helper", () => ({ + fetchCmsContentForPage: jest.fn(), +})); + +describe("coverage-statement.vue", () => { + describe("display correct coverage statement", () => { + test("If damage is Repair, display NonADASRepairNextSteps statement", async () => { + // Arrange + useMainStore().pageData = jest.fn(); + useMainStore().lineItems = { glassParts: null}; + useMainStore().order.damage.isRepair = true; + + const { wrapper, cmsContent } = setupMocks({}); + + + + //Act + coverageStatement.beforeRouteEnter.call( + wrapper.vm, + { query: { issPage: "coverage-statement" } }, + undefined, + (c) => c(wrapper.vm) + ); + + // Assert + expect(wrapper).toBeVisible(); + }) + }) +}) + + + + +function setupMocks({ + cmsWidgetName = "CMS widget name goes here", + mountOptionsMockData = { + router: { + navigate: jest.fn(), + }, + actionList: [ + { + actionName: "getPartsOrQuestions", + data: {}, + }, + ], + route: { + query: { + issPage: "coverage-statement", + }, + }, + data() { + return { + computedSwitcher: [ + { + glassLocation: "Windshield", + glassName: "Single", + answerData: { + answerResult: "FW04848", + answeredQuestions: [], + }, + }, + ], + }; + }, + questionsData: { + get() { + return this.computedSwitcher; + }, + set(val) { + this.computedSwitcher = val; + }, + }, + }, +}) { + + useMainStore().getPartsOrQuestions = jest.fn(() => { + return { + data: { + partsOrQuestions: [], + } + }; + }); + + const mountOptions = getMountOptions({ + ...mountOptionsMockData, + mixins: [baseFormMixin, vehicleQuestionsMixin], + }); + mountOptions["attachTo"] = document.body; + + const wrapper = shallowMount(coverageStatement, mountOptions); + + //Mock CMS content + const cmsContent = { + Name: cmsWidgetName, + }; + + return { wrapper, cmsContent }; +} + From 219a8964deacaeecda015cf9538b999f0490e172 Mon Sep 17 00:00:00 2001 From: Kroell Date: Tue, 7 Mar 2023 16:23:39 -0500 Subject: [PATCH 06/22] EOD commit - unit testing for coverage statement --- .../coverage-statement.spec.js | 238 ++++++++++++------ .../coverage-statement/coverage-statement.vue | 2 +- 2 files changed, 160 insertions(+), 80 deletions(-) diff --git a/src/layouts/coverage-statement/coverage-statement.spec.js b/src/layouts/coverage-statement/coverage-statement.spec.js index c94576cc..09c48164 100644 --- a/src/layouts/coverage-statement/coverage-statement.spec.js +++ b/src/layouts/coverage-statement/coverage-statement.spec.js @@ -1,115 +1,195 @@ // Components import coverageStatement from "@/layouts/coverage-statement/coverage-statement.vue"; -// Supporting Files +// Supporting files import { shallowMount } from "@vue/test-utils"; import { getMountOptions } from "@/helpers/unit-test-helper.js"; import { useMainStore } from "@/store"; -import vehicleQuestionsMixin from "@/mixins/vehicle-questions-mixin"; import baseFormMixin from "@/mixins/base-form-mixin"; +import vehicleQuestionsMixin from "@/mixins/vehicle-questions-mixin"; +import { applicationConfig } from "@/constants/application-config"; +//import { fetchCmsContentForPage } from "@/helpers/cms-content-helper"; +import { settleAllPromises } from "@/helpers/layout-helper.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 -jest.mock("@/helpers/cms-content-helper", () => ({ - fetchCmsContentForPage: jest.fn(), -})); +// // Mock fetchCmsContentForPage +// jest.mock("@/helpers/cms-content-helper", () => ({ +// fetchCmsContentForPage: jest.fn(), +// })); -describe("coverage-statement.vue", () => { - describe("display correct coverage statement", () => { - test("If damage is Repair, display NonADASRepairNextSteps statement", async () => { +describe("coverage-statement.vue...", () => { + describe("method arePagePrerequisitesValid...", () => { + test("Should return true for valid page requisites if carId exists", () => { // Arrange - useMainStore().pageData = jest.fn(); - useMainStore().lineItems = { glassParts: null}; - useMainStore().order.damage.isRepair = true; - - const { wrapper, cmsContent } = setupMocks({}); - + useMainStore().lineItems = { + glassParts: + [ + { + partNumber: "DQ12204GTYNOEM", + requiresRecalibration: false, + } + ] + }; + useMainStore().vehicle = { carId: "TEST_CAR_ID" }; + const { wrapper } = setupMocks({}); - //Act - coverageStatement.beforeRouteEnter.call( - wrapper.vm, - { query: { issPage: "coverage-statement" } }, - undefined, - (c) => c(wrapper.vm) - ); + // Act + const result = wrapper.vm.arePagePrerequisitesValid(); - // Assert - expect(wrapper).toBeVisible(); - }) - }) -}) + //Assert + expect(result).toBe(true); + wrapper.unmount(); + }); + test("Should return false for valid page requisites if carId is missing", () => { + // Arrange + useMainStore().lineItems = { + glassParts: + [ + { + partNumber: "DQ12204GTYNOEM", + requiresRecalibration: false, + } + ] + }; + + const { wrapper } = setupMocks({}); + useMainStore().vehicle = { carId: null }; + + // Act + const result = wrapper.vm.arePagePrerequisitesValid(); + + //Assert + expect(result).toBeFalsy(); + + wrapper.unmount(); + }); + }); +}); + +const mockMixin = { + methods: { + getCmsContent: jest.fn((contentName) => { + if (contentName === "UnverifiedADASNextStepsWidget") { + return "ADASReplaceTestReturn" + } + else if (contentName === "UnverifiedNonADASNextStepsWidget") { + return "NonADASReplaceTestReturn" + } + return null; + }), + } +}; function setupMocks({ - cmsWidgetName = "CMS widget name goes here", - mountOptionsMockData = { - router: { - navigate: jest.fn(), - }, - actionList: [ - { - actionName: "getPartsOrQuestions", - data: {}, - }, - ], - route: { - query: { - issPage: "coverage-statement", - }, - }, - data() { - return { - computedSwitcher: [ - { - glassLocation: "Windshield", - glassName: "Single", - answerData: { - answerResult: "FW04848", - answeredQuestions: [], - }, - }, - ], - }; - }, - questionsData: { - get() { - return this.computedSwitcher; - }, - set(val) { - this.computedSwitcher = val; - }, - }, - }, + cmsBodyText = "Body text goes here", + //pageHeaderWidgetHeaderText, + // mountOptionsMockData = { + // router: { + // navigate: jest.fn() + // }, + // route: { + // query: { + // issPage: "coverage-statement", + // } + // } + // } }) { - - useMainStore().getPartsOrQuestions = jest.fn(() => { - return { - data: { - partsOrQuestions: [], - } - }; - }); - + useMainStore().order = { + vehicle: { + carId: "TEST", + }, + lineItems: { + glassParts: [ + { + canSafeliteRecalibrate: false, + childParts: null, + color: "Green Tint", + description: "solar, driver side, encap", + partNumber: "DQ12204GTYNOEM", + partType: "DRIVER REAR QUARTER GLASS", + recalibrationType: null, + requiresCapabilityQuestions: false, + requiresRecalibration: false, + } + ] + }, + damage: { + isRepair: false, + } + }; const mountOptions = getMountOptions({ - ...mountOptionsMockData, - mixins: [baseFormMixin, vehicleQuestionsMixin], + // ...mountOptionsMockData, + // mixins: [baseFormMixin, vehicleQuestionsMixin], }); - mountOptions["attachTo"] = document.body; + //mountOptions["attachTo"] = document.body; + // const apiResponses = { + // cmsContent: { + // SiteHeaderWidget: { + // LogoImage: + // `${applicationConfig.ISS_DEV_CMS_DOMAIN}/images/default-source/default-album/logos/insuranceLogo.jpg`, + // }, + // SiteSubHeaderWidget: pageHeaderWidgetHeaderText, + // verifyingCoverageStatement: "We're verifying your coverage", + // continueWithSchedulingCopy: "Go ahead and continue with scheduling while we verify your coverage. We'll let you know what deductible amount, if any, applies.", + // whatHappensNextCopy: "What happens next:", + // UnverifiedADASNextStepsWidget: { + // BodyText: "ADASReplace body text goes here", + // }, + // UnverifiedNonADASNextStepsWidget: { + // BodyText: "NonADASReplace body text goes here", + // }, + // UnverifiedNonADASRepairWidget: { + // BodyText: "NonADASRepair body text goes here", + // }, + // }, + // }; + + + // const apiResponses = { + // cmsContent: {}, + // }; + + + mountOptions.mixins = [mockMixin]; + //settleAllPromises.mockImplementation(() => apiResponses); + //fetchCmsContentForPage.mockImplementation(() => Promise.resolve()); + const wrapper = shallowMount(coverageStatement, mountOptions); //Mock CMS content const cmsContent = { - Name: cmsWidgetName, + BodyText: cmsBodyText, + // UnverifiedADASNextStepsWidget: { + // BodyText: "ADASReplace body text goes here", + // }, + // UnverifiedNonADASNextStepsWidget: { + // BodyText: "NonADASReplace body text goes here", + // }, + // UnverifiedNonADASRepairWidget: { + // BodyText: "NonADASRepair body text goes here", + // }, }; + //wrapper.vm.getCmsContent = jest.fn().mockImplementation(() => ""); + //wrapper.vm.setCmsContent = jest.fn(); + return { wrapper, cmsContent }; + + + + } diff --git a/src/layouts/coverage-statement/coverage-statement.vue b/src/layouts/coverage-statement/coverage-statement.vue index c6284d37..637ba8b2 100644 --- a/src/layouts/coverage-statement/coverage-statement.vue +++ b/src/layouts/coverage-statement/coverage-statement.vue @@ -23,7 +23,7 @@ cmsWidgetName="whatHappensNextCopy" class="mt-4 mb-2 fw-bold" /> -
+
Date: Wed, 8 Mar 2023 15:44:13 -0500 Subject: [PATCH 07/22] display correct coverage statement unit tests --- .../coverage-statement.spec.js | 226 ++++++++++-------- .../coverage-statement/coverage-statement.vue | 10 +- 2 files changed, 126 insertions(+), 110 deletions(-) diff --git a/src/layouts/coverage-statement/coverage-statement.spec.js b/src/layouts/coverage-statement/coverage-statement.spec.js index 09c48164..bf4ed111 100644 --- a/src/layouts/coverage-statement/coverage-statement.spec.js +++ b/src/layouts/coverage-statement/coverage-statement.spec.js @@ -5,10 +5,10 @@ import coverageStatement from "@/layouts/coverage-statement/coverage-statement.v import { shallowMount } from "@vue/test-utils"; import { getMountOptions } from "@/helpers/unit-test-helper.js"; import { useMainStore } from "@/store"; -import baseFormMixin from "@/mixins/base-form-mixin"; +import baseMixin from "@/mixins/base-mixin"; import vehicleQuestionsMixin from "@/mixins/vehicle-questions-mixin"; import { applicationConfig } from "@/constants/application-config"; -//import { fetchCmsContentForPage } from "@/helpers/cms-content-helper"; +import { fetchCmsContentForPage } from "@/helpers/cms-content-helper"; import { settleAllPromises } from "@/helpers/layout-helper.js"; jest.mock("@/helpers/damage-helper", () => ({ @@ -20,62 +20,105 @@ jest.mock("@/helpers/layout-helper.js", () => ({ settleAllPromises: jest.fn(), })); -// // Mock fetchCmsContentForPage -// jest.mock("@/helpers/cms-content-helper", () => ({ -// fetchCmsContentForPage: jest.fn(), -// })); +// Mock fetchCmsContentForPage +jest.mock("@/helpers/cms-content-helper", () => ({ + fetchCmsContentForPage: jest.fn(), +})); describe("coverage-statement.vue...", () => { describe("method arePagePrerequisitesValid...", () => { - test("Should return true for valid page requisites if carId exists", () => { + test("Should return true for valid page requisites if vin exists", () => { // Arrange - useMainStore().lineItems = { - glassParts: - [ - { - partNumber: "DQ12204GTYNOEM", - requiresRecalibration: false, - } - ] - }; - useMainStore().vehicle = { carId: "TEST_CAR_ID" }; const { wrapper } = setupMocks({}); - // Act - const result = wrapper.vm.arePagePrerequisitesValid(); + let arePagePrerequisitesValid = wrapper.vm.arePagePrerequisitesValid(); //Assert - expect(result).toBe(true); - - wrapper.unmount(); + expect(arePagePrerequisitesValid).toBe(true); }); - test("Should return false for valid page requisites if carId is missing", () => { + test("Should return false for valid page requisites if vin is missing", () => { // Arrange - useMainStore().lineItems = { - glassParts: - [ - { - partNumber: "DQ12204GTYNOEM", - requiresRecalibration: false, - } - ] - }; - const { wrapper } = setupMocks({}); - - useMainStore().vehicle = { carId: null }; + + useMainStore().order.vehicle.vin = null; // Act - const result = wrapper.vm.arePagePrerequisitesValid(); + let arePagePrerequisitesValid = wrapper.vm.arePagePrerequisitesValid(); //Assert - expect(result).toBeFalsy(); - - wrapper.unmount(); + expect(arePagePrerequisitesValid).toBe(false); }); }); + describe("navigation", () => { + // test("Vehicle has part questions, navigateBack triggers a router.navigate change with correct scenario", async () => { + // //Arrange + // const { wrapper } = setupMocks({ + // mountOptionsMockData: { + // router: { + // navigate: jest.fn(), + // }, + // route: { + // query: { + // issPage: "coverage-statement", + // }, + // }, + // }, + // }); + + // //Act + // coverageStatement.beforeRouteEnter.call( + // wrapper.vm, + // { query: { issPage: "coverage-statement" } }, + // undefined, + // (c) => c(wrapper.vm) + // ); + + // wrapper.vm.navigateBack(); + + // //Assert + // expect(wrapper.vm.$router.navigate).toHaveBeenCalledWith( + // navigationScenarios.CLICKED_BACK_WITH_NO_VIN_NOR_QUESTIONS, + // wrapper.vm.$route + // ); + // }); + }); + 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.unverifiedNonADASRepairBodyText).toEqual("NonADASRepairTestReturn"); + }) + + test("If damage is NonADAS Replace, display NonADASReplace coverage statement", async () => { + // Arrange + const wrapper = shallowMount(coverageStatement, { + mixins: [mockMixin], + }); + + // Assert + expect(wrapper.vm.unverifiedNonADASNextStepsBodyText).toEqual("NonADASReplaceTestReturn"); + }) + + test("If damage is ADAS Replace, display ADASReplace coverage statement", async () => { + // Arrange + const wrapper = shallowMount(coverageStatement, { + mixins: [mockMixin], + }); + + useMainStore().order.lineItems.requiresRecalibration = true; + + // Assert + expect(wrapper.vm.unverifiedADASNextStepsBodyText).toEqual("ADASReplaceTestReturn"); + }) + }) }); const mockMixin = { @@ -84,6 +127,9 @@ const mockMixin = { if (contentName === "UnverifiedADASNextStepsWidget") { return "ADASReplaceTestReturn" } + else if (contentName === "UnverifiedNonADASRepairWidget") { + return "NonADASRepairTestReturn" + } else if (contentName === "UnverifiedNonADASNextStepsWidget") { return "NonADASReplaceTestReturn" } @@ -93,22 +139,30 @@ const mockMixin = { }; function setupMocks({ - cmsBodyText = "Body text goes here", - //pageHeaderWidgetHeaderText, - // mountOptionsMockData = { - // router: { - // navigate: jest.fn() - // }, - // route: { - // query: { - // issPage: "coverage-statement", - // } - // } - // } +pageHeaderWidgetHeaderText, +// cmsPageContent = "CMS content goes here", +// unverifiedNonADASRepairBodyText = "repair body text", }) { + //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", + }, + }; useMainStore().order = { vehicle: { - carId: "TEST", + vin: "TESTVIN", }, lineItems: { glassParts: [ @@ -129,67 +183,29 @@ function setupMocks({ isRepair: false, } }; + + const apiPromise = Promise.resolve(apiResponses); + + settleAllPromises.mockImplementation(() => apiPromise); + fetchCmsContentForPage.mockImplementation(() => Promise.resolve()); + const mountOptions = getMountOptions({ - // ...mountOptionsMockData, - // mixins: [baseFormMixin, vehicleQuestionsMixin], + }); - //mountOptions["attachTo"] = document.body; - // const apiResponses = { - // cmsContent: { - // SiteHeaderWidget: { - // LogoImage: - // `${applicationConfig.ISS_DEV_CMS_DOMAIN}/images/default-source/default-album/logos/insuranceLogo.jpg`, - // }, - // SiteSubHeaderWidget: pageHeaderWidgetHeaderText, - // verifyingCoverageStatement: "We're verifying your coverage", - // continueWithSchedulingCopy: "Go ahead and continue with scheduling while we verify your coverage. We'll let you know what deductible amount, if any, applies.", - // whatHappensNextCopy: "What happens next:", - // UnverifiedADASNextStepsWidget: { - // BodyText: "ADASReplace body text goes here", - // }, - // UnverifiedNonADASNextStepsWidget: { - // BodyText: "NonADASReplace body text goes here", - // }, - // UnverifiedNonADASRepairWidget: { - // BodyText: "NonADASRepair body text goes here", - // }, - // }, - // }; - - - // const apiResponses = { - // cmsContent: {}, - // }; - - - mountOptions.mixins = [mockMixin]; - //settleAllPromises.mockImplementation(() => apiResponses); - //fetchCmsContentForPage.mockImplementation(() => Promise.resolve()); + mountOptions.mixins = [baseMixin, vehicleQuestionsMixin]; const wrapper = shallowMount(coverageStatement, mountOptions); - - //Mock CMS content - const cmsContent = { - BodyText: cmsBodyText, - // UnverifiedADASNextStepsWidget: { - // BodyText: "ADASReplace body text goes here", - // }, - // UnverifiedNonADASNextStepsWidget: { - // BodyText: "NonADASReplace body text goes here", - // }, - // UnverifiedNonADASRepairWidget: { - // BodyText: "NonADASRepair body text goes here", - // }, - }; - - //wrapper.vm.getCmsContent = jest.fn().mockImplementation(() => ""); - //wrapper.vm.setCmsContent = jest.fn(); - return { wrapper, cmsContent }; - + wrapper.vm.setCmsContent = baseMixin.methods.setCmsContent; + // //Mock CMS content + // const cmsContent = { + // PageContent: cmsPageContent, + // NonADASRepairBodyText: unverifiedNonADASRepairBodyText, + // }; + return { wrapper }; } diff --git a/src/layouts/coverage-statement/coverage-statement.vue b/src/layouts/coverage-statement/coverage-statement.vue index 637ba8b2..09891112 100644 --- a/src/layouts/coverage-statement/coverage-statement.vue +++ b/src/layouts/coverage-statement/coverage-statement.vue @@ -84,16 +84,16 @@ export default { } }, continueWithSchedulingBodyText() { - return this.getCmsContent('continueWithSchedulingCopy', 'BodyText'); + 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'); + return this.getCmsContent("UnverifiedNonADASRepairWidget", "BodyText"); }, damageText() { var damageString = getDamageString(); @@ -120,7 +120,7 @@ export default { }, methods: { arePagePrerequisitesValid() { - if (useMainStore().order.vehicle.carId) { + if (useMainStore().order.vehicle.vin) { return true; } return false; From f62d462771f86e7e5fe6305b4bcdfdb21eb1e5c1 Mon Sep 17 00:00:00 2001 From: Kroell Date: Wed, 8 Mar 2023 16:15:29 -0500 Subject: [PATCH 08/22] unit test forward navigation --- .../coverage-statement/coverage-statement.spec.js | 13 +++++++++++++ 1 file changed, 13 insertions(+) diff --git a/src/layouts/coverage-statement/coverage-statement.spec.js b/src/layouts/coverage-statement/coverage-statement.spec.js index bf4ed111..a0142942 100644 --- a/src/layouts/coverage-statement/coverage-statement.spec.js +++ b/src/layouts/coverage-statement/coverage-statement.spec.js @@ -52,6 +52,19 @@ 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(); + }); + // test("Vehicle has part questions, navigateBack triggers a router.navigate change with correct scenario", async () => { // //Arrange // const { wrapper } = setupMocks({ From c4a69a273c30998047b7e743e0c1de6216d92b7c Mon Sep 17 00:00:00 2001 From: Kroell Date: Wed, 8 Mar 2023 16:15:40 -0500 Subject: [PATCH 09/22] unit tests for recal modal --- .../recal-modal/recal-modal.spec.js | 68 +++++++++++++++++++ 1 file changed, 68 insertions(+) create mode 100644 src/layouts/coverage-statement/recal-modal/recal-modal.spec.js diff --git a/src/layouts/coverage-statement/recal-modal/recal-modal.spec.js b/src/layouts/coverage-statement/recal-modal/recal-modal.spec.js new file mode 100644 index 00000000..3ab73b9a --- /dev/null +++ b/src/layouts/coverage-statement/recal-modal/recal-modal.spec.js @@ -0,0 +1,68 @@ +import { shallowMount } from "@vue/test-utils"; +import recalModal from "@/layouts/coverage-statement/recal-modal/recal-modal.vue"; + +describe("modal.vue", () => { + it("Should display header text when HeaderText is defined in the CMS", async () => { + // Act + const wrapper = shallowMount(recalModal, { + mixins: [mockMixin], + props: { + cmsWidgetName: "test", + }, + attachTo: document.body, + }); + expect(wrapper.html()).toEqual(expect.stringContaining(mockCmsContent["HeaderText"])); + }); + + it("Should display subheader text when SubheaderText is defined in the CMS", async () => { + // Act + const wrapper = shallowMount(recalModal, { + mixins: [mockMixin], + props: { + cmsWidgetName: "test", + }, + attachTo: document.body, + }); + expect(wrapper.html()).toEqual(expect.stringContaining(mockCmsContent["SubheaderText"])); + }); + + it("Should insert image url when Image is defined in the CMS", async () => { + // Act + const wrapper = shallowMount(recalModal, { + mixins: [mockMixin], + props: { + cmsWidgetName: "test", + }, + attachTo: document.body, + }); + expect(wrapper.html()).toEqual(expect.stringContaining(mockCmsContent["Image"])); + }); + + it("Should display body text when BodyText is defined in the CMS", async () => { + // Act + const wrapper = shallowMount(recalModal, { + mixins: [mockMixin], + props: { + cmsWidgetName: "test", + }, + attachTo: document.body, + }); + expect(wrapper.html()).toEqual(expect.stringContaining(mockCmsContent["BodyText"])); + }); +}); + +const mockMixin = { + methods: { + getCmsContent: jest.fn((widgetName, cmsFieldName) => { + return mockCmsContent[cmsFieldName]; + }), + }, +}; + +const mockCmsContent = { + HeaderText: "Sample header text here.", + SubheaderText: "Sample subheader text here.", + Image: "https://www.sampleImage.sample", + BodyText: "Sample body text here.", + FooterText: "Sample footer text here.", +}; From 162743b75ffc03d8a738fb6e0a06ad2f9ec565f0 Mon Sep 17 00:00:00 2001 From: Kroell Date: Thu, 9 Mar 2023 12:08:41 -0500 Subject: [PATCH 10/22] added missing alert to vin-lookup --- src/constants/vehicle-lookup-alert-types.js | 1 + .../perfect-match-alert.vue | 27 +++++++++++++++++++ .../vin-lookup-alerts/vin-lookup-alerts.vue | 9 +++++++ 3 files changed, 37 insertions(+) create mode 100644 src/layouts/vin-lookup/vin-lookup-alerts/perfect-match-alert/perfect-match-alert.vue diff --git a/src/constants/vehicle-lookup-alert-types.js b/src/constants/vehicle-lookup-alert-types.js index 3bbf686e..4579c7b4 100644 --- a/src/constants/vehicle-lookup-alert-types.js +++ b/src/constants/vehicle-lookup-alert-types.js @@ -1,6 +1,7 @@ const vehicleLookupAlertTypes = Object.freeze({ NOT_FOUND: 'notFound', NOT_MATCHED: 'notMatched', + PERFECT_MATCH: 'perfectMatch', }); export default vehicleLookupAlertTypes; diff --git a/src/layouts/vin-lookup/vin-lookup-alerts/perfect-match-alert/perfect-match-alert.vue b/src/layouts/vin-lookup/vin-lookup-alerts/perfect-match-alert/perfect-match-alert.vue new file mode 100644 index 00000000..0c0f5e50 --- /dev/null +++ b/src/layouts/vin-lookup/vin-lookup-alerts/perfect-match-alert/perfect-match-alert.vue @@ -0,0 +1,27 @@ + + + + \ No newline at end of file diff --git a/src/layouts/vin-lookup/vin-lookup-alerts/vin-lookup-alerts.vue b/src/layouts/vin-lookup/vin-lookup-alerts/vin-lookup-alerts.vue index 1e6e488a..1bf94a09 100644 --- a/src/layouts/vin-lookup/vin-lookup-alerts/vin-lookup-alerts.vue +++ b/src/layouts/vin-lookup/vin-lookup-alerts/vin-lookup-alerts.vue @@ -9,18 +9,24 @@ +