diff --git a/jest.config.js b/jest.config.js index a8063f324..7da5d3cd2 100644 --- a/jest.config.js +++ b/jest.config.js @@ -33,19 +33,20 @@ module.exports = { "!src/layouts/payment-pia-return/*.vue", // Temp test exclusion while in development "!src/layouts/insurance/*.vue", // Temp test exclusion while in development "!src/layouts/insurance-company/*.vue", // Temp test exclusion while in development - "!src/digital-components/date-picker/**/*.vue", // Temp test exclusion while in development + "!src/layouts/policy-info/*.vue", + "!src/layouts/policy-vehicle/*.vue", + "!src/layouts/policy-driver/*.vue", + "!src/layouts/duplicate-check/*.vue", + "!src/layouts/endorsements/*.vue", + "!src/layouts/policy-info-submitted/*.vue", + "!src/layouts/recalibration-info/*.vue", + "!src/layouts/coverage-statement/*.vue", + "!src/layouts/insurance-details/*.vue", + "!src/layouts/verify-details/*.vue", "!src/layouts/insurance-company/insurance-company-question/*.vue", // Temp test exclusion while in development "!src/experiment-components/*.vue", - // END ], // ! means exclude from coverage. testMatch: ["**/*.spec.(js|jsx|ts|tsx)|**/__tests__/*.(js|jsx|ts|tsx)"], - coverageThreshold: { - global: { - statements: 68, - }, - }, - // Uncomment this to avoid the massive amount of warnings we are getting for onSubmit and onInvalidSubmit - //silent: true, }; process.env = Object.assign(process.env, environmentVariablesWithDefaults); \ No newline at end of file diff --git a/src/constants/progress-bar-mapper.js b/src/constants/progress-bar-mapper.js index 7f0b49f8a..f17cd282b 100644 --- a/src/constants/progress-bar-mapper.js +++ b/src/constants/progress-bar-mapper.js @@ -56,6 +56,38 @@ export const pageProgressMapper = { percent: 55, step: 2, }, + "duplicate-check": { + percent: 55, + step: 2, + }, + "policy-vehicle": { + percent: 55, + step: 2, + }, + "policy-driver": { + percent: 55, + step: 2, + }, + "endorsements": { + percent: 55, + step: 2, + }, + "policy-info-submitted": { + percent: 55, + step: 2, + }, + "recalibration-info": { + percent: 55, + step: 2, + }, + "coverage-statement": { + percent: 55, + step: 2, + }, + "verify-details": { + percent: 55, + step: 2, + }, quote: { percent: 60, step: 2, 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 000000000..2d4fd3f8d --- /dev/null +++ b/src/layouts/coverage-statement/coverage-statement.spec.js @@ -0,0 +1,70 @@ +import coverageStatement from "@/layouts/coverage-statement/coverage-statement.vue"; +import { shallowMount } from "@vue/test-utils"; +import { getMountOptions } from "@/helpers/unit-test-helper.js"; +import { fetchCmsContentForPage } from "@/helpers/cms-content-helper"; +import { settleAllPromises } from "@/helpers/layout-helper"; + +// 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("component rendering", () => { + test("renders funnelHeader component", () => { + const { wrapper } = setupMocks(); + expect(wrapper.findComponent({ name: "funnelHeader" }).exists()).toBe(true); + }); + + test("renders funnelSubHeader component", () => { + const { wrapper } = setupMocks(); + expect(wrapper.findComponent({ name: "funnelSubHeader" }).exists()).toBe(true); + }); + + test("renders navbar component", () => { + const { wrapper } = setupMocks(); + expect(wrapper.findComponent({ name: "navbar" }).exists()).toBe(true); + }); + + test("renders Form component", () => { + const { wrapper } = setupMocks(); + expect(wrapper.findComponent({ name: "Form" }).exists()).toBe(true); + }); + }); + + describe("methods", () => { + test("arePagePrerequisitesValid returns true", () => { + const { wrapper } = setupMocks(); + expect(wrapper.vm.arePagePrerequisitesValid()).toBe(true); + }); + }); +}); + +function setupMocks() { + const mockCmsContent = { + FunnelHeaderWidget: { Text: "Header" }, + FunnelSubHeaderWidget: { Text: "Subheader" }, + FunnelFooterWidget: { Text: "Footer" }, + }; + + fetchCmsContentForPage.mockResolvedValue(mockCmsContent); + settleAllPromises.mockResolvedValue({ cmsContent: mockCmsContent }); + + const mountOptions = getMountOptions({ + route: { name: "duplicate-check", query: {}, params: {} }, + router: { + navigate: jest.fn(), + navigateWithSaving: jest.fn(), + navigateWithoutSaving: jest.fn(), + }, + }); + + const wrapper = shallowMount(coverageStatement, mountOptions); + + return { wrapper }; +} diff --git a/src/layouts/coverage-statement/coverage-statement.vue b/src/layouts/coverage-statement/coverage-statement.vue new file mode 100644 index 000000000..081424f7c --- /dev/null +++ b/src/layouts/coverage-statement/coverage-statement.vue @@ -0,0 +1,78 @@ + + + diff --git a/src/layouts/duplicate-check/duplicate-check.spec.js b/src/layouts/duplicate-check/duplicate-check.spec.js new file mode 100644 index 000000000..e28a749e6 --- /dev/null +++ b/src/layouts/duplicate-check/duplicate-check.spec.js @@ -0,0 +1,70 @@ +import duplicateCheck from "@/layouts/duplicate-check/duplicate-check.vue"; +import { shallowMount } from "@vue/test-utils"; +import { getMountOptions } from "@/helpers/unit-test-helper.js"; +import { fetchCmsContentForPage } from "@/helpers/cms-content-helper"; +import { settleAllPromises } from "@/helpers/layout-helper"; + +// 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("duplicate-check.vue", () => { + describe("component rendering", () => { + test("renders funnelHeader component", () => { + const { wrapper } = setupMocks(); + expect(wrapper.findComponent({ name: "funnelHeader" }).exists()).toBe(true); + }); + + test("renders funnelSubHeader component", () => { + const { wrapper } = setupMocks(); + expect(wrapper.findComponent({ name: "funnelSubHeader" }).exists()).toBe(true); + }); + + test("renders navbar component", () => { + const { wrapper } = setupMocks(); + expect(wrapper.findComponent({ name: "navbar" }).exists()).toBe(true); + }); + + test("renders Form component", () => { + const { wrapper } = setupMocks(); + expect(wrapper.findComponent({ name: "Form" }).exists()).toBe(true); + }); + }); + + describe("methods", () => { + test("arePagePrerequisitesValid returns true", () => { + const { wrapper } = setupMocks(); + expect(wrapper.vm.arePagePrerequisitesValid()).toBe(true); + }); + }); +}); + +function setupMocks() { + const mockCmsContent = { + FunnelHeaderWidget: { Text: "Header" }, + FunnelSubHeaderWidget: { Text: "Subheader" }, + FunnelFooterWidget: { Text: "Footer" }, + }; + + fetchCmsContentForPage.mockResolvedValue(mockCmsContent); + settleAllPromises.mockResolvedValue({ cmsContent: mockCmsContent }); + + const mountOptions = getMountOptions({ + route: { name: "duplicate-check", query: {}, params: {} }, + router: { + navigate: jest.fn(), + navigateWithSaving: jest.fn(), + navigateWithoutSaving: jest.fn(), + }, + }); + + const wrapper = shallowMount(duplicateCheck, mountOptions); + + return { wrapper }; +} diff --git a/src/layouts/duplicate-check/duplicate-check.vue b/src/layouts/duplicate-check/duplicate-check.vue new file mode 100644 index 000000000..f5bceba59 --- /dev/null +++ b/src/layouts/duplicate-check/duplicate-check.vue @@ -0,0 +1,78 @@ + + + diff --git a/src/layouts/endorsements/endorsements.spec.js b/src/layouts/endorsements/endorsements.spec.js new file mode 100644 index 000000000..a44302072 --- /dev/null +++ b/src/layouts/endorsements/endorsements.spec.js @@ -0,0 +1,70 @@ +import endorsements from "@/layouts/endorsements/endorsements.vue"; +import { shallowMount } from "@vue/test-utils"; +import { getMountOptions } from "@/helpers/unit-test-helper.js"; +import { fetchCmsContentForPage } from "@/helpers/cms-content-helper"; +import { settleAllPromises } from "@/helpers/layout-helper"; + +// 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("endorsements.vue", () => { + describe("component rendering", () => { + test("renders funnelHeader component", () => { + const { wrapper } = setupMocks(); + expect(wrapper.findComponent({ name: "funnelHeader" }).exists()).toBe(true); + }); + + test("renders funnelSubHeader component", () => { + const { wrapper } = setupMocks(); + expect(wrapper.findComponent({ name: "funnelSubHeader" }).exists()).toBe(true); + }); + + test("renders navbar component", () => { + const { wrapper } = setupMocks(); + expect(wrapper.findComponent({ name: "navbar" }).exists()).toBe(true); + }); + + test("renders Form component", () => { + const { wrapper } = setupMocks(); + expect(wrapper.findComponent({ name: "Form" }).exists()).toBe(true); + }); + }); + + describe("methods", () => { + test("arePagePrerequisitesValid returns true", () => { + const { wrapper } = setupMocks(); + expect(wrapper.vm.arePagePrerequisitesValid()).toBe(true); + }); + }); +}); + +function setupMocks() { + const mockCmsContent = { + FunnelHeaderWidget: { Text: "Header" }, + FunnelSubHeaderWidget: { Text: "Subheader" }, + FunnelFooterWidget: { Text: "Footer" }, + }; + + fetchCmsContentForPage.mockResolvedValue(mockCmsContent); + settleAllPromises.mockResolvedValue({ cmsContent: mockCmsContent }); + + const mountOptions = getMountOptions({ + route: { name: "duplicate-check", query: {}, params: {} }, + router: { + navigate: jest.fn(), + navigateWithSaving: jest.fn(), + navigateWithoutSaving: jest.fn(), + }, + }); + + const wrapper = shallowMount(endorsements, mountOptions); + + return { wrapper }; +} diff --git a/src/layouts/endorsements/endorsements.vue b/src/layouts/endorsements/endorsements.vue new file mode 100644 index 000000000..e98c5e750 --- /dev/null +++ b/src/layouts/endorsements/endorsements.vue @@ -0,0 +1,78 @@ + + + diff --git a/src/layouts/policy-driver/policy-driver.spec.js b/src/layouts/policy-driver/policy-driver.spec.js new file mode 100644 index 000000000..5680f6f2f --- /dev/null +++ b/src/layouts/policy-driver/policy-driver.spec.js @@ -0,0 +1,70 @@ +import policyDriver from "@/layouts/policy-driver/policy-driver.vue"; +import { shallowMount } from "@vue/test-utils"; +import { getMountOptions } from "@/helpers/unit-test-helper.js"; +import { fetchCmsContentForPage } from "@/helpers/cms-content-helper"; +import { settleAllPromises } from "@/helpers/layout-helper"; + +// 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("policy-driver.vue", () => { + describe("component rendering", () => { + test("renders funnelHeader component", () => { + const { wrapper } = setupMocks(); + expect(wrapper.findComponent({ name: "funnelHeader" }).exists()).toBe(true); + }); + + test("renders funnelSubHeader component", () => { + const { wrapper } = setupMocks(); + expect(wrapper.findComponent({ name: "funnelSubHeader" }).exists()).toBe(true); + }); + + test("renders navbar component", () => { + const { wrapper } = setupMocks(); + expect(wrapper.findComponent({ name: "navbar" }).exists()).toBe(true); + }); + + test("renders Form component", () => { + const { wrapper } = setupMocks(); + expect(wrapper.findComponent({ name: "Form" }).exists()).toBe(true); + }); + }); + + describe("methods", () => { + test("arePagePrerequisitesValid returns true", () => { + const { wrapper } = setupMocks(); + expect(wrapper.vm.arePagePrerequisitesValid()).toBe(true); + }); + }); +}); + +function setupMocks() { + const mockCmsContent = { + FunnelHeaderWidget: { Text: "Header" }, + FunnelSubHeaderWidget: { Text: "Subheader" }, + FunnelFooterWidget: { Text: "Footer" }, + }; + + fetchCmsContentForPage.mockResolvedValue(mockCmsContent); + settleAllPromises.mockResolvedValue({ cmsContent: mockCmsContent }); + + const mountOptions = getMountOptions({ + route: { name: "policy-driver", query: {}, params: {} }, + router: { + navigate: jest.fn(), + navigateWithSaving: jest.fn(), + navigateWithoutSaving: jest.fn(), + }, + }); + + const wrapper = shallowMount(policyDriver, mountOptions); + + return { wrapper }; +} diff --git a/src/layouts/policy-driver/policy-driver.vue b/src/layouts/policy-driver/policy-driver.vue new file mode 100644 index 000000000..865cb64f9 --- /dev/null +++ b/src/layouts/policy-driver/policy-driver.vue @@ -0,0 +1,78 @@ + + + diff --git a/src/layouts/policy-info-submitted/policy-info-submitted.spec.js b/src/layouts/policy-info-submitted/policy-info-submitted.spec.js new file mode 100644 index 000000000..a647c2681 --- /dev/null +++ b/src/layouts/policy-info-submitted/policy-info-submitted.spec.js @@ -0,0 +1,70 @@ +import policyInfoSubmitted from "@/layouts/policy-info-submitted/policy-info-submitted.vue"; +import { shallowMount } from "@vue/test-utils"; +import { getMountOptions } from "@/helpers/unit-test-helper.js"; +import { fetchCmsContentForPage } from "@/helpers/cms-content-helper"; +import { settleAllPromises } from "@/helpers/layout-helper"; + +// 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("policy-info-submitted.vue", () => { + describe("component rendering", () => { + test("renders funnelHeader component", () => { + const { wrapper } = setupMocks(); + expect(wrapper.findComponent({ name: "funnelHeader" }).exists()).toBe(true); + }); + + test("renders funnelSubHeader component", () => { + const { wrapper } = setupMocks(); + expect(wrapper.findComponent({ name: "funnelSubHeader" }).exists()).toBe(true); + }); + + test("renders navbar component", () => { + const { wrapper } = setupMocks(); + expect(wrapper.findComponent({ name: "navbar" }).exists()).toBe(true); + }); + + test("renders Form component", () => { + const { wrapper } = setupMocks(); + expect(wrapper.findComponent({ name: "Form" }).exists()).toBe(true); + }); + }); + + describe("methods", () => { + test("arePagePrerequisitesValid returns true", () => { + const { wrapper } = setupMocks(); + expect(wrapper.vm.arePagePrerequisitesValid()).toBe(true); + }); + }); +}); + +function setupMocks() { + const mockCmsContent = { + FunnelHeaderWidget: { Text: "Header" }, + FunnelSubHeaderWidget: { Text: "Subheader" }, + FunnelFooterWidget: { Text: "Footer" }, + }; + + fetchCmsContentForPage.mockResolvedValue(mockCmsContent); + settleAllPromises.mockResolvedValue({ cmsContent: mockCmsContent }); + + const mountOptions = getMountOptions({ + route: { name: "policy-vehicle", query: {}, params: {} }, + router: { + navigate: jest.fn(), + navigateWithSaving: jest.fn(), + navigateWithoutSaving: jest.fn(), + }, + }); + + const wrapper = shallowMount(policyInfoSubmitted, mountOptions); + + return { wrapper }; +} diff --git a/src/layouts/policy-info-submitted/policy-info-submitted.vue b/src/layouts/policy-info-submitted/policy-info-submitted.vue new file mode 100644 index 000000000..7e61094c2 --- /dev/null +++ b/src/layouts/policy-info-submitted/policy-info-submitted.vue @@ -0,0 +1,78 @@ + + + diff --git a/src/layouts/policy-info/policy-info.vue b/src/layouts/policy-info/policy-info.vue index 73f94448f..c52c85cf4 100644 --- a/src/layouts/policy-info/policy-info.vue +++ b/src/layouts/policy-info/policy-info.vue @@ -65,7 +65,10 @@ export default { ); }, async forwardButtonAction() { - // Stub, for navigating forward via nav-bar + this.$router.navigateWithSaving( + this.navigationScenarios.CLICKED_FORWARD, + this.pageName + ); }, arePagePrerequisitesValid() { return true; diff --git a/src/layouts/policy-vehicle/policy-vehicle.spec.js b/src/layouts/policy-vehicle/policy-vehicle.spec.js new file mode 100644 index 000000000..1fe1a5559 --- /dev/null +++ b/src/layouts/policy-vehicle/policy-vehicle.spec.js @@ -0,0 +1,70 @@ +import policyVehicle from "@/layouts/policy-vehicle/policy-vehicle.vue"; +import { shallowMount } from "@vue/test-utils"; +import { getMountOptions } from "@/helpers/unit-test-helper.js"; +import { fetchCmsContentForPage } from "@/helpers/cms-content-helper"; +import { settleAllPromises } from "@/helpers/layout-helper"; + +// 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("policy-vehicle.vue", () => { + describe("component rendering", () => { + test("renders funnelHeader component", () => { + const { wrapper } = setupMocks(); + expect(wrapper.findComponent({ name: "funnelHeader" }).exists()).toBe(true); + }); + + test("renders funnelSubHeader component", () => { + const { wrapper } = setupMocks(); + expect(wrapper.findComponent({ name: "funnelSubHeader" }).exists()).toBe(true); + }); + + test("renders navbar component", () => { + const { wrapper } = setupMocks(); + expect(wrapper.findComponent({ name: "navbar" }).exists()).toBe(true); + }); + + test("renders Form component", () => { + const { wrapper } = setupMocks(); + expect(wrapper.findComponent({ name: "Form" }).exists()).toBe(true); + }); + }); + + describe("methods", () => { + test("arePagePrerequisitesValid returns true", () => { + const { wrapper } = setupMocks(); + expect(wrapper.vm.arePagePrerequisitesValid()).toBe(true); + }); + }); +}); + +function setupMocks() { + const mockCmsContent = { + FunnelHeaderWidget: { Text: "Header" }, + FunnelSubHeaderWidget: { Text: "Subheader" }, + FunnelFooterWidget: { Text: "Footer" }, + }; + + fetchCmsContentForPage.mockResolvedValue(mockCmsContent); + settleAllPromises.mockResolvedValue({ cmsContent: mockCmsContent }); + + const mountOptions = getMountOptions({ + route: { name: "policy-vehicle", query: {}, params: {} }, + router: { + navigate: jest.fn(), + navigateWithSaving: jest.fn(), + navigateWithoutSaving: jest.fn(), + }, + }); + + const wrapper = shallowMount(policyVehicle, mountOptions); + + return { wrapper }; +} diff --git a/src/layouts/policy-vehicle/policy-vehicle.vue b/src/layouts/policy-vehicle/policy-vehicle.vue new file mode 100644 index 000000000..9dc239dd3 --- /dev/null +++ b/src/layouts/policy-vehicle/policy-vehicle.vue @@ -0,0 +1,78 @@ + + + diff --git a/src/layouts/recalibration-info/recalibration-info.spec.js b/src/layouts/recalibration-info/recalibration-info.spec.js new file mode 100644 index 000000000..50667e1fa --- /dev/null +++ b/src/layouts/recalibration-info/recalibration-info.spec.js @@ -0,0 +1,70 @@ +import recalibrationInfo from "@/layouts/recalibration-info/recalibration-info.vue"; +import { shallowMount } from "@vue/test-utils"; +import { getMountOptions } from "@/helpers/unit-test-helper.js"; +import { fetchCmsContentForPage } from "@/helpers/cms-content-helper"; +import { settleAllPromises } from "@/helpers/layout-helper"; + +// 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("recalibration-info.vue", () => { + describe("component rendering", () => { + test("renders funnelHeader component", () => { + const { wrapper } = setupMocks(); + expect(wrapper.findComponent({ name: "funnelHeader" }).exists()).toBe(true); + }); + + test("renders funnelSubHeader component", () => { + const { wrapper } = setupMocks(); + expect(wrapper.findComponent({ name: "funnelSubHeader" }).exists()).toBe(true); + }); + + test("renders navbar component", () => { + const { wrapper } = setupMocks(); + expect(wrapper.findComponent({ name: "navbar" }).exists()).toBe(true); + }); + + test("renders Form component", () => { + const { wrapper } = setupMocks(); + expect(wrapper.findComponent({ name: "Form" }).exists()).toBe(true); + }); + }); + + describe("methods", () => { + test("arePagePrerequisitesValid returns true", () => { + const { wrapper } = setupMocks(); + expect(wrapper.vm.arePagePrerequisitesValid()).toBe(true); + }); + }); +}); + +function setupMocks() { + const mockCmsContent = { + FunnelHeaderWidget: { Text: "Header" }, + FunnelSubHeaderWidget: { Text: "Subheader" }, + FunnelFooterWidget: { Text: "Footer" }, + }; + + fetchCmsContentForPage.mockResolvedValue(mockCmsContent); + settleAllPromises.mockResolvedValue({ cmsContent: mockCmsContent }); + + const mountOptions = getMountOptions({ + route: { name: "policy-vehicle", query: {}, params: {} }, + router: { + navigate: jest.fn(), + navigateWithSaving: jest.fn(), + navigateWithoutSaving: jest.fn(), + }, + }); + + const wrapper = shallowMount(recalibrationInfo, mountOptions); + + return { wrapper }; +} diff --git a/src/layouts/recalibration-info/recalibration-info.vue b/src/layouts/recalibration-info/recalibration-info.vue new file mode 100644 index 000000000..bf07bf4d1 --- /dev/null +++ b/src/layouts/recalibration-info/recalibration-info.vue @@ -0,0 +1,78 @@ + + + diff --git a/src/layouts/verify-details/verify-details.spec.js b/src/layouts/verify-details/verify-details.spec.js new file mode 100644 index 000000000..ec541ecf9 --- /dev/null +++ b/src/layouts/verify-details/verify-details.spec.js @@ -0,0 +1,70 @@ +import verifyDetails from "@/layouts/verify-details/verify-details.vue"; +import { shallowMount } from "@vue/test-utils"; +import { getMountOptions } from "@/helpers/unit-test-helper.js"; +import { fetchCmsContentForPage } from "@/helpers/cms-content-helper"; +import { settleAllPromises } from "@/helpers/layout-helper"; + +// 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("verify-details.vue", () => { + describe("component rendering", () => { + test("renders funnelHeader component", () => { + const { wrapper } = setupMocks(); + expect(wrapper.findComponent({ name: "funnelHeader" }).exists()).toBe(true); + }); + + test("renders funnelSubHeader component", () => { + const { wrapper } = setupMocks(); + expect(wrapper.findComponent({ name: "funnelSubHeader" }).exists()).toBe(true); + }); + + test("renders navbar component", () => { + const { wrapper } = setupMocks(); + expect(wrapper.findComponent({ name: "navbar" }).exists()).toBe(true); + }); + + test("renders Form component", () => { + const { wrapper } = setupMocks(); + expect(wrapper.findComponent({ name: "Form" }).exists()).toBe(true); + }); + }); + + describe("methods", () => { + test("arePagePrerequisitesValid returns true", () => { + const { wrapper } = setupMocks(); + expect(wrapper.vm.arePagePrerequisitesValid()).toBe(true); + }); + }); +}); + +function setupMocks() { + const mockCmsContent = { + FunnelHeaderWidget: { Text: "Header" }, + FunnelSubHeaderWidget: { Text: "Subheader" }, + FunnelFooterWidget: { Text: "Footer" }, + }; + + fetchCmsContentForPage.mockResolvedValue(mockCmsContent); + settleAllPromises.mockResolvedValue({ cmsContent: mockCmsContent }); + + const mountOptions = getMountOptions({ + route: { name: "policy-vehicle", query: {}, params: {} }, + router: { + navigate: jest.fn(), + navigateWithSaving: jest.fn(), + navigateWithoutSaving: jest.fn(), + }, + }); + + const wrapper = shallowMount(verifyDetails, mountOptions); + + return { wrapper }; +} diff --git a/src/layouts/verify-details/verify-details.vue b/src/layouts/verify-details/verify-details.vue new file mode 100644 index 000000000..26d31ca50 --- /dev/null +++ b/src/layouts/verify-details/verify-details.vue @@ -0,0 +1,78 @@ + + + diff --git a/src/router/constants/routes.js b/src/router/constants/routes.js index c905c800c..fc54025ef 100644 --- a/src/router/constants/routes.js +++ b/src/router/constants/routes.js @@ -59,6 +59,38 @@ export const routeData = { name: "insurance-details", path: "/insurance-details", }, + DUPLICATE_CHECK: { + name: "duplicate-check", + path: "/duplicate-check", + }, + POLICY_VEHICLE: { + name: "policy-vehicle", + path: "/policy-vehicle", + }, + POLICY_DRIVER: { + name: "policy-driver", + path: "/policy-driver", + }, + ENDORSEMENTS: { + name: "endorsements", + path: "/endorsements", + }, + POLICY_INFO_SUBMITTED: { + name: "policy-info-submitted", + path: "/policy-info-submitted", + }, + RECALIBRATION_INFO: { + name: "recalibration-info", + path: "/recalibration-info", + }, + COVERAGE_STATEMENT: { + name: "coverage-statement", + path: "/coverage-statement", + }, + VERIFY_DETAILS: { + name: "verify-details", + path: "/verify-details", + }, INSURANCE_COMPANY: { name: "insurance-company", path: "/insurance-company", diff --git a/src/router/constants/routing-table.js b/src/router/constants/routing-table.js index a225e2651..061d6603b 100644 --- a/src/router/constants/routing-table.js +++ b/src/router/constants/routing-table.js @@ -436,6 +436,10 @@ const routingTable = function () { scenario: navigationScenarios.CLICKED_BACK, destinationPageData: routeData.INSURANCE_COMPANY, }, + { + scenario: navigationScenarios.CLICKED_FORWARD, + destinationPageData: routeData.DUPLICATE_CHECK, + }, ], }, { @@ -445,6 +449,114 @@ const routingTable = function () { scenario: navigationScenarios.CLICKED_BACK, destinationPageData: routeData.INSURANCE_COMPANY, }, + { + scenario: navigationScenarios.CLICKED_FORWARD, + destinationPageData: routeData.COVERAGE_STATEMENT, + }, + ], + }, + { + pageName: routeData.DUPLICATE_CHECK.name, + maps: [ + { + scenario: navigationScenarios.CLICKED_BACK, + destinationPageData: routeData.POLICY_INFO, + }, + { + scenario: navigationScenarios.CLICKED_FORWARD, + destinationPageData: routeData.POLICY_VEHICLE, + }, + ], + }, + { + pageName: routeData.POLICY_VEHICLE.name, + maps: [ + { + scenario: navigationScenarios.CLICKED_BACK, + destinationPageData: routeData.DUPLICATE_CHECK, + }, + { + scenario: navigationScenarios.CLICKED_FORWARD, + destinationPageData: routeData.POLICY_DRIVER, + }, + ], + }, + { + pageName: routeData.POLICY_DRIVER.name, + maps: [ + { + scenario: navigationScenarios.CLICKED_BACK, + destinationPageData: routeData.POLICY_VEHICLE, + }, + { + scenario: navigationScenarios.CLICKED_FORWARD, + destinationPageData: routeData.ENDORSEMENTS, + }, + ], + }, + { + pageName: routeData.ENDORSEMENTS.name, + maps: [ + { + scenario: navigationScenarios.CLICKED_BACK, + destinationPageData: routeData.POLICY_DRIVER, + }, + { + scenario: navigationScenarios.CLICKED_FORWARD, + destinationPageData: routeData.POLICY_INFO_SUBMITTED, + }, + ], + }, + { + pageName: routeData.POLICY_INFO_SUBMITTED.name, + maps: [ + { + scenario: navigationScenarios.CLICKED_BACK, + destinationPageData: routeData.ENDORSEMENTS, + }, + { + scenario: navigationScenarios.CLICKED_FORWARD, + destinationPageData: routeData.RECALIBRATION_INFO, + }, + ], + }, + { + pageName: routeData.RECALIBRATION_INFO.name, + maps: [ + { + scenario: navigationScenarios.CLICKED_BACK, + destinationPageData: routeData.POLICY_INFO_SUBMITTED, + }, + { + scenario: navigationScenarios.CLICKED_FORWARD, + destinationPageData: routeData.COVERAGE_STATEMENT, + }, + ], + }, + { + pageName: routeData.COVERAGE_STATEMENT.name, + maps: [ + { + scenario: navigationScenarios.CLICKED_BACK, + destinationPageData: routeData.RECALIBRATION_INFO, + }, + { + scenario: navigationScenarios.CLICKED_FORWARD, + destinationPageData: routeData.SCHEDULE, + }, + ], + }, + { + pageName: routeData.VERIFY_DETAILS.name, + maps: [ + { + scenario: navigationScenarios.CLICKED_BACK, + destinationPageData: routeData.DUPLICATE_CHECK, + }, + { + scenario: navigationScenarios.CLICKED_FORWARD, + destinationPageData: routeData.POLICY_INFO_SUBMITTED, + }, ], }, { diff --git a/src/router/methods/routes.js b/src/router/methods/routes.js index 8870ac418..88cc17f94 100644 --- a/src/router/methods/routes.js +++ b/src/router/methods/routes.js @@ -43,6 +43,14 @@ export const routes = [ createRoute(routeData.MOBILE_DETAILS), createRoute(routeData.POLICY_INFO), createRoute(routeData.INSURANCE_DETAILS), + createRoute(routeData.DUPLICATE_CHECK), + createRoute(routeData.POLICY_VEHICLE), + createRoute(routeData.POLICY_DRIVER), + createRoute(routeData.ENDORSEMENTS), + createRoute(routeData.POLICY_INFO_SUBMITTED), + createRoute(routeData.RECALIBRATION_INFO), + createRoute(routeData.COVERAGE_STATEMENT), + createRoute(routeData.VERIFY_DETAILS), // Virtual pages (resolve to a non-virtual page.) createVirtualRoute(routeData.LANDING, landingBeforeEnter), createVirtualRoute(routeData.HERITAGE, heritageBeforeEnter), diff --git a/src/store/store.spec.js b/src/store/store.spec.js index ea896116d..f8c41cbe4 100644 --- a/src/store/store.spec.js +++ b/src/store/store.spec.js @@ -225,6 +225,9 @@ describe("Mutations", () => { category: "CAR", registration: {}, }, + policy: { + insuranceCompanyName: "LibertyBibity", + }, damage: { glassToReplace: ["Windshield"], isRepair: false,