diff --git a/jest.config.js b/jest.config.js index d9da86118..b47bb3e56 100644 --- a/jest.config.js +++ b/jest.config.js @@ -25,8 +25,7 @@ module.exports = { testMatch: ["**/*.spec.(js|jsx|ts|tsx)|**/__tests__/*.(js|jsx|ts|tsx)"], coverageThreshold: { global: { - // TODO after release/2022.09.15, raise this back up!! - statements: 80, + statements: 90, // Got the go ahead from Mark to temporarily lower this. Taking out initialize component made the year,make,model and style coverage drop a bit. Once unit tests for license plate lookup, vin lookup and address lookup are in the coverage should go back up to 90 }, }, diff --git a/src/layouts/vehicle-style/vehicle-style.spec.js b/src/layouts/vehicle-style/vehicle-style.spec.js index 1dd3a6774..e97b14882 100644 --- a/src/layouts/vehicle-style/vehicle-style.spec.js +++ b/src/layouts/vehicle-style/vehicle-style.spec.js @@ -10,6 +10,9 @@ import { getMountOptions } from "@/helpers/unit-test-helper.js"; import { storeActions } from "@/constants/store-actions"; import { fetchCmsContentForPage } from "@/helpers/cms-content-helper"; import baseMixin from "@/mixins/base-mixin.js"; +import router from "@/router" +import store from "@/store" +import { storeMutations } from "@/constants/store-mutations"; // Mock our module for promises. jest.mock("@/helpers/layout-helper.js", () => ({ @@ -21,25 +24,16 @@ jest.mock("@/helpers/cms-content-helper", () => ({ fetchCmsContentForPage: jest.fn(), })); -// Mock Store -jest.mock("@/store", () => ({ - getters: { - vehicle: { - model: "TL", - }, - applicationUser:{ - pageData: { - "part-questions": null, - "vehicle-make": {}, - "vehicle-model": {}, - "vehicle-style": {}, - "vehicle-damage": {} - } - } - }, +// Mock fetchCmsContentForPage +jest.mock("@/router", () => ({ + overrideNavigation: jest.fn(), })); describe("vehicle-style.vue", () => { + beforeEach(() => { + jest.clearAllMocks(); + }) + test("Style question component is initized with api data", async (done) => { //Arrange const styleQuestionInitialData = ["2 Door", "4 Door"]; @@ -63,9 +57,7 @@ describe("vehicle-style.vue", () => { done(); }); }); -}); -describe("vehicle-style.vue", () => { test("BackButtonAction triggers a router.navigateWithoutSaving change", async (done) => { //Arrange const { wrapper, apiPromise } = setupMocks({ @@ -95,20 +87,12 @@ describe("vehicle-style.vue", () => { done(); }); }); -}); -describe("vehicle-style.vue", () => { - test("selectVehicle triggers a dispatchStoreAction commit", async (done) => { + test("setVehicle triggers a dispatchStoreAction commit", async (done) => { //Arrange const { wrapper, apiPromise } = setupMocks({ pageHeaderWidgetHeaderText: "Select a style to get started", mountOptionsMockData: { - store: { - commit: jest.fn(), - getters: { - vehicle: {}, - }, - }, actionList: [ { actionName: storeActions.SET_VEHICLE, @@ -134,9 +118,7 @@ describe("vehicle-style.vue", () => { done(); }); }); -}); -describe("vehicle-style.vue", () => { test("Model set, arePagePrerequisitesValid should be true ", async () => { //Arrange const { wrapper } = setupMocks({}); @@ -155,7 +137,61 @@ describe("vehicle-style.vue", () => { //Assert expect(arePagePrerequisitesValid).toBe(true); }); + + test("there is only one vehicle style => autoselect and move to vehicle damage", async () => { + //Arrange + const { wrapper } = setupMocks({ + styleQuestionInitialData: ["2 door sedan"], + }); + + // Act + await vehicleStyle.beforeRouteEnter.call( + wrapper.vm, + { query: { fmgPage: "vehicle-style" } }, + undefined, + (c) => c(wrapper.vm) + ); + + // Assert + expect(store.commit).toHaveBeenCalledWith(storeMutations.UPDATE_STYLE, "2 door sedan"); + expect(router.overrideNavigation).toHaveBeenCalled(); + }) + + test("there is only one vehicle style and vehicle-damage was visited => don't autoselect or move to vehicle damage", async () => { + //Arrange + const { wrapper } = setupMocks({ + styleQuestionInitialData: ["2 door sedan"], + mountOptionsMockData: { + store: { + getters: { + applicationUser: { + pageData: { + "part-questions": null, + "vehicle-make": {}, + "vehicle-model": {}, + "vehicle-style": {}, + "vehicle-damage": {} + } + } + } + } + } + }); + + // Act + await vehicleStyle.beforeRouteEnter.call( + wrapper.vm, + { query: { fmgPage: "vehicle-style" } }, + undefined, + (c) => c(wrapper.vm) + ); + + // Assert + expect(store.commit).not.toHaveBeenCalledWith(storeMutations.UPDATE_STYLE, "2 door sedan"); + expect(router.overrideNavigation).not.toHaveBeenCalled(); + }) }); + function setupMocks({ vehicleStyleQuestionCmsContent = {}, styleQuestionInitialData = {}, @@ -190,7 +226,26 @@ function setupMocks({ initializeComponent: jest.fn(), }; - const mountOptions = getMountOptions(mountOptionsMockData); + store.commit = jest.fn(); + store.dispatch = jest.fn(); + store.getters = mountOptionsMockData.store?.getters ?? { + vehicle: { + model: "TL", + }, + applicationUser: { + pageData: { + "part-questions": null, + "vehicle-make": {}, + "vehicle-model": {}, + "vehicle-style": {}, + } + } + } + + const mountOptions = getMountOptions({ + ...mountOptionsMockData, + store + }); const wrapper = shallowMount(vehicleStyle, mountOptions); wrapper.vm.setCmsContent = baseMixin.methods.setCmsContent; diff --git a/src/layouts/vehicle-style/vehicle-style.vue b/src/layouts/vehicle-style/vehicle-style.vue index 5d700e183..4a31c06cc 100644 --- a/src/layouts/vehicle-style/vehicle-style.vue +++ b/src/layouts/vehicle-style/vehicle-style.vue @@ -26,6 +26,7 @@