diff --git a/src/layouts/policy-holder-details/policy-holder-details.spec.js b/src/layouts/policy-holder-details/policy-holder-details.spec.js new file mode 100644 index 00000000..479199f6 --- /dev/null +++ b/src/layouts/policy-holder-details/policy-holder-details.spec.js @@ -0,0 +1,81 @@ +import policyHolderDetails from "@/layouts/policy-holder-details/policy-holder-details.vue"; + +// Supporting files +// Supporting files +import { shallowMount } from '@vue/test-utils'; +import { settleAllPromises } from "@/helpers/layout-helper.js"; +import { fetchCmsContentForPage } from "@/helpers/cms-content-helper"; +import baseMixin from "@/mixins/base-mixin.js"; +import { getMountOptions } from "@/helpers/unit-test-helper.js"; +import { applicationConfig } from "@/constants/application-config"; + +// 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-holder-details.vue", () => { + test("Should render policy-holder-details sub-components (policy holder first name, last name, street address, damageCause etc.)", async () => { + // Arrange + const { wrapper } = setupMocks({}); + // Act + const policyHolderFirstName = wrapper.findComponent({ ref: "policyHolderFirstName" }); + const policyHolderLastName = wrapper.findComponent({ ref: "policyHolderLastName" }); + const addressQuestions = wrapper.findComponent({ ref: "addressQuestions" }); + + // Assert + expect(policyHolderFirstName.exists()).toBe(true); + expect(policyHolderLastName.exists()).toBe(true); + expect(addressQuestions.exists()).toBe(true); + }); +}); + +function setupMocks({ + pageHeaderWidgetHeaderText = {}, + pageFooterWidgetCmsContent = {}, + mountOptionsMockData = {}, +}) { + //Mock api responses + const apiResponses = { + cmsContent: { + SiteSubHeaderWidget: pageHeaderWidgetHeaderText, + VehicleBannerWidget: { + GenericVehicleImage: + `${applicationConfig.ISS_DEV_CMS_DOMAIN}/images/default-source/default-album/blurred-image.jpg`, + }, + SiteHeaderWidget: { + LogoImage: + `${applicationConfig.ISS_DEV_CMS_DOMAIN}/images/default-source/default-album/logos/insuranceLogo.jpg`, + }, + SiteFooterWidget: pageFooterWidgetCmsContent, + + }, + }; + + mountOptionsMockData = { + ...mountOptionsMockData, + router: { + navigate: jest.fn(), + }, + }; + + const apiPromise = Promise.resolve(apiResponses); + + settleAllPromises.mockImplementation(() => apiPromise); + fetchCmsContentForPage.mockImplementation(() => Promise.resolve()); + + const mountOptions = getMountOptions(mountOptionsMockData); + + const wrapper = shallowMount(policyHolderDetails, mountOptions); + + wrapper.vm.setCmsContent = baseMixin.methods.setCmsContent; + + return { wrapper, apiPromise }; +} +