diff --git a/src/layouts/capability-questions/capability-questions.vue b/src/layouts/capability-questions/capability-questions.vue index 5146e7f9e..ea51194e8 100644 --- a/src/layouts/capability-questions/capability-questions.vue +++ b/src/layouts/capability-questions/capability-questions.vue @@ -6,6 +6,7 @@ v-slot="{ meta }" >
+ diff --git a/src/layouts/vehicle-parts/vehicle-parts.spec.js b/src/layouts/vehicle-parts/vehicle-parts.spec.js index bd7911da4..2e9110d7a 100644 --- a/src/layouts/vehicle-parts/vehicle-parts.spec.js +++ b/src/layouts/vehicle-parts/vehicle-parts.spec.js @@ -9,6 +9,7 @@ import { shallowMount } from "@vue/test-utils"; import { getMountOptions } from "@/helpers/unit-test-helper.js"; import { nextTick } from "vue"; import baseMixin from "@/mixins/base-mixin.js"; +import { storeActions } from "@/constants/store-actions"; import store from "@/store"; import { navigateToHeritageFunnel } from "@/helpers/heritage-integration/navigation-helper"; import { navigationScenarios } from "@/router/router-constants/navigation-scenarios"; @@ -227,7 +228,7 @@ describe("vehicle-parts.vue", () => { wrapper.vm.backButtonAction(); //Assert - expect(wrapper.vm.$router.navigate).toHaveBeenCalledWith(navigationScenarios.CLICKED_BACK_WITH_PART_QUESTION_ANSWERS, wrapper.vm.$route); + expect(wrapper.vm.$router.navigate).toHaveBeenCalledWith(navigationScenarios.CLICKED_BACK_TO_GO_TO_PART_QUESTIONS, wrapper.vm.$route); }); @@ -266,7 +267,7 @@ describe("vehicle-parts.vue", () => { wrapper.vm.backButtonAction(); //Assert - expect(wrapper.vm.$router.navigate).toHaveBeenCalledWith(navigationScenarios.CLICKED_BACK_WITHOUT_PART_QUESTION_ANSWERS, wrapper.vm.$route); + expect(wrapper.vm.$router.navigate).toHaveBeenCalledWith(navigationScenarios.CLICKED_BACK_TO_GO_TO_VIN_LOOKUP, wrapper.vm.$route); }); @@ -311,6 +312,7 @@ describe("vehicle-parts.vue", () => { } ] }); + store.getters.lineItems = { glassParts: {} } const { wrapper } = setupMocks({ mountOptionsMockData: { @@ -367,6 +369,8 @@ describe("vehicle-parts.vue", () => { } ] }); + store.getters.lineItems = { glassParts: {} } + store.getters.vehicle = { carId: "TEST_CAR_ID" } const { wrapper } = setupMocks({ mountOptionsMockData: { @@ -382,6 +386,12 @@ describe("vehicle-parts.vue", () => { getters: store.getters, commit: store.commit }, + actionList: [ + { + actionName: storeActions.GET_CAPABILITY_QUESTIONS, + data: [] + } + ] } }); @@ -406,6 +416,7 @@ describe("vehicle-parts.vue", () => { //Arrange store.getters.pageData.mockReturnValueOnce(basePartResponse); store.getters.lineItems = { glassParts: {} } + store.getters.vehicle = { carId: "TEST_CAR_ID" } const { wrapper } = setupMocks({ mountOptionsMockData: { diff --git a/src/mixins/vehicle-questions-mixin.js b/src/mixins/vehicle-questions-mixin.js index 73b7ae071..94fa044fb 100644 --- a/src/mixins/vehicle-questions-mixin.js +++ b/src/mixins/vehicle-questions-mixin.js @@ -3,6 +3,8 @@ import { storeMutations } from "@/constants/store-mutations.js"; import { damageLocationsSelected } from "@/constants/damage-locations-selected"; import { navigationScenarios } from "../router/router-constants/navigation-scenarios"; import { storeActions } from "@/constants/store-actions"; +import { navigateToHeritageFunnel } from "@/helpers/heritage-integration/navigation-helper"; +import baseMixin from "@/mixins/base-mixin.js"; import store from "@/store"; export default { @@ -68,6 +70,9 @@ export default { const currentPage = self.$route.query.fmgPage; const hasPartQuestions = this.hasPartQuestions(partsOrQuestions) + console.log("hasPartQuestions: ", hasPartQuestions) + console.log("currentPage: ", currentPage) + console.log("this.currentPageComesBeforePage(currentPage, fmgPageValues.PART_QUESTIONS): ", this.currentPageComesBeforePage(currentPage, fmgPageValues.PART_QUESTIONS)) const hasGlassLocationWithMultipleParts = this.hasGlassLocationWithMultipleParts(partsOrQuestions); const hasChildPartQuestions = this.hasChildPartQuestions(partsOrQuestions); const hasCapabilityQuestions = this.hasCapabilityQuestions(partsOrQuestions); @@ -86,9 +91,10 @@ export default { } else if (hasCapabilityQuestions && this.currentPageComesBeforePage(currentPage, fmgPageValues.CAPABILITY_QUESTIONS)) { // if has capability questions // go to capability-questions page and pass the partsData + console.log(store.getters.vehicle) const windshieldPart = partsOrQuestions.filter(x => x.glassLocation === damageLocationsSelected.WINDSHIELD)[0].parts[0]; - let capabilityQuestions = (await store.dispatch(storeActions.GET_CAPABILITY_QUESTIONS, { + let capabilityQuestions = (await baseMixin.methods.dispatchStoreAction(storeActions.GET_CAPABILITY_QUESTIONS, { carId: store.getters.vehicle.carId, partNumber: windshieldPart.partNumber })).data; @@ -108,8 +114,12 @@ export default { const collectedGlassParts = this.reducedGlassPartsArray(partsOrQuestions); // save to store lineItems.glassParts self.$store.commit(storeMutations.UPDATE_GLASS_PARTS, collectedGlassParts); + + this.$refs.loadingModal.showModal(); + navigateToHeritageFunnel(); - self.$router.navigate(self.navigationScenarios.ANSWERED_ALL_QUESTIONS, self.$route); + // For quote pages MVP release + // self.$router.navigate(self.navigationScenarios.ANSWERED_ALL_QUESTIONS, self.$route); } }, backButtonAction() { diff --git a/src/mixins/vehicle-questions-mixin.spec.js b/src/mixins/vehicle-questions-mixin.spec.js index 01d41b9c8..13a2f083a 100644 --- a/src/mixins/vehicle-questions-mixin.spec.js +++ b/src/mixins/vehicle-questions-mixin.spec.js @@ -1,8 +1,22 @@ import vehicleQuestionsMixin from "@/mixins/vehicle-questions-mixin"; import { shallowMount } from "@vue/test-utils"; import { setupMocksForJsFiles, getMountOptions } from "@/helpers/unit-test-helper.js"; +import { fmgPageValues } from "@/router/router-constants/fmgPage-values"; +import { storeMutations } from "@/constants/store-mutations"; +import { storeActions } from "@/constants/store-actions"; +import loadingModal from '@/common-components/loading-modal/loading-modal.vue'; +import { navigateToHeritageFunnel } from "@/helpers/heritage-integration/navigation-helper"; +import { navigationScenarios } from "../router/router-constants/navigation-scenarios"; + +jest.mock("@/helpers/heritage-integration/navigation-helper", () => ({ + navigateToHeritageFunnel: jest.fn() +})); describe("vehicle-questions-mixin", () => { + afterEach(() => { + jest.clearAllMocks(); + }) + describe("hasPartQuestions", () => { test("has no part questions => return false", () => { // Arrange @@ -139,23 +153,994 @@ describe("vehicle-questions-mixin", () => { expect(hasGlassLocationWithMultipleParts).toBe(true); }); }); + + describe("navigateForward", () => { + describe("should go to parts-questions", () => { + test("single glass location has part question => go to parts-questions", async () => { + // Arrange + const partsOrQuestions = [ + { + "glassName": "Single", + "glassLocation": "Windshield", + "parts": null, + "partQuestions": [ + { + "questionSequence": 1, + "questionText": "Is there a line running across the bottom, driver's side then up the center of the Windshield?", + "answers": [ + { + "answerText": "Yes", + "nextQuestionSequence": null, + "answerResult": "DW01144" + }, + { + "answerText": "No", + "nextQuestionSequence": null, + "answerResult": "DW01143" + } + ] + } + ] + } + ]; + + const { wrapper } = setupMocks({ + partsOrQuestions: partsOrQuestions + }); + + // Act + await wrapper.vm.navigateForward(partsOrQuestions); + + // Assert + expect(wrapper.vm.$router.navigate).toHaveBeenCalledTimes(1); + expect(wrapper.vm.$router.navigate).toHaveBeenCalledWith(navigationScenarios.SELECTED_VIN_WITH_PART_QUESTIONS, wrapper.vm.$route, {}, {}, { partsOrQuestions }); + }); + + test("multiple glass locations have part questions => go to parts-questions", async () => { + // Arrange + const partsOrQuestions = [ + { + "glassName": "Single", + "glassLocation": "Windshield", + "parts": null, + "partQuestions": [ + { + "questionSequence": 1, + "questionText": "Is there a line running across the bottom, driver's side then up the center of the Windshield?", + "answers": [ + { + "answerText": "Yes", + "nextQuestionSequence": null, + "answerResult": "DW01144" + }, + { + "answerText": "No", + "nextQuestionSequence": null, + "answerResult": "DW01143" + } + ] + } + ] + }, + { + "glassName": "Front", + "glassLocation": "Driver", + "parts": [ + { + "partNumber": "DD08158GTYN", + "description": "driver side, front", + "color": "Green Tint", + "requiresRecalibration": false, + "requiresCapabilityQuestions": true, + "childParts": null + } + ], + "partQuestions": null + }, + { + "glassName": "Quarter", + "glassLocation": "Driver", + "parts": [ + { + "partNumber": "DQ08162GTYN", + "description": "driver side, 1 hole", + "color": "Green Tint", + "requiresRecalibration": false, + "requiresCapabilityQuestions": true, + "childParts": null + } + ], + "partQuestions": null + }, + { + "glassName": "SideDoor", + "glassLocation": "Driver", + "parts": null, + "partQuestions": [ + { + "questionSequence": 2, + "questionText": "Is this a super awesome question?", + "answers": [ + { + "answerText": "Yes", + "nextQuestionSequence": null, + "answerResult": "DW01144000" + }, + { + "answerText": "Super yes", + "nextQuestionSequence": null, + "answerResult": "DW01143001" + } + ] + } + ] + }, + { + "glassName": "Stationary", + "glassLocation": "Rear", + "parts": [ + { + "partNumber": "DB08165GTNN", + "description": "heated glass, stationary", + "color": "Green Tint", + "requiresRecalibration": false, + "requiresCapabilityQuestions": true, + "childParts": null + } + ], + "partQuestions": null + } + ]; + + const { wrapper } = setupMocks({ + partsOrQuestions: partsOrQuestions + }); + + // Act + await wrapper.vm.navigateForward(partsOrQuestions); + + // Assert + expect(wrapper.vm.$router.navigate).toHaveBeenCalledTimes(1); + expect(wrapper.vm.$router.navigate).toHaveBeenCalledWith(navigationScenarios.SELECTED_VIN_WITH_PART_QUESTIONS, wrapper.vm.$route, {}, {}, { partsOrQuestions }); + }); + + test("multiple glass locations selected, one has part question => go to parts-questions", async () => { + // Arrange + const partsOrQuestions = [ + { + "glassName": "Single", + "glassLocation": "Windshield", + "parts": null, + "partQuestions": [ + { + "questionSequence": 1, + "questionText": "Is there a line running across the bottom, driver's side then up the center of the Windshield?", + "answers": [ + { + "answerText": "Yes", + "nextQuestionSequence": null, + "answerResult": "DW01144" + }, + { + "answerText": "No", + "nextQuestionSequence": null, + "answerResult": "DW01143" + } + ] + } + ] + }, + { + "glassName": "Front", + "glassLocation": "Driver", + "parts": [ + { + "partNumber": "DD08158GTYN", + "description": "driver side, front", + "color": "Green Tint", + "requiresRecalibration": false, + "requiresCapabilityQuestions": true, + "childParts": null + } + ], + "partQuestions": null + }, + { + "glassName": "Quarter", + "glassLocation": "Driver", + "parts": [ + { + "partNumber": "DQ08162GTYN", + "description": "driver side, 1 hole", + "color": "Green Tint", + "requiresRecalibration": false, + "requiresCapabilityQuestions": true, + "childParts": null + } + ], + "partQuestions": null + }, + { + "glassName": "SideDoor", + "glassLocation": "Driver", + "parts": [ + { + "partNumber": "DD08160GTYN", + "description": "driver side, body side, 1 hole", + "color": "Green Tint", + "requiresRecalibration": false, + "requiresCapabilityQuestions": true, + "childParts": null + } + ], + "partQuestions": null + }, + { + "glassName": "Stationary", + "glassLocation": "Rear", + "parts": [ + { + "partNumber": "DB08165GTNN", + "description": "heated glass, stationary", + "color": "Green Tint", + "requiresRecalibration": false, + "requiresCapabilityQuestions": true, + "childParts": null + } + ], + "partQuestions": null + } + ]; + + const { wrapper } = setupMocks({ + partsOrQuestions: partsOrQuestions + }); + + // Act + await wrapper.vm.navigateForward(partsOrQuestions); + + // Assert + expect(wrapper.vm.$router.navigate).toHaveBeenCalledTimes(1); + expect(wrapper.vm.$router.navigate).toHaveBeenCalledWith(navigationScenarios.SELECTED_VIN_WITH_PART_QUESTIONS, wrapper.vm.$route, {}, {}, { partsOrQuestions }); + }); + + test("a selected glass location has part questions and multiple parts => go to parts-questions", async () => { + // Arrange + const partsOrQuestions = [ + { + "glassName": "Single", + "glassLocation": "Windshield", + "parts": null, + "partQuestions": [ + { + "questionSequence": 1, + "questionText": "Is there a line running across the bottom, driver's side then up the center of the Windshield?", + "answers": [ + { + "answerText": "Yes", + "nextQuestionSequence": null, + "answerResult": "DW01144" + }, + { + "answerText": "No", + "nextQuestionSequence": null, + "answerResult": "DW01143" + } + ] + } + ] + }, + { + "glassName": "Front", + "glassLocation": "Driver", + "parts": [ + { + "partNumber": "DD08158GTYN", + "description": "driver side, front", + "color": "Green Tint", + "requiresRecalibration": false, + "requiresCapabilityQuestions": true, + "childParts": null + } + ], + "partQuestions": null + }, + { + "glassName": "Quarter", + "glassLocation": "Driver", + "parts": [ + { + "partNumber": "DQ08162GTYN", + "description": "driver side, 1 hole", + "color": "Green Tint", + "requiresRecalibration": false, + "requiresCapabilityQuestions": true, + "childParts": null + }, + { + "partNumber": "DQ08162YPYN", + "description": "driver side, 1 hole", + "color": "Gray Tint Privacy", + "requiresRecalibration": false, + "requiresCapabilityQuestions": true, + "childParts": null + } + ], + "partQuestions": null + }, + { + "glassName": "SideDoor", + "glassLocation": "Driver", + "parts": [ + { + "partNumber": "DD08160GTYN", + "description": "driver side, body side, 1 hole", + "color": "Green Tint", + "requiresRecalibration": false, + "requiresCapabilityQuestions": true, + "childParts": null + }, + { + "partNumber": "DD08160YPYN", + "description": "driver side, body side, 1 hole", + "color": "Gray Tint Privacy", + "requiresRecalibration": false, + "requiresCapabilityQuestions": true, + "childParts": null + } + ], + "partQuestions": null + }, + { + "glassName": "Stationary", + "glassLocation": "Rear", + "parts": [ + { + "partNumber": "DB08165GTNN", + "description": "heated glass, stationary", + "color": "Green Tint", + "requiresRecalibration": false, + "requiresCapabilityQuestions": true, + "childParts": null + }, + { + "partNumber": "DB08165YPNN", + "description": "heated glass, stationary", + "color": "Gray Tint Privacy", + "requiresRecalibration": false, + "requiresCapabilityQuestions": true, + "childParts": null + }, + { + "partNumber": "DB08166GTNN", + "description": "stationary", + "color": "Green Tint", + "requiresRecalibration": false, + "requiresCapabilityQuestions": true, + "childParts": null + }, + { + "partNumber": "DB08167GTNN", + "description": "heated glass, movable, 8 hole", + "color": "Green Tint", + "requiresRecalibration": false, + "requiresCapabilityQuestions": true, + "childParts": null + }, + { + "partNumber": "DB08167YPNN", + "description": "heated glass, movable, 8 hole", + "color": "Gray Tint Privacy", + "requiresRecalibration": false, + "requiresCapabilityQuestions": true, + "childParts": null + } + ], + "partQuestions": null + } + ]; + + const { wrapper } = setupMocks({ + partsOrQuestions: partsOrQuestions + }); + + // Act + await wrapper.vm.navigateForward(partsOrQuestions); + + // Assert + expect(wrapper.vm.$router.navigate).toHaveBeenCalledTimes(1); + expect(wrapper.vm.$router.navigate).toHaveBeenCalledWith(navigationScenarios.SELECTED_VIN_WITH_PART_QUESTIONS, wrapper.vm.$route, {}, {}, { partsOrQuestions }); + }); + }); + + describe("should go to vehicle-parts", () => { + test("single glass location has multiple parts => go to vehicle-parts", async () => { + // Arrange + const partsOrQuestions = [ + { + "glassName": "Stationary", + "glassLocation": "Rear", + "parts": [ + { + "partNumber": "FB25724GTYN", + "description": "heated glass, solar, antenna", + "color": "Green Tint", + "requiresRecalibration": false, + "requiresCapabilityQuestions": true, + "childParts": null + }, + { + "partNumber": "FB25759GTYN", + "description": "heated glass, solar, antenna, w/diversity antenna", + "color": "Green Tint", + "requiresRecalibration": false, + "requiresCapabilityQuestions": true, + "childParts": null + } + ], + "partQuestions": null + } + ]; + + const { wrapper } = setupMocks({ + partsOrQuestions: partsOrQuestions + }); + + // Act + await wrapper.vm.navigateForward(partsOrQuestions); + + // Assert + expect(wrapper.vm.$router.navigate).toHaveBeenCalledTimes(1); + expect(wrapper.vm.$router.navigate).toHaveBeenCalledWith(navigationScenarios.SELECTED_VIN_WITH_MULTIPLE_PARTS, wrapper.vm.$route, {}, {}, { partsOrQuestions }); + }); + + test("multiple glass locations selected, one of them has multiple parts => go to vehicle parts", async () => { + // Arrange + const partsOrQuestions = [ + { + "glassName": "Single", + "glassLocation": "Windshield", + "parts": [ + { + "partNumber": "FW03647GTNN", + "description": "solar, 3rd visor band", + "color": "Green Tint", + "requiresRecalibration": false, + "requiresCapabilityQuestions": true, + "childParts": [ + { + "partNumber": "MWF03647", + "partType": "MOULDING", + "description": "Upper " + } + ] + } + ], + "partQuestions": null + }, + { + "glassName": "Back", + "glassLocation": "Driver", + "parts": [ + { + "partNumber": "FD25747GTYN", + "description": "solar, driver side, rear, ex models and above", + "color": "Green Tint", + "requiresRecalibration": false, + "requiresCapabilityQuestions": true, + "childParts": null + } + ], + "partQuestions": null + }, + { + "glassName": "Front", + "glassLocation": "Driver", + "parts": [ + { + "partNumber": "FD25719GTYN", + "description": "solar, driver side, front, ex models and above", + "color": "Green Tint", + "requiresRecalibration": false, + "requiresCapabilityQuestions": true, + "childParts": null + } + ], + "partQuestions": null + }, + { + "glassName": "Vent", + "glassLocation": "Driver", + "parts": [ + { + "partNumber": "FV25749GTNN", + "description": "solar, driver side, rear", + "color": "Green Tint", + "requiresRecalibration": false, + "requiresCapabilityQuestions": true, + "childParts": null + } + ], + "partQuestions": null + }, + { + "glassName": "Stationary", + "glassLocation": "Rear", + "parts": [ + { + "partNumber": "FB25724GTYN", + "description": "heated glass, solar, antenna", + "color": "Green Tint", + "requiresRecalibration": false, + "requiresCapabilityQuestions": true, + "childParts": null + }, + { + "partNumber": "FB25759GTYN", + "description": "heated glass, solar, antenna, w/diversity antenna", + "color": "Green Tint", + "requiresRecalibration": false, + "requiresCapabilityQuestions": true, + "childParts": null + } + ], + "partQuestions": null + } + ]; + + const { wrapper } = setupMocks({ + partsOrQuestions: partsOrQuestions + }); + + // Act + await wrapper.vm.navigateForward(partsOrQuestions); + + // Assert + expect(wrapper.vm.$router.navigate).toHaveBeenCalledTimes(1); + expect(wrapper.vm.$router.navigate).toHaveBeenCalledWith(navigationScenarios.SELECTED_VIN_WITH_MULTIPLE_PARTS, wrapper.vm.$route, {}, {}, { partsOrQuestions }); + }); + + test("multiple glass locations selected, multiple have multiple parts => go to vehicle-parts", async () => { + // Arrange + const partsOrQuestions = [ + { + "glassName": "Single", + "glassLocation": "Windshield", + "parts": [ + { + "partNumber": "DW02101GTYN", + "description": "solar", + "color": "Green Tint", + "requiresRecalibration": false, + "requiresCapabilityQuestions": true, + "childParts": null + } + ], + "partQuestions": null + }, + { + "glassName": "Back", + "glassLocation": "Driver", + "parts": [ + { + "partNumber": "DD12202GTYN", + "description": "solar, driver side, rear", + "color": "Green Tint", + "requiresRecalibration": false, + "requiresCapabilityQuestions": true, + "childParts": null + }, + { + "partNumber": "DD12202YPYN", + "description": "solar, driver side, rear", + "color": "Gray Tint Privacy", + "requiresRecalibration": false, + "requiresCapabilityQuestions": true, + "childParts": null + } + ], + "partQuestions": null + }, + { + "glassName": "Front", + "glassLocation": "Driver", + "parts": [ + { + "partNumber": "DD12198GTYN", + "description": "solar, driver side, front", + "color": "Green Tint", + "requiresRecalibration": false, + "requiresCapabilityQuestions": true, + "childParts": null + }, + { + "partNumber": "DD12200GTYN", + "description": "solar, driver side, front, laminated, soundproofing", + "color": "Green Tint", + "requiresRecalibration": false, + "requiresCapabilityQuestions": true, + "childParts": null + } + ], + "partQuestions": null + }, + { + "glassName": "Quarter", + "glassLocation": "Driver", + "parts": [ + { + "partNumber": "DQ12204GTYNOEM", + "description": "solar, driver side, encap", + "color": "Green Tint", + "requiresRecalibration": false, + "requiresCapabilityQuestions": true, + "childParts": null + }, + { + "partNumber": "DQ12204YPYNOEM", + "description": "solar, driver side, encap", + "color": "Gray Tint Privacy", + "requiresRecalibration": false, + "requiresCapabilityQuestions": true, + "childParts": null + }, + { + "partNumber": "DQ12205GTYNOEM", + "description": "solar, antenna, driver side, encap", + "color": "Green Tint", + "requiresRecalibration": false, + "requiresCapabilityQuestions": true, + "childParts": null + }, + { + "partNumber": "DQ12205YPYNOEM", + "description": "solar, antenna, driver side, encap", + "color": "Gray Tint Privacy", + "requiresRecalibration": false, + "requiresCapabilityQuestions": true, + "childParts": null + }, + { + "partNumber": "DQ12207GTYN", + "description": "solar, driver side, encap, chrome molding", + "color": "Green Tint", + "requiresRecalibration": false, + "requiresCapabilityQuestions": true, + "childParts": null + }, + { + "partNumber": "DQ12207YPYNOEM", + "description": "solar, driver side, encap, chrome molding", + "color": "Gray Tint Privacy", + "requiresRecalibration": false, + "requiresCapabilityQuestions": true, + "childParts": null + }, + { + "partNumber": "DQ12208GTYNOEM", + "description": "solar, antenna, driver side, encap, chrome molding", + "color": "Green Tint", + "requiresRecalibration": false, + "requiresCapabilityQuestions": true, + "childParts": null + }, + { + "partNumber": "DQ12208YPYNOEM", + "description": "solar, antenna, driver side, encap, chrome molding", + "color": "Gray Tint Privacy", + "requiresRecalibration": false, + "requiresCapabilityQuestions": true, + "childParts": null + } + ], + "partQuestions": null + }, + { + "glassName": "Stationary", + "glassLocation": "Rear", + "parts": [ + { + "partNumber": "DB12209GTYN", + "description": "heated glass, solar, 1 hole", + "color": "Green Tint", + "requiresRecalibration": false, + "requiresCapabilityQuestions": true, + "childParts": null + }, + { + "partNumber": "DB12209YPYN", + "description": "heated glass, solar, 1 hole", + "color": "Gray Tint Privacy", + "requiresRecalibration": false, + "requiresCapabilityQuestions": true, + "childParts": null + } + ], + "partQuestions": null + } + ]; + + const { wrapper } = setupMocks({ + partsOrQuestions: partsOrQuestions + }); + + // Act + await wrapper.vm.navigateForward(partsOrQuestions); + + // Assert + expect(wrapper.vm.$router.navigate).toHaveBeenCalledTimes(1); + expect(wrapper.vm.$router.navigate).toHaveBeenCalledWith(navigationScenarios.SELECTED_VIN_WITH_MULTIPLE_PARTS, wrapper.vm.$route, {}, {}, { partsOrQuestions }); + }); + }); + + describe("should go to molding-questions", () => { + test("single glass location has child part questions => go to molding-questions", async () => { + // Arrange + const partsOrQuestions = [ + { + "glassName": "Stationary", + "glassLocation": "Rear", + "parts": [ + { + "partNumber": "FB25724GTYN", + "description": "heated glass, solar, antenna", + "color": "Green Tint", + "requiresRecalibration": false, + "requiresCapabilityQuestions": true, + "childParts": null, + "childPartQuestions": [ + { + "questionSequence": 1, + "questionText": "Does the rubber seal around your windshield have a chrome strip running through it?", + "answers": [ + { + "answerResult": "WKT D1106 C", + "answerText": "Yes", + "nextQuestionSequence": null + }, + { + "answerResult": "WKT D1106 B", + "answerText": "No", + "nextQuestionSequence": null + } + ] + } + ] + + } + ], + "partQuestions": null + } + ]; + + const { wrapper } = setupMocks({ + partsOrQuestions: partsOrQuestions + }); + + // Act + await wrapper.vm.navigateForward(partsOrQuestions); + + // Assert + expect(wrapper.vm.$router.navigate).toHaveBeenCalledTimes(1); + expect(wrapper.vm.$router.navigate).toHaveBeenCalledWith(navigationScenarios.SELECTED_VIN_WITH_MOLDING_QUESTIONS, wrapper.vm.$route, {}, {}, { partsOrQuestions }); + }); + }); + + describe("should go to capability-questions", () => { + test("single glass location has no child part questions but requiresCapabilityQuestions is true => go to capability-questions", async () => { + // Arrange + const partsOrQuestions = [ + { + "glassName": "Single", + "glassLocation": "Windshield", + "parts": [ + { + "partNumber": "FB25724GTYN", + "description": "heated glass, solar, antenna", + "color": "Green Tint", + "requiresRecalibration": false, + "requiresCapabilityQuestions": true, + "childParts": null, + "childPartQuestions": null + } + ], + "partQuestions": null + } + ]; + + const { wrapper } = setupMocks({ + partsOrQuestions: partsOrQuestions + }); + + // Act + await wrapper.vm.navigateForward(partsOrQuestions); + + // Assert + expect(wrapper.vm.$router.navigate).toHaveBeenCalledTimes(1); + expect(wrapper.vm.$router.navigate).toHaveBeenCalledWith(navigationScenarios.SELECTED_VIN_WITH_CAPABILITY_QUESTIONS, wrapper.vm.$route, {}, {}, { partsOrQuestions, capabilityQuestions: [] }); + }); + }); + + describe("should go to heritage funnel", () => { + test("single glass location selected, has no part questions and has one part => go to heritage funnel", async () => { + // Arrange + const partsOrQuestions = [ + { + "glassName": "Single", + "glassLocation": "Windshield", + "parts": [ + { + "partNumber": "FW04186GTYN", + "description": "solar, soundproofing, lane keep assist", + "color": "Green Tint", + "requiresRecalibration": true, + "requiresCapabilityQuestions": false, + "childParts": [ + { + "partNumber": "GGG 3563 KIT", + "partType": "MOULDING", + "description": "Kit, Top & Sides " + } + ] + } + ], + "partQuestions": null + } + ] + + const { wrapper } = setupMocks({ + partsOrQuestions: partsOrQuestions + }); + + // Act + await wrapper.vm.navigateForward(partsOrQuestions); + + // Assert + expect(navigateToHeritageFunnel).toHaveBeenCalledTimes(1); + }); + + test("multiple glass locations selected, each has one part and no part questions => go to heritage funnel", async () => { + // Arrange + const partsOrQuestions = [ + { + "glassName": "Single", + "glassLocation": "Windshield", + "parts": [ + { + "partNumber": "FW04186GTYN", + "description": "solar, soundproofing, lane keep assist", + "color": "Green Tint", + "requiresRecalibration": true, + "requiresCapabilityQuestions": false, + "childParts": [ + { + "partNumber": "GGG 3563 KIT", + "partType": "MOULDING", + "description": "Kit, Top & Sides " + } + ] + } + ], + "partQuestions": null + }, + { + "glassName": "Back", + "glassLocation": "Driver", + "parts": [ + { + "partNumber": "FD25457GTYN", + "description": "solar, driver side, rear", + "color": "Green Tint", + "requiresRecalibration": false, + "requiresCapabilityQuestions": false, + "childParts": null + } + ], + "partQuestions": null + }, + { + "glassName": "Front", + "glassLocation": "Driver", + "parts": [ + { + "partNumber": "FD27090GTYN", + "description": "solar, driver side, front", + "color": "Green Tint", + "requiresRecalibration": false, + "requiresCapabilityQuestions": false, + "childParts": null + } + ], + "partQuestions": null + }, + { + "glassName": "Vent", + "glassLocation": "Driver", + "parts": [ + { + "partNumber": "FV25459GTNN", + "description": "solar, driver side, rear", + "color": "Green Tint", + "requiresRecalibration": false, + "requiresCapabilityQuestions": false, + "childParts": null + } + ], + "partQuestions": null + }, + { + "glassName": "Stationary", + "glassLocation": "Rear", + "parts": [ + { + "partNumber": "FB25460GTYN", + "description": "heated glass, solar", + "color": "Green Tint", + "requiresRecalibration": false, + "requiresCapabilityQuestions": false, + "childParts": null + } + ], + "partQuestions": null + } + ]; + + const { wrapper } = setupMocks({ + partsOrQuestions: partsOrQuestions + }); + + wrapper.vm.$store.commit = jest.fn(); + + const collectedGlassParts = wrapper.vm.reducedGlassPartsArray(partsOrQuestions); + + // Act + await wrapper.vm.navigateForward(partsOrQuestions); + + + // Assert + expect(wrapper.vm.$store.commit).toHaveBeenCalledTimes(1); + expect(wrapper.vm.$store.commit).toHaveBeenCalledWith(storeMutations.UPDATE_GLASS_PARTS, collectedGlassParts) + expect(wrapper.vm.$refs.loadingModal.showModal).toHaveBeenCalledTimes(1); + expect(navigateToHeritageFunnel).toHaveBeenCalledTimes(1); + }); + }); + }) }); -function setupMocks({}) { - const baseMixin = setupMocksForJsFiles({}); +function setupMocks({ fmgPage = fmgPageValues.VIN_LOOKUP }) { + const baseMixin = setupMocksForJsFiles({ + actionList: [{ + actionName: storeActions.GET_CAPABILITY_QUESTIONS, + data: [], + }] + }); const mocks = getMountOptions({ router: { navigate: jest.fn() }, + store: { + commit: jest.fn(), + dispatch: jest.fn() + }, + route: { + query: { + fmgPage + } + } }); + // store.dispatch = jest.fn(); + const mockVehicleQuestionComponent = { - template: '
', + components: { loadingModal }, + template: '', mixins: [vehicleQuestionsMixin, baseMixin.baseMixin] }; const wrapper = shallowMount(mockVehicleQuestionComponent, mocks); + wrapper.vm.$refs.loadingModal.showModal = jest.fn(); + return { wrapper }; } \ No newline at end of file diff --git a/src/mixins/vin-pages-mixin.spec.js b/src/mixins/vin-pages-mixin.spec.js index bfb1c4c06..4759eb5dc 100644 --- a/src/mixins/vin-pages-mixin.spec.js +++ b/src/mixins/vin-pages-mixin.spec.js @@ -2,14 +2,11 @@ import vinPagesMixin from "@/mixins/vin-pages-mixin"; import { shallowMount } from "@vue/test-utils"; import { setupMocksForJsFiles, getMountOptions } from "@/helpers/unit-test-helper.js"; import { storeActions } from "@/constants/store-actions"; -import { storeMutations } from "@/constants/store-mutations"; -import { navigationScenarios } from "@/router/router-constants/navigation-scenarios"; -import store from "@/store"; import loadingModal from '@/common-components/loading-modal/loading-modal.vue'; -import { navigateToHeritageFunnel } from "@/helpers/heritage-integration/navigation-helper"; +import vehicleQuestionsMixin from "@/mixins/vehicle-questions-mixin"; jest.mock("@/helpers/heritage-integration/navigation-helper", () => ({ - navigateToHeritageFunnel: jest.fn() + navigateForward: jest.fn() })); describe("vin-pages-mixin", () => { @@ -18,955 +15,17 @@ describe("vin-pages-mixin", () => { }) describe("navigateForwardWithSingleCarMatch", () => { - describe("should go to parts-questions", () => { - test("single glass location has part question => go to parts-questions", async () => { - // Arrange - const partsOrQuestions = [ - { - "glassName": "Single", - "glassLocation": "Windshield", - "parts": null, - "partQuestions": [ - { - "questionSequence": 1, - "questionText": "Is there a line running across the bottom, driver's side then up the center of the Windshield?", - "answers": [ - { - "answerText": "Yes", - "nextQuestionSequence": null, - "answerResult": "DW01144" - }, - { - "answerText": "No", - "nextQuestionSequence": null, - "answerResult": "DW01143" - } - ] - } - ] - } - ]; + test("should navigateForward", async () => { + // Arrange + const { wrapper } = setupMocks({}); + vehicleQuestionsMixin.methods.navigateForward = jest.fn(); - const { wrapper } = setupMocks({ - partsOrQuestions: partsOrQuestions - }); + // Act + await wrapper.vm.navigateForwardWithSingleCarMatch(); - // Act - await wrapper.vm.navigateForwardWithSingleCarMatch(); - - // Assert - expect(wrapper.vm.$router.navigate).toHaveBeenCalledTimes(1); - expect(wrapper.vm.$router.navigate).toHaveBeenCalledWith(navigationScenarios.SELECTED_VIN_WITH_PART_QUESTIONS, wrapper.vm.$route, {}, {}, { partsOrQuestions }); - }); - - test("multiple glass locations have part questions => go to parts-questions", async () => { - // Arrange - const partsOrQuestions = [ - { - "glassName": "Single", - "glassLocation": "Windshield", - "parts": null, - "partQuestions": [ - { - "questionSequence": 1, - "questionText": "Is there a line running across the bottom, driver's side then up the center of the Windshield?", - "answers": [ - { - "answerText": "Yes", - "nextQuestionSequence": null, - "answerResult": "DW01144" - }, - { - "answerText": "No", - "nextQuestionSequence": null, - "answerResult": "DW01143" - } - ] - } - ] - }, - { - "glassName": "Front", - "glassLocation": "Driver", - "parts": [ - { - "partNumber": "DD08158GTYN", - "description": "driver side, front", - "color": "Green Tint", - "requiresRecalibration": false, - "requiresCapabilityQuestions": true, - "childParts": null - } - ], - "partQuestions": null - }, - { - "glassName": "Quarter", - "glassLocation": "Driver", - "parts": [ - { - "partNumber": "DQ08162GTYN", - "description": "driver side, 1 hole", - "color": "Green Tint", - "requiresRecalibration": false, - "requiresCapabilityQuestions": true, - "childParts": null - } - ], - "partQuestions": null - }, - { - "glassName": "SideDoor", - "glassLocation": "Driver", - "parts": null, - "partQuestions": [ - { - "questionSequence": 2, - "questionText": "Is this a super awesome question?", - "answers": [ - { - "answerText": "Yes", - "nextQuestionSequence": null, - "answerResult": "DW01144000" - }, - { - "answerText": "Super yes", - "nextQuestionSequence": null, - "answerResult": "DW01143001" - } - ] - } - ] - }, - { - "glassName": "Stationary", - "glassLocation": "Rear", - "parts": [ - { - "partNumber": "DB08165GTNN", - "description": "heated glass, stationary", - "color": "Green Tint", - "requiresRecalibration": false, - "requiresCapabilityQuestions": true, - "childParts": null - } - ], - "partQuestions": null - } - ]; - - const { wrapper } = setupMocks({ - partsOrQuestions: partsOrQuestions - }); - - // Act - await wrapper.vm.navigateForwardWithSingleCarMatch(); - - // Assert - expect(wrapper.vm.$router.navigate).toHaveBeenCalledTimes(1); - expect(wrapper.vm.$router.navigate).toHaveBeenCalledWith(navigationScenarios.SELECTED_VIN_WITH_PART_QUESTIONS, wrapper.vm.$route, {}, {}, { partsOrQuestions }); - }); - - test("multiple glass locations selected, one has part question => go to parts-questions", async () => { - // Arrange - const partsOrQuestions = [ - { - "glassName": "Single", - "glassLocation": "Windshield", - "parts": null, - "partQuestions": [ - { - "questionSequence": 1, - "questionText": "Is there a line running across the bottom, driver's side then up the center of the Windshield?", - "answers": [ - { - "answerText": "Yes", - "nextQuestionSequence": null, - "answerResult": "DW01144" - }, - { - "answerText": "No", - "nextQuestionSequence": null, - "answerResult": "DW01143" - } - ] - } - ] - }, - { - "glassName": "Front", - "glassLocation": "Driver", - "parts": [ - { - "partNumber": "DD08158GTYN", - "description": "driver side, front", - "color": "Green Tint", - "requiresRecalibration": false, - "requiresCapabilityQuestions": true, - "childParts": null - } - ], - "partQuestions": null - }, - { - "glassName": "Quarter", - "glassLocation": "Driver", - "parts": [ - { - "partNumber": "DQ08162GTYN", - "description": "driver side, 1 hole", - "color": "Green Tint", - "requiresRecalibration": false, - "requiresCapabilityQuestions": true, - "childParts": null - } - ], - "partQuestions": null - }, - { - "glassName": "SideDoor", - "glassLocation": "Driver", - "parts": [ - { - "partNumber": "DD08160GTYN", - "description": "driver side, body side, 1 hole", - "color": "Green Tint", - "requiresRecalibration": false, - "requiresCapabilityQuestions": true, - "childParts": null - } - ], - "partQuestions": null - }, - { - "glassName": "Stationary", - "glassLocation": "Rear", - "parts": [ - { - "partNumber": "DB08165GTNN", - "description": "heated glass, stationary", - "color": "Green Tint", - "requiresRecalibration": false, - "requiresCapabilityQuestions": true, - "childParts": null - } - ], - "partQuestions": null - } - ]; - - const { wrapper } = setupMocks({ - partsOrQuestions: partsOrQuestions - }); - - // Act - await wrapper.vm.navigateForwardWithSingleCarMatch(); - - // Assert - expect(wrapper.vm.$router.navigate).toHaveBeenCalledTimes(1); - expect(wrapper.vm.$router.navigate).toHaveBeenCalledWith(navigationScenarios.SELECTED_VIN_WITH_PART_QUESTIONS, wrapper.vm.$route, {}, {}, { partsOrQuestions }); - }); - - test("a selected glass location has part questions and multiple parts => go to parts-questions", async () => { - // Arrange - const partsOrQuestions = [ - { - "glassName": "Single", - "glassLocation": "Windshield", - "parts": null, - "partQuestions": [ - { - "questionSequence": 1, - "questionText": "Is there a line running across the bottom, driver's side then up the center of the Windshield?", - "answers": [ - { - "answerText": "Yes", - "nextQuestionSequence": null, - "answerResult": "DW01144" - }, - { - "answerText": "No", - "nextQuestionSequence": null, - "answerResult": "DW01143" - } - ] - } - ] - }, - { - "glassName": "Front", - "glassLocation": "Driver", - "parts": [ - { - "partNumber": "DD08158GTYN", - "description": "driver side, front", - "color": "Green Tint", - "requiresRecalibration": false, - "requiresCapabilityQuestions": true, - "childParts": null - } - ], - "partQuestions": null - }, - { - "glassName": "Quarter", - "glassLocation": "Driver", - "parts": [ - { - "partNumber": "DQ08162GTYN", - "description": "driver side, 1 hole", - "color": "Green Tint", - "requiresRecalibration": false, - "requiresCapabilityQuestions": true, - "childParts": null - }, - { - "partNumber": "DQ08162YPYN", - "description": "driver side, 1 hole", - "color": "Gray Tint Privacy", - "requiresRecalibration": false, - "requiresCapabilityQuestions": true, - "childParts": null - } - ], - "partQuestions": null - }, - { - "glassName": "SideDoor", - "glassLocation": "Driver", - "parts": [ - { - "partNumber": "DD08160GTYN", - "description": "driver side, body side, 1 hole", - "color": "Green Tint", - "requiresRecalibration": false, - "requiresCapabilityQuestions": true, - "childParts": null - }, - { - "partNumber": "DD08160YPYN", - "description": "driver side, body side, 1 hole", - "color": "Gray Tint Privacy", - "requiresRecalibration": false, - "requiresCapabilityQuestions": true, - "childParts": null - } - ], - "partQuestions": null - }, - { - "glassName": "Stationary", - "glassLocation": "Rear", - "parts": [ - { - "partNumber": "DB08165GTNN", - "description": "heated glass, stationary", - "color": "Green Tint", - "requiresRecalibration": false, - "requiresCapabilityQuestions": true, - "childParts": null - }, - { - "partNumber": "DB08165YPNN", - "description": "heated glass, stationary", - "color": "Gray Tint Privacy", - "requiresRecalibration": false, - "requiresCapabilityQuestions": true, - "childParts": null - }, - { - "partNumber": "DB08166GTNN", - "description": "stationary", - "color": "Green Tint", - "requiresRecalibration": false, - "requiresCapabilityQuestions": true, - "childParts": null - }, - { - "partNumber": "DB08167GTNN", - "description": "heated glass, movable, 8 hole", - "color": "Green Tint", - "requiresRecalibration": false, - "requiresCapabilityQuestions": true, - "childParts": null - }, - { - "partNumber": "DB08167YPNN", - "description": "heated glass, movable, 8 hole", - "color": "Gray Tint Privacy", - "requiresRecalibration": false, - "requiresCapabilityQuestions": true, - "childParts": null - } - ], - "partQuestions": null - } - ]; - - const { wrapper } = setupMocks({ - partsOrQuestions: partsOrQuestions - }); - - // Act - await wrapper.vm.navigateForwardWithSingleCarMatch(); - - // Assert - expect(wrapper.vm.$router.navigate).toHaveBeenCalledTimes(1); - expect(wrapper.vm.$router.navigate).toHaveBeenCalledWith(navigationScenarios.SELECTED_VIN_WITH_PART_QUESTIONS, wrapper.vm.$route, {}, {}, { partsOrQuestions }); - }); - }); - - describe("should go to vehicle-parts", () => { - test("single glass location has multiple parts => go to vehicle-parts", async () => { - // Arrange - const partsOrQuestions = [ - { - "glassName": "Stationary", - "glassLocation": "Rear", - "parts": [ - { - "partNumber": "FB25724GTYN", - "description": "heated glass, solar, antenna", - "color": "Green Tint", - "requiresRecalibration": false, - "requiresCapabilityQuestions": true, - "childParts": null - }, - { - "partNumber": "FB25759GTYN", - "description": "heated glass, solar, antenna, w/diversity antenna", - "color": "Green Tint", - "requiresRecalibration": false, - "requiresCapabilityQuestions": true, - "childParts": null - } - ], - "partQuestions": null - } - ]; - - const { wrapper } = setupMocks({ - partsOrQuestions: partsOrQuestions - }); - - // Act - await wrapper.vm.navigateForwardWithSingleCarMatch(); - - // Assert - expect(wrapper.vm.$router.navigate).toHaveBeenCalledTimes(1); - expect(wrapper.vm.$router.navigate).toHaveBeenCalledWith(navigationScenarios.SELECTED_VIN_WITH_MULTIPLE_PARTS, wrapper.vm.$route, {}, {}, { partsOrQuestions }); - }); - - test("multiple glass locations selected, one of them has multiple parts => go to vehicle parts", async () => { - // Arrange - const partsOrQuestions = [ - { - "glassName": "Single", - "glassLocation": "Windshield", - "parts": [ - { - "partNumber": "FW03647GTNN", - "description": "solar, 3rd visor band", - "color": "Green Tint", - "requiresRecalibration": false, - "requiresCapabilityQuestions": true, - "childParts": [ - { - "partNumber": "MWF03647", - "partType": "MOULDING", - "description": "Upper " - } - ] - } - ], - "partQuestions": null - }, - { - "glassName": "Back", - "glassLocation": "Driver", - "parts": [ - { - "partNumber": "FD25747GTYN", - "description": "solar, driver side, rear, ex models and above", - "color": "Green Tint", - "requiresRecalibration": false, - "requiresCapabilityQuestions": true, - "childParts": null - } - ], - "partQuestions": null - }, - { - "glassName": "Front", - "glassLocation": "Driver", - "parts": [ - { - "partNumber": "FD25719GTYN", - "description": "solar, driver side, front, ex models and above", - "color": "Green Tint", - "requiresRecalibration": false, - "requiresCapabilityQuestions": true, - "childParts": null - } - ], - "partQuestions": null - }, - { - "glassName": "Vent", - "glassLocation": "Driver", - "parts": [ - { - "partNumber": "FV25749GTNN", - "description": "solar, driver side, rear", - "color": "Green Tint", - "requiresRecalibration": false, - "requiresCapabilityQuestions": true, - "childParts": null - } - ], - "partQuestions": null - }, - { - "glassName": "Stationary", - "glassLocation": "Rear", - "parts": [ - { - "partNumber": "FB25724GTYN", - "description": "heated glass, solar, antenna", - "color": "Green Tint", - "requiresRecalibration": false, - "requiresCapabilityQuestions": true, - "childParts": null - }, - { - "partNumber": "FB25759GTYN", - "description": "heated glass, solar, antenna, w/diversity antenna", - "color": "Green Tint", - "requiresRecalibration": false, - "requiresCapabilityQuestions": true, - "childParts": null - } - ], - "partQuestions": null - } - ]; - - const { wrapper } = setupMocks({ - partsOrQuestions: partsOrQuestions - }); - - // Act - await wrapper.vm.navigateForwardWithSingleCarMatch(); - - // Assert - expect(wrapper.vm.$router.navigate).toHaveBeenCalledTimes(1); - expect(wrapper.vm.$router.navigate).toHaveBeenCalledWith(navigationScenarios.SELECTED_VIN_WITH_MULTIPLE_PARTS, wrapper.vm.$route, {}, {}, { partsOrQuestions }); - }); - - test("multiple glass locations selected, multiple have multiple parts => go to vehicle-parts", async () => { - // Arrange - const partsOrQuestions = [ - { - "glassName": "Single", - "glassLocation": "Windshield", - "parts": [ - { - "partNumber": "DW02101GTYN", - "description": "solar", - "color": "Green Tint", - "requiresRecalibration": false, - "requiresCapabilityQuestions": true, - "childParts": null - } - ], - "partQuestions": null - }, - { - "glassName": "Back", - "glassLocation": "Driver", - "parts": [ - { - "partNumber": "DD12202GTYN", - "description": "solar, driver side, rear", - "color": "Green Tint", - "requiresRecalibration": false, - "requiresCapabilityQuestions": true, - "childParts": null - }, - { - "partNumber": "DD12202YPYN", - "description": "solar, driver side, rear", - "color": "Gray Tint Privacy", - "requiresRecalibration": false, - "requiresCapabilityQuestions": true, - "childParts": null - } - ], - "partQuestions": null - }, - { - "glassName": "Front", - "glassLocation": "Driver", - "parts": [ - { - "partNumber": "DD12198GTYN", - "description": "solar, driver side, front", - "color": "Green Tint", - "requiresRecalibration": false, - "requiresCapabilityQuestions": true, - "childParts": null - }, - { - "partNumber": "DD12200GTYN", - "description": "solar, driver side, front, laminated, soundproofing", - "color": "Green Tint", - "requiresRecalibration": false, - "requiresCapabilityQuestions": true, - "childParts": null - } - ], - "partQuestions": null - }, - { - "glassName": "Quarter", - "glassLocation": "Driver", - "parts": [ - { - "partNumber": "DQ12204GTYNOEM", - "description": "solar, driver side, encap", - "color": "Green Tint", - "requiresRecalibration": false, - "requiresCapabilityQuestions": true, - "childParts": null - }, - { - "partNumber": "DQ12204YPYNOEM", - "description": "solar, driver side, encap", - "color": "Gray Tint Privacy", - "requiresRecalibration": false, - "requiresCapabilityQuestions": true, - "childParts": null - }, - { - "partNumber": "DQ12205GTYNOEM", - "description": "solar, antenna, driver side, encap", - "color": "Green Tint", - "requiresRecalibration": false, - "requiresCapabilityQuestions": true, - "childParts": null - }, - { - "partNumber": "DQ12205YPYNOEM", - "description": "solar, antenna, driver side, encap", - "color": "Gray Tint Privacy", - "requiresRecalibration": false, - "requiresCapabilityQuestions": true, - "childParts": null - }, - { - "partNumber": "DQ12207GTYN", - "description": "solar, driver side, encap, chrome molding", - "color": "Green Tint", - "requiresRecalibration": false, - "requiresCapabilityQuestions": true, - "childParts": null - }, - { - "partNumber": "DQ12207YPYNOEM", - "description": "solar, driver side, encap, chrome molding", - "color": "Gray Tint Privacy", - "requiresRecalibration": false, - "requiresCapabilityQuestions": true, - "childParts": null - }, - { - "partNumber": "DQ12208GTYNOEM", - "description": "solar, antenna, driver side, encap, chrome molding", - "color": "Green Tint", - "requiresRecalibration": false, - "requiresCapabilityQuestions": true, - "childParts": null - }, - { - "partNumber": "DQ12208YPYNOEM", - "description": "solar, antenna, driver side, encap, chrome molding", - "color": "Gray Tint Privacy", - "requiresRecalibration": false, - "requiresCapabilityQuestions": true, - "childParts": null - } - ], - "partQuestions": null - }, - { - "glassName": "Stationary", - "glassLocation": "Rear", - "parts": [ - { - "partNumber": "DB12209GTYN", - "description": "heated glass, solar, 1 hole", - "color": "Green Tint", - "requiresRecalibration": false, - "requiresCapabilityQuestions": true, - "childParts": null - }, - { - "partNumber": "DB12209YPYN", - "description": "heated glass, solar, 1 hole", - "color": "Gray Tint Privacy", - "requiresRecalibration": false, - "requiresCapabilityQuestions": true, - "childParts": null - } - ], - "partQuestions": null - } - ]; - - const { wrapper } = setupMocks({ - partsOrQuestions: partsOrQuestions - }); - - // Act - await wrapper.vm.navigateForwardWithSingleCarMatch(); - - // Assert - expect(wrapper.vm.$router.navigate).toHaveBeenCalledTimes(1); - expect(wrapper.vm.$router.navigate).toHaveBeenCalledWith(navigationScenarios.SELECTED_VIN_WITH_MULTIPLE_PARTS, wrapper.vm.$route, {}, {}, { partsOrQuestions }); - }); - }); - - describe("should go to molding-questions", () => { - test("single glass location has child part questions => go to molding-questions", async () => { - // Arrange - const partsOrQuestions = [ - { - "glassName": "Stationary", - "glassLocation": "Rear", - "parts": [ - { - "partNumber": "FB25724GTYN", - "description": "heated glass, solar, antenna", - "color": "Green Tint", - "requiresRecalibration": false, - "requiresCapabilityQuestions": true, - "childParts": null, - "childPartQuestions": [ - { - "questionSequence": 1, - "questionText": "Does the rubber seal around your windshield have a chrome strip running through it?", - "answers": [ - { - "answerResult": "WKT D1106 C", - "answerText": "Yes", - "nextQuestionSequence": null - }, - { - "answerResult": "WKT D1106 B", - "answerText": "No", - "nextQuestionSequence": null - } - ] - } - ] - - } - ], - "partQuestions": null - } - ]; - - const { wrapper } = setupMocks({ - partsOrQuestions: partsOrQuestions - }); - - // Act - await wrapper.vm.navigateForwardWithSingleCarMatch(); - - // Assert - expect(wrapper.vm.$router.navigate).toHaveBeenCalledTimes(1); - expect(wrapper.vm.$router.navigate).toHaveBeenCalledWith(navigationScenarios.SELECTED_VIN_WITH_MOLDING_QUESTIONS, wrapper.vm.$route, {}, {}, { partsOrQuestions }); - }); - }); - - describe("should go to capability-questions", () => { - test("single glass location has no child part questions but requiresCapabilityQuestions is true => go to capability-questions", async () => { - // Arrange - const partsOrQuestions = [ - { - "glassName": "Stationary", - "glassLocation": "Rear", - "parts": [ - { - "partNumber": "FB25724GTYN", - "description": "heated glass, solar, antenna", - "color": "Green Tint", - "requiresRecalibration": false, - "requiresCapabilityQuestions": true, - "childParts": null, - "childPartQuestions": null - } - ], - "partQuestions": null - } - ]; - - const { wrapper } = setupMocks({ - partsOrQuestions: partsOrQuestions - }); - - // Act - await wrapper.vm.navigateForwardWithSingleCarMatch(); - - // Assert - expect(wrapper.vm.$router.navigate).toHaveBeenCalledTimes(1); - expect(wrapper.vm.$router.navigate).toHaveBeenCalledWith(navigationScenarios.SELECTED_VIN_WITH_CAPABILITY_QUESTIONS, wrapper.vm.$route, {}, {}, { partsOrQuestions }); - }); - }); - - describe("should go to heritage funnel", () => { - test("single glass location selected, has no part questions and has one part => go to heritage funnel", async () => { - // Arrange - const partsOrQuestions = [ - { - "glassName": "Single", - "glassLocation": "Windshield", - "parts": [ - { - "partNumber": "FW04186GTYN", - "description": "solar, soundproofing, lane keep assist", - "color": "Green Tint", - "requiresRecalibration": true, - "requiresCapabilityQuestions": false, - "childParts": [ - { - "partNumber": "GGG 3563 KIT", - "partType": "MOULDING", - "description": "Kit, Top & Sides " - } - ] - } - ], - "partQuestions": null - } - ] - - const { wrapper } = setupMocks({ - partsOrQuestions: partsOrQuestions - }); - - // Act - await wrapper.vm.navigateForwardWithSingleCarMatch(); - - // Assert - expect(navigateToHeritageFunnel).toHaveBeenCalledTimes(1); - }); - - test("multiple glass locations selected, each has one part and no part questions => go to heritage funnel", async () => { - // Arrange - const partsOrQuestions = [ - { - "glassName": "Single", - "glassLocation": "Windshield", - "parts": [ - { - "partNumber": "FW04186GTYN", - "description": "solar, soundproofing, lane keep assist", - "color": "Green Tint", - "requiresRecalibration": true, - "requiresCapabilityQuestions": false, - "childParts": [ - { - "partNumber": "GGG 3563 KIT", - "partType": "MOULDING", - "description": "Kit, Top & Sides " - } - ] - } - ], - "partQuestions": null - }, - { - "glassName": "Back", - "glassLocation": "Driver", - "parts": [ - { - "partNumber": "FD25457GTYN", - "description": "solar, driver side, rear", - "color": "Green Tint", - "requiresRecalibration": false, - "requiresCapabilityQuestions": false, - "childParts": null - } - ], - "partQuestions": null - }, - { - "glassName": "Front", - "glassLocation": "Driver", - "parts": [ - { - "partNumber": "FD27090GTYN", - "description": "solar, driver side, front", - "color": "Green Tint", - "requiresRecalibration": false, - "requiresCapabilityQuestions": false, - "childParts": null - } - ], - "partQuestions": null - }, - { - "glassName": "Vent", - "glassLocation": "Driver", - "parts": [ - { - "partNumber": "FV25459GTNN", - "description": "solar, driver side, rear", - "color": "Green Tint", - "requiresRecalibration": false, - "requiresCapabilityQuestions": false, - "childParts": null - } - ], - "partQuestions": null - }, - { - "glassName": "Stationary", - "glassLocation": "Rear", - "parts": [ - { - "partNumber": "FB25460GTYN", - "description": "heated glass, solar", - "color": "Green Tint", - "requiresRecalibration": false, - "requiresCapabilityQuestions": false, - "childParts": null - } - ], - "partQuestions": null - } - ]; - - const { wrapper } = setupMocks({ - partsOrQuestions: partsOrQuestions - }); - - wrapper.vm.$store.commit = jest.fn(); - - const collectedGlassParts = wrapper.vm.reducedGlassPartsArray(partsOrQuestions); - - // Act - await wrapper.vm.navigateForwardWithSingleCarMatch(); - - - // Assert - expect(wrapper.vm.$store.commit).toHaveBeenCalledTimes(1); - expect(wrapper.vm.$store.commit).toHaveBeenCalledWith(storeMutations.UPDATE_GLASS_PARTS, collectedGlassParts) - expect(wrapper.vm.$refs.loadingModal.showModal).toHaveBeenCalledTimes(1); - expect(navigateToHeritageFunnel).toHaveBeenCalledTimes(1); - }); - }); + // Assert + expect(vehicleQuestionsMixin.methods.navigateForward).toHaveBeenCalled(); + }) }); }); @@ -982,14 +41,7 @@ function setupMocks({ partsOrQuestions = [] }) { ], }); - const mocks = getMountOptions({ - router: { - navigate: jest.fn() - }, - store: { - commit: jest.fn() - } - }); + const mocks = getMountOptions({}); const mockVinComponent = { components: { loadingModal },