// 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 } 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(), })); describe("coverage-statement.vue...", () => { describe("method arePagePrerequisitesValid...", () => { test("Should return true for valid page requisites if vin exists", () => { // Arrange const { wrapper } = setupMocks({}); // 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 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.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 = { 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, // 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: { vin: "TESTVIN", }, 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 apiPromise = Promise.resolve(apiResponses); settleAllPromises.mockImplementation(() => apiPromise); fetchCmsContentForPage.mockImplementation(() => Promise.resolve()); const mountOptions = getMountOptions({ }); mountOptions.mixins = [baseMixin, vehicleQuestionsMixin]; const wrapper = shallowMount(coverageStatement, mountOptions); wrapper.vm.setCmsContent = baseMixin.methods.setCmsContent; // //Mock CMS content // const cmsContent = { // PageContent: cmsPageContent, // NonADASRepairBodyText: unverifiedNonADASRepairBodyText, // }; return { wrapper }; }