From 56fd43d91654cbec1bc946f4cbc40c394a095410 Mon Sep 17 00:00:00 2001 From: Max Date: Tue, 5 Apr 2022 13:07:03 -0400 Subject: [PATCH] more unit test changes --- jest.config.js | 2 + src/helpers/unit-test-helper.js | 2 + .../vehicle-damage/vehicle-damage.spec.js | 1336 ++++++++--------- 3 files changed, 672 insertions(+), 668 deletions(-) diff --git a/jest.config.js b/jest.config.js index ed4f38dc7..c108399b7 100644 --- a/jest.config.js +++ b/jest.config.js @@ -13,6 +13,8 @@ module.exports = { "!src/helpers/unit-test-helper.js", "!src/layouts/component-test/component-test.vue", "!src/layouts/form-test/form-test.vue", + "!src/layouts/license-plate-lookup/license-plate-lookup.vue", + "!src/layouts/vin-lookup/vin-lookup.vue", "!src/layouts/vehicle-damage/windshield-damage-type-question/windshield-damage-type-question.vue", "!src/layouts/vehicle-damage/windshield-options/windshield-options.vue", "!src/layouts/address-poc/address-poc.vue", diff --git a/src/helpers/unit-test-helper.js b/src/helpers/unit-test-helper.js index 1509a4b16..a8a593146 100644 --- a/src/helpers/unit-test-helper.js +++ b/src/helpers/unit-test-helper.js @@ -3,6 +3,7 @@ import { storeMutations } from "@/constants/store-mutations.js"; import { navigationScenarios } from "@/router/router-constants/navigation-scenarios.js"; import { vehicleCategories } from "@/constants/vehicle-categories.js"; import { fmgPageValues } from "@/router/router-constants/fmgPage-values"; +import { Form } from "vee-validate"; import baseMixin from "@/mixins/base-mixin"; export function getMountOptions(mockData) { @@ -52,6 +53,7 @@ export function getMountOptions(mockData) { const global = { mocks: mocks, + stubs: { Form } }; return { global }; diff --git a/src/layouts/vehicle-damage/vehicle-damage.spec.js b/src/layouts/vehicle-damage/vehicle-damage.spec.js index 4c87b31a2..fe3a4aa51 100644 --- a/src/layouts/vehicle-damage/vehicle-damage.spec.js +++ b/src/layouts/vehicle-damage/vehicle-damage.spec.js @@ -44,652 +44,652 @@ jest.mock("@/store", () => ({ }, })); -// describe("vehicle-damage.vue", () => { -// test("CarId set, arePagePrerequisitesValid should be true ", async () => { -// //Arrange -// const { wrapper } = setupMocks({}); - -// //Act -// vehicleDamage.beforeRouteEnter.call( -// wrapper.vm, -// { query: { fmgPage: "vehicle-damage" } }, -// undefined, -// (c) => c(wrapper.vm) -// ); - -// let arePagePrerequisitesValid = wrapper.vm.arePagePrerequisitesValid(); -// await nextTick(); - -// //Assert -// expect(arePagePrerequisitesValid).toBe(true); -// }); -// }); - -// describe("vehicle-damage.vue", () => { -// test("BackButtonAction triggers a router.navigate change", async () => { - -// //Arrange -// const { wrapper } = setupMocks({}); - -// //Act -// vehicleDamage.beforeRouteEnter.call( -// wrapper.vm, -// { query: { fmgPage: "vehicle-damage" } }, -// undefined, -// (c) => c(wrapper.vm) -// ); - -// wrapper.vm.backButtonAction(); - -// //Assert -// expect(wrapper.vm.$router.navigate).toHaveBeenCalled(); - -// }); -// }); - -// describe("vehicle-damage.vue", () => { -// test("Replace several pieces of glass on ForwardButtonAction triggers a router.navigateAfterSave and saves selections to store", async () => { -// //Arrange -// const partsData = { -// partsOrQuestions: [{ -// glassName: "Single", -// glassLocation: "Windshield", -// parts: null, -// partQuestions: [{ -// questionSequence: 1, -// questionText: "Is your vehicle equipped with a heated steering wheel?", -// answers: [{ -// answerText: "Yes", -// nextQuestionSequence: null, -// answerResult: "FW04957" -// }, -// { -// answerText: "No", -// nextQuestionSequence: 2, -// answerResult: "" -// }] -// }, -// { -// questionSequence: 2, -// questionText: "Is your vehicle equipped with a remote start?", -// answers: [{ -// answerText: "Yes", -// nextQuestionSequence: null, -// answerResult: "FW04181" -// }, -// { -// answerText: "No", -// nextQuestionSequence: null, -// answerResult: "FW04179" -// }] -// }] -// }] -// }; - -// const { wrapper } = setupMocks({ -// pageHeaderWidgetHeaderText: "", -// mountOptionsMockData: { -// router: { navigateAfterSave: jest.fn(), }, -// actionList: [{ actionName: storeActions.GET_PARTS_OR_QUESTIONS, data: partsData, },], -// store: { -// getters: { -// vehicle: {}, -// }, -// }, -// }, -// }); - -// wrapper.vm.selectedDamageLocations = ["Windshield", "SideDoor", "RearWindow"]; -// wrapper.vm.selectedWindshieldOptions = { -// selectedWindshieldChipCount : null, -// selectedWindshieldReplaceOptions : ["Single"], -// selectedWindshieldDamageType: ["Replace"] -// }; - -// wrapper.vm.sideDoorOptionsData = { -// selectedDoorSides: ["DriverSide", "PassengerSide"], -// selectedDriverSideReplaceOptions: ["Back"], -// selectedPassengerSideReplaceOptions: ["Quarter"] -// }; - -// wrapper.vm.selectedRearReplaceOptions = ["Stationary"]; - -// const expectedGlassToReplace = [{location: "Windshield", name: "Single"}, {location: "Driver", name: "Back"}, -// {location: "Passenger", name: "Quarter"}, {location: "Rear", name: "Stationary"}]; - -// //Act -// vehicleDamage.beforeRouteEnter.call( -// wrapper.vm, -// { query: { fmgPage: "vehicle-damage" } }, -// undefined, -// (c) => c(wrapper.vm) -// ); - -// await wrapper.vm.forwardButtonAction(); - -// //Assert -// expect(wrapper.vm.$router.navigateAfterSave).toHaveBeenCalled(); -// expect(wrapper.vm.selectedGlassToReplace()).toEqual(expectedGlassToReplace); -// expect(store.commit).toBeCalledWith(storeMutations.UPDATE_IS_REPAIR, false); -// expect(store.commit).toBeCalledWith(storeMutations.UPDATE_GLASS_TO_REPLACE, expectedGlassToReplace); -// }); -// }); - -// describe("vehicle-damage.vue", () => { -// test("Windshield replace with single part on ForwardButtonAction triggers a router.navigate and saves selections to store", async () => { -// //Arrange -// const partsData = { partsOrQuestions: [ -// { -// glassLocation: "Windshield", -// glassName: "Single", -// partQuestions: null, -// parts: [ -// { -// color: "Green Tint, Green Shade", -// description: "rain sensor, solar", -// partNumber: "FW02728GGYN", -// requiresCapabilityQuestions: false, -// requiresRecalibration: false -// } -// ]}]}; - -// const { wrapper } = setupMocks({ -// pageHeaderWidgetHeaderText: "", -// mountOptionsMockData: { -// router: { navigate: jest.fn(), }, -// actionList: [{ actionName: storeActions.GET_PARTS_OR_QUESTIONS, data: partsData, },], -// store: { -// getters: { -// vehicle: {}, -// }, -// }, -// }, -// }); - -// wrapper.vm.selectedDamageLocations = ["Windshield"]; -// wrapper.vm.selectedWindshieldOptions = { -// selectedWindshieldChipCount : null, -// selectedWindshieldReplaceOptions : ["Single"], -// selectedWindshieldDamageType: ["Replace"] -// }; - -// const expectedGlassToReplace = [{location: "Windshield", name: "Single"},]; - -// //Act -// vehicleDamage.beforeRouteEnter.call( -// wrapper.vm, -// { query: { fmgPage: "vehicle-damage" } }, -// undefined, -// (c) => c(wrapper.vm) -// ); - -// await wrapper.vm.forwardButtonAction(); - -// //Assert -// expect(wrapper.vm.$router.navigate).toHaveBeenCalled(); -// expect(wrapper.vm.selectedGlassToReplace()).toEqual(expectedGlassToReplace); -// expect(store.commit).toBeCalledWith(storeMutations.UPDATE_IS_REPAIR, false); -// expect(store.commit).toBeCalledWith(storeMutations.UPDATE_GLASS_TO_REPLACE, expectedGlassToReplace); -// expect(store.commit).toBeCalledWith(storeMutations.UPDATE_PARTS, partsData.partsOrQuestions[0].parts); -// }); -// }); - -// describe("vehicle-damage.vue", () => { -// test("Windshield replace with multiple parts on ForwardButtonAction triggers a router.navigateAfterSave and saves selections to store", async () => { -// //Arrange -// const partsData = { partsOrQuestions: [ -// { -// glassLocation: "Windshield", -// glassName: "Single", -// partQuestions: null, -// parts: [ -// { -// color: "Green Tint, Green Shade", -// description: "rain sensor, solar", -// partNumber: "FW02728GGYN", -// requiresCapabilityQuestions: false, -// requiresRecalibration: false -// }, -// { -// color: "Green Tint, Green Shade", -// description: "rain sensor, solar, hydrophobic coating", -// partNumber: "FW02760GGYN", -// requiresCapabilityQuestions: false, -// requiresRecalibration: false -// } -// ]}, -// { -// glassName: "Stationary", -// glassLocation: "Rear", -// parts: [ -// { -// partNumber: "DB09626GTYN", -// description: "heated glass, solar, antenna", -// color: "Green Tint", -// requiresRecalibration: false, -// requiresCapabilityQuestions: false, -// childParts: null -// }, -// { -// partNumber: "DB09821GTYN", -// description: "heated glass, solar, antenna, onstar", -// color: "Green Tint", -// requiresRecalibration: false, -// requiresCapabilityQuestions: false, -// childParts: null -// } -// ], -// "partQuestions": null -// } -// ]}; - -// const { wrapper } = setupMocks({ -// pageHeaderWidgetHeaderText: "", -// mountOptionsMockData: { -// router: { navigateAfterSave: jest.fn(), }, -// actionList: [{ actionName: storeActions.GET_PARTS_OR_QUESTIONS, data: partsData, },], -// store: { -// getters: { -// vehicle: {}, -// }, -// }, -// }, -// }); - -// wrapper.vm.selectedDamageLocations = ["Windshield"]; -// wrapper.vm.selectedWindshieldOptions = { -// selectedWindshieldChipCount : null, -// selectedWindshieldReplaceOptions : ["Single"], -// selectedWindshieldDamageType: ["Replace"] -// }; - -// const expectedGlassToReplace = [{location: "Windshield", name: "Single"},]; - -// //Act -// vehicleDamage.beforeRouteEnter.call( -// wrapper.vm, -// { query: { fmgPage: "vehicle-damage" } }, -// undefined, -// (c) => c(wrapper.vm) -// ); - -// await wrapper.vm.forwardButtonAction(); - -// //Assert -// expect(wrapper.vm.$router.navigateAfterSave).toHaveBeenCalled(); -// expect(wrapper.vm.selectedGlassToReplace()).toEqual(expectedGlassToReplace); -// expect(store.commit).toBeCalledWith(storeMutations.UPDATE_IS_REPAIR, false); -// expect(store.commit).toBeCalledWith(storeMutations.UPDATE_GLASS_TO_REPLACE, expectedGlassToReplace); -// }); -// }); - - -// describe("vehicle-damage.vue", () => { -// test("Windshield repair on ForwardButtonAction triggers a router.navigate and saves selection to store", async () => { -// //Arrange -// const partsData = { partsOrQuestions: []}; -// const { wrapper } = setupMocks({ -// pageHeaderWidgetHeaderText: "", -// mountOptionsMockData: { -// router: { navigate: jest.fn(), }, -// actionList: [{ actionName: storeActions.GET_PARTS_OR_QUESTIONS, data: partsData, },], -// store: { -// getters: { -// vehicle: {}, -// }, -// }, -// }, -// }); - -// wrapper.vm.selectedDamageLocations = ["Windshield"]; -// wrapper.vm.selectedWindshieldOptions = { -// selectedWindshieldChipCount : [2], -// selectedWindshieldDamageType: ["Repair"] -// }; - -// //Act -// vehicleDamage.beforeRouteEnter.call( -// wrapper.vm, -// { query: { fmgPage: "vehicle-damage" } }, -// undefined, -// (c) => c(wrapper.vm) -// ); - -// await wrapper.vm.forwardButtonAction(); - -// //Assert -// expect(wrapper.vm.$router.navigate).toHaveBeenCalled(); -// expect(store.commit).toBeCalledWith(storeMutations.UPDATE_IS_REPAIR, true); -// expect(store.commit).toBeCalledWith(storeMutations.UPDATE_NUMBER_OF_CHIPS, 2); -// }); -// }); - -// describe("vehicle-damage.vue", () => { -// test("isWindshieldDamageLocation is true when windshield is selected", async () => { - -// //Arrange -// const { wrapper } = setupMocks({}); - -// //Act -// vehicleDamage.beforeRouteEnter.call( -// wrapper.vm, -// { query: { fmgPage: "vehicle-damage" } }, -// undefined, -// (c) => c(wrapper.vm) -// ); - -// wrapper.vm.selectedDamageLocations = ["Windshield"]; - -// //Assert -// expect(wrapper.vm.isWindshieldDamageLocation).toEqual(true); -// }); -// }); - -// describe("vehicle-damage.vue", () => { -// test("isSideDoorDamageLocation is true Side door is selected", async () => { - -// //Arrange -// const { wrapper } = setupMocks({}); - -// //Act -// vehicleDamage.beforeRouteEnter.call( -// wrapper.vm, -// { query: { fmgPage: "vehicle-damage" } }, -// undefined, -// (c) => c(wrapper.vm) -// ); - -// wrapper.vm.selectedDamageLocations = ["Sidedoor"]; - -// //Assert -// expect(wrapper.vm.isSideDoorDamageLocation).toEqual(true); -// }); -// }); - - -// describe("vehicle-damage.vue", () => { -// test("isRearWindowDamageLocation is true if Rear Window damage is selected", async () => { - -// //Arrange -// const { wrapper } = setupMocks({}); - -// //Act -// vehicleDamage.beforeRouteEnter.call( -// wrapper.vm, -// { query: { fmgPage: "vehicle-damage" } }, -// undefined, -// (c) => c(wrapper.vm) -// ); - -// wrapper.vm.selectedDamageLocations = ["RearWindow"]; - -// //Assert -// expect(wrapper.vm.isRearWindowDamageLocation).toEqual(true); -// }); -// }); - -// describe("vehicle-damage.vue", () => { -// test("isWindshieldRepair is true if windshield repair is selected", async () => { - -// //Arrange -// const { wrapper } = setupMocks({}); - -// //Act -// vehicleDamage.beforeRouteEnter.call( -// wrapper.vm, -// { query: { fmgPage: "vehicle-damage" } }, -// undefined, -// (c) => c(wrapper.vm) -// ); - -// wrapper.vm.selectedDamageLocations = ["Windshield"]; -// wrapper.vm.selectedWindshieldOptions = { selectedWindshieldDamageType: ["Repair"]}; - -// //Assert -// expect(wrapper.vm.isWindshieldRepair).toEqual(true); -// }); -// }); - -// describe("vehicle-damage.vue", () => { -// test("isWindshieldRepair is false if windshield damage is not selected", async () => { - -// //Arrange -// const { wrapper } = setupMocks({}); - -// //Act -// vehicleDamage.beforeRouteEnter.call( -// wrapper.vm, -// { query: { fmgPage: "vehicle-damage" } }, -// undefined, -// (c) => c(wrapper.vm) -// ); - -// wrapper.vm.selectedDamageLocations = ["SideDoor"]; -// wrapper.vm.selectedWindshieldOptions = { selectedWindshieldDamageType: ["Repair"]}; - -// //Assert -// expect(wrapper.vm.isWindshieldRepair).toEqual(false); -// }); -// }); - -// describe("vehicle-damage.vue", () => { -// test("isDriverSideReplace is true if side door driver is selected", async () => { - -// //Arrange -// const { wrapper } = setupMocks({}); - -// //Act -// vehicleDamage.beforeRouteEnter.call( -// wrapper.vm, -// { query: { fmgPage: "vehicle-damage" } }, -// undefined, -// (c) => c(wrapper.vm) -// ); - -// wrapper.vm.selectedDamageLocations = ["Sidedoor"]; -// wrapper.vm.sideDoorOptionsData = { selectedDoorSides: ["DriverSide"]}; - -// //Assert -// expect(wrapper.vm.isDriverSideReplace).toEqual(true); -// }); -// }); - -// describe("vehicle-damage.vue", () => { -// test("isPassengerSideReplace is true if side door passenger selected", async () => { - -// //Arrange -// const { wrapper } = setupMocks({}); - -// //Act -// vehicleDamage.beforeRouteEnter.call( -// wrapper.vm, -// { query: { fmgPage: "vehicle-damage" } }, -// undefined, -// (c) => c(wrapper.vm) -// ); - -// wrapper.vm.selectedDamageLocations = ["Sidedoor"]; -// wrapper.vm.sideDoorOptionsData = { selectedDoorSides: ["PassengerSide"]}; - -// //Assert -// expect(wrapper.vm.isPassengerSideReplace).toEqual(true); -// }); -// }); - -// describe("vehicle-damage.vue", () => { -// test("Call invalidation, ResetPartsAndState should be called", async () => { - -// //Arrange -// const { wrapper } = setupMocks({}); - -// //Act -// vehicleDamage.beforeRouteEnter.call( -// wrapper.vm, -// { query: { fmgPage: "vehicle-damage" } }, -// undefined, -// (c) => c(wrapper.vm) -// ); - -// wrapper.vm.resetDependentState(); - -// //Assert -// expect(store.dispatch).toBeCalledWith(storeActions.RESET_PARTS_STATE_AND_DEPENDENCIES) - -// }); -// }); - -// const damageLocations = [["Windshield", [damageLocationsSelected.WINDSHIELD]], -// ["Driver", [damageLocationsSelected.SIDEDOOR]], -// ["Passenger", [damageLocationsSelected.SIDEDOOR]], -// ["Rear", [damageLocationsSelected.REARWINDOW]]]; -// describe("vehicle-damage.vue", () => { -// test.each(damageLocations)("getDamageLocationsFromStore for %s returns expected %s", async (damageLocation, expectedGlass) => { - -// //Arrange -// const { wrapper } = setupMocks({}); - -// //Act -// vehicleDamage.beforeRouteEnter.call( -// wrapper.vm, -// { query: { fmgPage: "vehicle-damage" } }, -// undefined, -// (c) => c(wrapper.vm) -// ); - -// store.getters = { vehicle: { carId: "C0000000" }, eventBusItem: jest.fn(), damage: { glassToReplace: [{location: damageLocation}] }, isRepair: true}; - -// var glassSelections = wrapper.vm.getDamageLocationsFromStore(); - -// //Assert -// expect(glassSelections).toEqual(expectedGlass); - -// }); -// }); - -// const storeWindshieldOptions = [[1, false, "Windshield", "Single", { selectedWindshieldDamageType: [damageLocationsSelected.REPLACE], -// selectedWindshieldChipCount: [], selectedWindshieldReplaceOptions: [damageLocationsSelected.SINGLE]}], -// [2, false, "Windshield", "Driver", { selectedWindshieldDamageType: [damageLocationsSelected.REPLACE], -// selectedWindshieldChipCount: [], selectedWindshieldReplaceOptions: [damageLocationsSelected.DRIVER]}], -// [3, false, "Windshield", "Passenger", { selectedWindshieldDamageType: [damageLocationsSelected.REPLACE], -// selectedWindshieldChipCount: [], selectedWindshieldReplaceOptions: [damageLocationsSelected.PASSENGER]}], -// [4, true, "", "", { selectedWindshieldDamageType: [damageLocationsSelected.REPAIR], -// selectedWindshieldChipCount: [2], selectedWindshieldReplaceOptions: []}] -// ]; -// describe("vehicle-damage.vue", () => { -// test.each(storeWindshieldOptions)("getWindshieldOptionsFromStore test #%s", async (testNum, isRepair, damageLocation, damageName, expectedWindshieldOptions) => { - -// //Arrange -// const { wrapper } = setupMocks({}); - -// //Act -// vehicleDamage.beforeRouteEnter.call( -// wrapper.vm, -// { query: { fmgPage: "vehicle-damage" } }, -// undefined, -// (c) => c(wrapper.vm) -// ); - -// store.getters = { -// vehicle: -// { carId: "C0000000" }, -// eventBusItem: jest.fn(), -// damage: -// { -// glassToReplace: [{location: damageLocation, name: damageName}], -// isRepair: isRepair, -// numberOfChips: 2 -// }, -// }; - -// var windshieldSelections = wrapper.vm.getWindshieldOptionsFromStore(); - -// //Assert -// expect(windshieldSelections).toEqual(expectedWindshieldOptions); - -// }); -// }); - -// const driverDoorSides = [["Driver", "Front", [damageLocationsSelected.FRONT]], -// ["Driver", "Back", [damageLocationsSelected.BACK]], -// ["Driver", "Vent", [damageLocationsSelected.VENT]], -// ["Driver", "Quarter", [damageLocationsSelected.QUARTER]] -// ]; -// describe("vehicle-damage.vue", () => { -// test.each(driverDoorSides)("getDriverSideReplaceOptionsFromStore for %s-%s returns expected %s", async (damageLocation, damageName, expectedGlass) => { - -// //Arrange -// const { wrapper } = setupMocks({}); - -// //Act -// vehicleDamage.beforeRouteEnter.call( -// wrapper.vm, -// { query: { fmgPage: "vehicle-damage" } }, -// undefined, -// (c) => c(wrapper.vm) -// ); - -// store.getters = { vehicle: { carId: "C0000000" }, eventBusItem: jest.fn(), damage: { glassToReplace: [{location: damageLocation, name: damageName}] }, isRepair: true}; - -// var glassSelections = wrapper.vm.getDriverSideReplaceOptionsFromStore(); - -// //Assert -// expect(glassSelections).toEqual(expectedGlass); - -// }); -// }); - -// const passengerDoorSides = [["Passenger", "Front", [damageLocationsSelected.FRONT]], -// ["Passenger", "Back", [damageLocationsSelected.BACK]], -// ["Passenger", "Vent", [damageLocationsSelected.VENT]], -// ["Passenger", "Quarter", [damageLocationsSelected.QUARTER]] -// ]; -// describe("vehicle-damage.vue", () => { -// test.each(passengerDoorSides)("getPassengerSideReplaceOptionsFromStore for %s-%s returns expected %s", async (damageLocation, damageName, expectedGlass) => { - -// //Arrange -// const { wrapper } = setupMocks({}); - -// //Act -// vehicleDamage.beforeRouteEnter.call( -// wrapper.vm, -// { query: { fmgPage: "vehicle-damage" } }, -// undefined, -// (c) => c(wrapper.vm) -// ); - -// store.getters = { vehicle: { carId: "C0000000" }, eventBusItem: jest.fn(), damage: { glassToReplace: [{location: damageLocation, name: damageName}] }, isRepair: true}; - -// var glassSelections = wrapper.vm.getPassengerSideReplaceOptionsFromStore(); - -// //Assert -// expect(glassSelections).toEqual(expectedGlass); - -// }); -// }); - -// const rearReplaceOptions = [["Rear", "Stationary", [damageLocationsSelected.STATIONARY]], - // ["Rear", "Slider", [damageLocationsSelected.SLIDER]] - // ]; describe("vehicle-damage.vue", () => { - test.each()("getRearReplaceOptionsFromStore for %s-%s returns expected %s", async () => { + test("CarId set, arePagePrerequisitesValid should be true ", async () => { + //Arrange + const { wrapper } = setupMocks({}); + + //Act + vehicleDamage.beforeRouteEnter.call( + wrapper.vm, + { query: { fmgPage: "vehicle-damage" } }, + undefined, + (c) => c(wrapper.vm) + ); + + let arePagePrerequisitesValid = wrapper.vm.arePagePrerequisitesValid(); + await nextTick(); + + //Assert + expect(arePagePrerequisitesValid).toBe(true); + }); +}); + +describe("vehicle-damage.vue", () => { + test("BackButtonAction triggers a router.navigate change", async () => { //Arrange const { wrapper } = setupMocks({}); //Act - // vehicleDamage.beforeRouteEnter.call( - // wrapper.vm, - // { query: { fmgPage: "vehicle-damage" } }, - // undefined, - // (c) => c(wrapper.vm) - // ); + vehicleDamage.beforeRouteEnter.call( + wrapper.vm, + { query: { fmgPage: "vehicle-damage" } }, + undefined, + (c) => c(wrapper.vm) + ); - // store.getters = { vehicle: { carId: "C0000000" }, eventBusItem: jest.fn(), damage: { glassToReplace: [{location: damageLocation, name: damageName}] }, isRepair: true}; + wrapper.vm.backButtonAction(); - // var glassSelections = wrapper.vm.getRearReplaceOptionsFromStore(); + //Assert + expect(wrapper.vm.$router.navigate).toHaveBeenCalled(); + + }); +}); + +describe("vehicle-damage.vue", () => { + test("Replace several pieces of glass on ForwardButtonAction triggers a router.navigateAfterSave and saves selections to store", async () => { + //Arrange + const partsData = { + partsOrQuestions: [{ + glassName: "Single", + glassLocation: "Windshield", + parts: null, + partQuestions: [{ + questionSequence: 1, + questionText: "Is your vehicle equipped with a heated steering wheel?", + answers: [{ + answerText: "Yes", + nextQuestionSequence: null, + answerResult: "FW04957" + }, + { + answerText: "No", + nextQuestionSequence: 2, + answerResult: "" + }] + }, + { + questionSequence: 2, + questionText: "Is your vehicle equipped with a remote start?", + answers: [{ + answerText: "Yes", + nextQuestionSequence: null, + answerResult: "FW04181" + }, + { + answerText: "No", + nextQuestionSequence: null, + answerResult: "FW04179" + }] + }] + }] + }; + + const { wrapper } = setupMocks({ + pageHeaderWidgetHeaderText: "", + mountOptionsMockData: { + router: { navigateAfterSave: jest.fn(), }, + actionList: [{ actionName: storeActions.GET_PARTS_OR_QUESTIONS, data: partsData, },], + store: { + getters: { + vehicle: {}, + }, + }, + }, + }); + + wrapper.vm.selectedDamageLocations = ["Windshield", "SideDoor", "RearWindow"]; + wrapper.vm.selectedWindshieldOptions = { + selectedWindshieldChipCount : null, + selectedWindshieldReplaceOptions : ["Single"], + selectedWindshieldDamageType: ["Replace"] + }; + + wrapper.vm.sideDoorOptionsData = { + selectedDoorSides: ["DriverSide", "PassengerSide"], + selectedDriverSideReplaceOptions: ["Back"], + selectedPassengerSideReplaceOptions: ["Quarter"] + }; + + wrapper.vm.selectedRearReplaceOptions = ["Stationary"]; + + const expectedGlassToReplace = [{location: "Windshield", name: "Single"}, {location: "Driver", name: "Back"}, + {location: "Passenger", name: "Quarter"}, {location: "Rear", name: "Stationary"}]; + + //Act + vehicleDamage.beforeRouteEnter.call( + wrapper.vm, + { query: { fmgPage: "vehicle-damage" } }, + undefined, + (c) => c(wrapper.vm) + ); - // //Assert - // expect(glassSelections).toEqual(expectedGlass); + await wrapper.vm.forwardButtonAction(); + + //Assert + expect(wrapper.vm.$router.navigateAfterSave).toHaveBeenCalled(); + expect(wrapper.vm.selectedGlassToReplace()).toEqual(expectedGlassToReplace); + expect(store.commit).toBeCalledWith(storeMutations.UPDATE_IS_REPAIR, false); + expect(store.commit).toBeCalledWith(storeMutations.UPDATE_GLASS_TO_REPLACE, expectedGlassToReplace); + }); +}); + +describe("vehicle-damage.vue", () => { + test("Windshield replace with single part on ForwardButtonAction triggers a router.navigate and saves selections to store", async () => { + //Arrange + const partsData = { partsOrQuestions: [ + { + glassLocation: "Windshield", + glassName: "Single", + partQuestions: null, + parts: [ + { + color: "Green Tint, Green Shade", + description: "rain sensor, solar", + partNumber: "FW02728GGYN", + requiresCapabilityQuestions: false, + requiresRecalibration: false + } + ]}]}; + + const { wrapper } = setupMocks({ + pageHeaderWidgetHeaderText: "", + mountOptionsMockData: { + router: { navigate: jest.fn(), }, + actionList: [{ actionName: storeActions.GET_PARTS_OR_QUESTIONS, data: partsData, },], + store: { + getters: { + vehicle: {}, + }, + }, + }, + }); + + wrapper.vm.selectedDamageLocations = ["Windshield"]; + wrapper.vm.selectedWindshieldOptions = { + selectedWindshieldChipCount : null, + selectedWindshieldReplaceOptions : ["Single"], + selectedWindshieldDamageType: ["Replace"] + }; + + const expectedGlassToReplace = [{location: "Windshield", name: "Single"},]; + + //Act + vehicleDamage.beforeRouteEnter.call( + wrapper.vm, + { query: { fmgPage: "vehicle-damage" } }, + undefined, + (c) => c(wrapper.vm) + ); + + await wrapper.vm.forwardButtonAction(); + + //Assert + expect(wrapper.vm.$router.navigate).toHaveBeenCalled(); + expect(wrapper.vm.selectedGlassToReplace()).toEqual(expectedGlassToReplace); + expect(store.commit).toBeCalledWith(storeMutations.UPDATE_IS_REPAIR, false); + expect(store.commit).toBeCalledWith(storeMutations.UPDATE_GLASS_TO_REPLACE, expectedGlassToReplace); + expect(store.commit).toBeCalledWith(storeMutations.UPDATE_PARTS, partsData.partsOrQuestions[0].parts); + }); +}); + +describe("vehicle-damage.vue", () => { + test("Windshield replace with multiple parts on ForwardButtonAction triggers a router.navigateAfterSave and saves selections to store", async () => { + //Arrange + const partsData = { partsOrQuestions: [ + { + glassLocation: "Windshield", + glassName: "Single", + partQuestions: null, + parts: [ + { + color: "Green Tint, Green Shade", + description: "rain sensor, solar", + partNumber: "FW02728GGYN", + requiresCapabilityQuestions: false, + requiresRecalibration: false + }, + { + color: "Green Tint, Green Shade", + description: "rain sensor, solar, hydrophobic coating", + partNumber: "FW02760GGYN", + requiresCapabilityQuestions: false, + requiresRecalibration: false + } + ]}, + { + glassName: "Stationary", + glassLocation: "Rear", + parts: [ + { + partNumber: "DB09626GTYN", + description: "heated glass, solar, antenna", + color: "Green Tint", + requiresRecalibration: false, + requiresCapabilityQuestions: false, + childParts: null + }, + { + partNumber: "DB09821GTYN", + description: "heated glass, solar, antenna, onstar", + color: "Green Tint", + requiresRecalibration: false, + requiresCapabilityQuestions: false, + childParts: null + } + ], + "partQuestions": null + } + ]}; + + const { wrapper } = setupMocks({ + pageHeaderWidgetHeaderText: "", + mountOptionsMockData: { + router: { navigateAfterSave: jest.fn(), }, + actionList: [{ actionName: storeActions.GET_PARTS_OR_QUESTIONS, data: partsData, },], + store: { + getters: { + vehicle: {}, + }, + }, + }, + }); + + wrapper.vm.selectedDamageLocations = ["Windshield"]; + wrapper.vm.selectedWindshieldOptions = { + selectedWindshieldChipCount : null, + selectedWindshieldReplaceOptions : ["Single"], + selectedWindshieldDamageType: ["Replace"] + }; + + const expectedGlassToReplace = [{location: "Windshield", name: "Single"},]; + + //Act + vehicleDamage.beforeRouteEnter.call( + wrapper.vm, + { query: { fmgPage: "vehicle-damage" } }, + undefined, + (c) => c(wrapper.vm) + ); + + await wrapper.vm.forwardButtonAction(); + + //Assert + expect(wrapper.vm.$router.navigateAfterSave).toHaveBeenCalled(); + expect(wrapper.vm.selectedGlassToReplace()).toEqual(expectedGlassToReplace); + expect(store.commit).toBeCalledWith(storeMutations.UPDATE_IS_REPAIR, false); + expect(store.commit).toBeCalledWith(storeMutations.UPDATE_GLASS_TO_REPLACE, expectedGlassToReplace); + }); +}); + + +describe("vehicle-damage.vue", () => { + test("Windshield repair on ForwardButtonAction triggers a router.navigate and saves selection to store", async () => { + //Arrange + const partsData = { partsOrQuestions: []}; + const { wrapper } = setupMocks({ + pageHeaderWidgetHeaderText: "", + mountOptionsMockData: { + router: { navigate: jest.fn(), }, + actionList: [{ actionName: storeActions.GET_PARTS_OR_QUESTIONS, data: partsData, },], + store: { + getters: { + vehicle: {}, + }, + }, + }, + }); + + wrapper.vm.selectedDamageLocations = ["Windshield"]; + wrapper.vm.selectedWindshieldOptions = { + selectedWindshieldChipCount : [2], + selectedWindshieldDamageType: ["Repair"] + }; + + //Act + vehicleDamage.beforeRouteEnter.call( + wrapper.vm, + { query: { fmgPage: "vehicle-damage" } }, + undefined, + (c) => c(wrapper.vm) + ); + + await wrapper.vm.forwardButtonAction(); + + //Assert + expect(wrapper.vm.$router.navigate).toHaveBeenCalled(); + expect(store.commit).toBeCalledWith(storeMutations.UPDATE_IS_REPAIR, true); + expect(store.commit).toBeCalledWith(storeMutations.UPDATE_NUMBER_OF_CHIPS, 2); + }); +}); + +describe("vehicle-damage.vue", () => { + test("isWindshieldDamageLocation is true when windshield is selected", async () => { + + //Arrange + const { wrapper } = setupMocks({}); + + //Act + vehicleDamage.beforeRouteEnter.call( + wrapper.vm, + { query: { fmgPage: "vehicle-damage" } }, + undefined, + (c) => c(wrapper.vm) + ); + + wrapper.vm.selectedDamageLocations = ["Windshield"]; + + //Assert + expect(wrapper.vm.isWindshieldDamageLocation).toEqual(true); + }); +}); + +describe("vehicle-damage.vue", () => { + test("isSideDoorDamageLocation is true Side door is selected", async () => { + + //Arrange + const { wrapper } = setupMocks({}); + + //Act + vehicleDamage.beforeRouteEnter.call( + wrapper.vm, + { query: { fmgPage: "vehicle-damage" } }, + undefined, + (c) => c(wrapper.vm) + ); + + wrapper.vm.selectedDamageLocations = ["Sidedoor"]; + + //Assert + expect(wrapper.vm.isSideDoorDamageLocation).toEqual(true); + }); +}); + + +describe("vehicle-damage.vue", () => { + test("isRearWindowDamageLocation is true if Rear Window damage is selected", async () => { + + //Arrange + const { wrapper } = setupMocks({}); + + //Act + vehicleDamage.beforeRouteEnter.call( + wrapper.vm, + { query: { fmgPage: "vehicle-damage" } }, + undefined, + (c) => c(wrapper.vm) + ); + + wrapper.vm.selectedDamageLocations = ["RearWindow"]; + + //Assert + expect(wrapper.vm.isRearWindowDamageLocation).toEqual(true); + }); +}); + +describe("vehicle-damage.vue", () => { + test("isWindshieldRepair is true if windshield repair is selected", async () => { + + //Arrange + const { wrapper } = setupMocks({}); + + //Act + vehicleDamage.beforeRouteEnter.call( + wrapper.vm, + { query: { fmgPage: "vehicle-damage" } }, + undefined, + (c) => c(wrapper.vm) + ); + + wrapper.vm.selectedDamageLocations = ["Windshield"]; + wrapper.vm.selectedWindshieldOptions = { selectedWindshieldDamageType: ["Repair"]}; + + //Assert + expect(wrapper.vm.isWindshieldRepair).toEqual(true); + }); +}); + +describe("vehicle-damage.vue", () => { + test("isWindshieldRepair is false if windshield damage is not selected", async () => { + + //Arrange + const { wrapper } = setupMocks({}); + + //Act + vehicleDamage.beforeRouteEnter.call( + wrapper.vm, + { query: { fmgPage: "vehicle-damage" } }, + undefined, + (c) => c(wrapper.vm) + ); + + wrapper.vm.selectedDamageLocations = ["SideDoor"]; + wrapper.vm.selectedWindshieldOptions = { selectedWindshieldDamageType: ["Repair"]}; + + //Assert + expect(wrapper.vm.isWindshieldRepair).toEqual(false); + }); +}); + +describe("vehicle-damage.vue", () => { + test("isDriverSideReplace is true if side door driver is selected", async () => { + + //Arrange + const { wrapper } = setupMocks({}); + + //Act + vehicleDamage.beforeRouteEnter.call( + wrapper.vm, + { query: { fmgPage: "vehicle-damage" } }, + undefined, + (c) => c(wrapper.vm) + ); + + wrapper.vm.selectedDamageLocations = ["Sidedoor"]; + wrapper.vm.sideDoorOptionsData = { selectedDoorSides: ["DriverSide"]}; + + //Assert + expect(wrapper.vm.isDriverSideReplace).toEqual(true); + }); +}); + +describe("vehicle-damage.vue", () => { + test("isPassengerSideReplace is true if side door passenger selected", async () => { + + //Arrange + const { wrapper } = setupMocks({}); + + //Act + vehicleDamage.beforeRouteEnter.call( + wrapper.vm, + { query: { fmgPage: "vehicle-damage" } }, + undefined, + (c) => c(wrapper.vm) + ); + + wrapper.vm.selectedDamageLocations = ["Sidedoor"]; + wrapper.vm.sideDoorOptionsData = { selectedDoorSides: ["PassengerSide"]}; + + //Assert + expect(wrapper.vm.isPassengerSideReplace).toEqual(true); + }); +}); + +describe("vehicle-damage.vue", () => { + test("Call invalidation, ResetPartsAndState should be called", async () => { + + //Arrange + const { wrapper } = setupMocks({}); + + //Act + vehicleDamage.beforeRouteEnter.call( + wrapper.vm, + { query: { fmgPage: "vehicle-damage" } }, + undefined, + (c) => c(wrapper.vm) + ); + + wrapper.vm.resetDependentState(); + + //Assert + expect(store.dispatch).toBeCalledWith(storeActions.RESET_PARTS_STATE_AND_DEPENDENCIES) + + }); +}); + +const damageLocations = [["Windshield", [damageLocationsSelected.WINDSHIELD]], + ["Driver", [damageLocationsSelected.SIDEDOOR]], + ["Passenger", [damageLocationsSelected.SIDEDOOR]], + ["Rear", [damageLocationsSelected.REARWINDOW]]]; +describe("vehicle-damage.vue", () => { + test.each(damageLocations)("getDamageLocationsFromStore for %s returns expected %s", async (damageLocation, expectedGlass) => { + + //Arrange + const { wrapper } = setupMocks({}); + + //Act + vehicleDamage.beforeRouteEnter.call( + wrapper.vm, + { query: { fmgPage: "vehicle-damage" } }, + undefined, + (c) => c(wrapper.vm) + ); + + store.getters = { vehicle: { carId: "C0000000" }, eventBusItem: jest.fn(), damage: { glassToReplace: [{location: damageLocation}] }, isRepair: true}; + + var glassSelections = wrapper.vm.getDamageLocationsFromStore(); + + //Assert + expect(glassSelections).toEqual(expectedGlass); + + }); +}); + +const storeWindshieldOptions = [[1, false, "Windshield", "Single", { selectedWindshieldDamageType: [damageLocationsSelected.REPLACE], + selectedWindshieldChipCount: [], selectedWindshieldReplaceOptions: [damageLocationsSelected.SINGLE]}], + [2, false, "Windshield", "Driver", { selectedWindshieldDamageType: [damageLocationsSelected.REPLACE], + selectedWindshieldChipCount: [], selectedWindshieldReplaceOptions: [damageLocationsSelected.DRIVER]}], + [3, false, "Windshield", "Passenger", { selectedWindshieldDamageType: [damageLocationsSelected.REPLACE], + selectedWindshieldChipCount: [], selectedWindshieldReplaceOptions: [damageLocationsSelected.PASSENGER]}], + [4, true, "", "", { selectedWindshieldDamageType: [damageLocationsSelected.REPAIR], + selectedWindshieldChipCount: [2], selectedWindshieldReplaceOptions: []}] + ]; +describe("vehicle-damage.vue", () => { + test.each(storeWindshieldOptions)("getWindshieldOptionsFromStore test #%s", async (testNum, isRepair, damageLocation, damageName, expectedWindshieldOptions) => { + + //Arrange + const { wrapper } = setupMocks({}); + + //Act + vehicleDamage.beforeRouteEnter.call( + wrapper.vm, + { query: { fmgPage: "vehicle-damage" } }, + undefined, + (c) => c(wrapper.vm) + ); + + store.getters = { + vehicle: + { carId: "C0000000" }, + eventBusItem: jest.fn(), + damage: + { + glassToReplace: [{location: damageLocation, name: damageName}], + isRepair: isRepair, + numberOfChips: 2 + }, + }; + + var windshieldSelections = wrapper.vm.getWindshieldOptionsFromStore(); + + //Assert + expect(windshieldSelections).toEqual(expectedWindshieldOptions); + + }); +}); + +const driverDoorSides = [["Driver", "Front", [damageLocationsSelected.FRONT]], + ["Driver", "Back", [damageLocationsSelected.BACK]], + ["Driver", "Vent", [damageLocationsSelected.VENT]], + ["Driver", "Quarter", [damageLocationsSelected.QUARTER]] + ]; +describe("vehicle-damage.vue", () => { + test.each(driverDoorSides)("getDriverSideReplaceOptionsFromStore for %s-%s returns expected %s", async (damageLocation, damageName, expectedGlass) => { + + //Arrange + const { wrapper } = setupMocks({}); + + //Act + vehicleDamage.beforeRouteEnter.call( + wrapper.vm, + { query: { fmgPage: "vehicle-damage" } }, + undefined, + (c) => c(wrapper.vm) + ); + + store.getters = { vehicle: { carId: "C0000000" }, eventBusItem: jest.fn(), damage: { glassToReplace: [{location: damageLocation, name: damageName}] }, isRepair: true}; + + var glassSelections = wrapper.vm.getDriverSideReplaceOptionsFromStore(); + + //Assert + expect(glassSelections).toEqual(expectedGlass); + + }); +}); + +const passengerDoorSides = [["Passenger", "Front", [damageLocationsSelected.FRONT]], + ["Passenger", "Back", [damageLocationsSelected.BACK]], + ["Passenger", "Vent", [damageLocationsSelected.VENT]], + ["Passenger", "Quarter", [damageLocationsSelected.QUARTER]] + ]; +describe("vehicle-damage.vue", () => { + test.each(passengerDoorSides)("getPassengerSideReplaceOptionsFromStore for %s-%s returns expected %s", async (damageLocation, damageName, expectedGlass) => { + + //Arrange + const { wrapper } = setupMocks({}); + + //Act + vehicleDamage.beforeRouteEnter.call( + wrapper.vm, + { query: { fmgPage: "vehicle-damage" } }, + undefined, + (c) => c(wrapper.vm) + ); + + store.getters = { vehicle: { carId: "C0000000" }, eventBusItem: jest.fn(), damage: { glassToReplace: [{location: damageLocation, name: damageName}] }, isRepair: true}; + + var glassSelections = wrapper.vm.getPassengerSideReplaceOptionsFromStore(); + + //Assert + expect(glassSelections).toEqual(expectedGlass); + + }); +}); + +const rearReplaceOptions = [["Rear", "Stationary", [damageLocationsSelected.STATIONARY]], + ["Rear", "Slider", [damageLocationsSelected.SLIDER]] + ]; +describe("vehicle-damage.vue", () => { + test.each(rearReplaceOptions)("getRearReplaceOptionsFromStore for %s-%s returns expected %s", async (damageLocation, damageName, expectedGlass) => { + + //Arrange + const { wrapper } = setupMocks({}); + + //Act + vehicleDamage.beforeRouteEnter.call( + wrapper.vm, + { query: { fmgPage: "vehicle-damage" } }, + undefined, + (c) => c(wrapper.vm) + ); + + store.getters = { vehicle: { carId: "C0000000" }, eventBusItem: jest.fn(), damage: { glassToReplace: [{location: damageLocation, name: damageName}] }, isRepair: true}; + + var glassSelections = wrapper.vm.getRearReplaceOptionsFromStore(); + + //Assert + expect(glassSelections).toEqual(expectedGlass); }); }); @@ -697,32 +697,32 @@ describe("vehicle-damage.vue", () => { // THE FOLLOWING TEST IS NOT NECESSARILY REQUIRED FOR COVERAGE // BUT KEEP FOR AN EXAMPLE OF A VALIDATION TEST // -// describe("vehicle-damage.vue", () => { -// test("when validation rules are set they should validate correctly", async () => { +describe("vehicle-damage.vue", () => { + test("when validation rules are set they should validate correctly", async () => { -// //Arrange -// const { wrapper } = setupMocks({}); + //Arrange + const { wrapper } = setupMocks({}); -// //Act -// vehicleDamage.beforeRouteEnter.call( -// wrapper.vm, -// { query: { fmgPage: "vehicle-damage" } }, -// undefined, -// (c) => c(wrapper.vm) -// ); -// const testNull = validate( "", "replace-options-required"); -// const testString = validate( "sldfj", "replace-options-required"); + //Act + vehicleDamage.beforeRouteEnter.call( + wrapper.vm, + { query: { fmgPage: "vehicle-damage" } }, + undefined, + (c) => c(wrapper.vm) + ); + const testNull = validate( "", "replace-options-required"); + const testString = validate( "sldfj", "replace-options-required"); -// //Assert -// testNull.then(function(data) { -// expect(data.valid).toEqual(false); -// }); -// testString.then(function(data) { -// expect(data.valid).toEqual(true); -// }); + //Assert + testNull.then(function(data) { + expect(data.valid).toEqual(false); + }); + testString.then(function(data) { + expect(data.valid).toEqual(true); + }); -// }); -// }); + }); +}); function setupMocks({ @@ -801,17 +801,17 @@ function setupMocks({ sideDoorOptionsWrapper.vm.initializeComponent = sideDoorOptions.methods.initializeComponent; - // const windshieldOptionsWrapper = wrapper.findComponent({ name: "windshieldOptions" }); - // windshieldOptionsWrapper.vm.initializeComponent = - // windshieldOptions.methods.initializeComponent; + const windshieldOptionsWrapper = wrapper.findComponent({ name: "windshieldOptions" }); + windshieldOptionsWrapper.vm.initializeComponent = + windshieldOptions.methods.initializeComponent; - // const backGlassOptionsWrapper = wrapper.findComponent({ name: "replaceOptionsQuestion" }); - // backGlassOptionsWrapper.vm.initializeComponent = - // replaceOptionsQuestion.methods.initializeComponent; + const backGlassOptionsWrapper = wrapper.findComponent({ name: "replaceOptionsQuestion" }); + backGlassOptionsWrapper.vm.initializeComponent = + replaceOptionsQuestion.methods.initializeComponent; - // const damageLocationQuestionWrapper = wrapper.findComponent({ name: "damageLocationQuestion" }); - // damageLocationQuestionWrapper.vm.initializeComponent = - // damageLocationQuestion.methods.initializeComponent; + const damageLocationQuestionWrapper = wrapper.findComponent({ name: "damageLocationQuestion" }); + damageLocationQuestionWrapper.vm.initializeComponent = + damageLocationQuestion.methods.initializeComponent; wrapper.vm.setCmsContent = baseMixin.methods.setCmsContent;