diff --git a/src/helpers/heritage-integration/navigation-helper.spec.js b/src/helpers/heritage-integration/navigation-helper.spec.js index 85e3878ff..eba5f5f49 100644 --- a/src/helpers/heritage-integration/navigation-helper.spec.js +++ b/src/helpers/heritage-integration/navigation-helper.spec.js @@ -16,8 +16,7 @@ jest.mock("@/router/dynamic-routing/component-loader.js", () => ({ })); describe("getPageToRouteExistingOrderTo", () => { - - test("getPageToRouteExistingOrderTo, should return vehicle-year", async () => { + test("should return vehicle-year", async () => { // Arrange const toRoute = { query: {} @@ -32,10 +31,29 @@ describe("getPageToRouteExistingOrderTo", () => { const result = await getPageToRouteExistingOrderTo(toRoute, false); //Assert - expect(result).toBe('vehicle-year'); + expect(result).toBe(fmgPageValues.VEHICLE_YEAR); }); - test("getPageToRouteExistingOrderTo, should return vehicle-model", async () => { + test("should return vehicle-make", async () => { + // Arrange + const toRoute = { + query: {} + }; + + // Mock out the lazy load calls for all components. + mockLazyLoadComponentReturnValues({ + [fmgPageValues.VEHICLE_MAKE]: true, + [fmgPageValues.VEHICLE_MODEL]: false + }) + + // Act + const result = await getPageToRouteExistingOrderTo(toRoute, false); + + //Assert + expect(result).toBe(fmgPageValues.VEHICLE_MAKE); + }); + + test("should return vehicle-model", async () => { // Arrange const toRoute = { query: {} @@ -52,10 +70,31 @@ describe("getPageToRouteExistingOrderTo", () => { const result = await getPageToRouteExistingOrderTo(toRoute, false); //Assert - expect(result).toBe('vehicle-model'); + expect(result).toBe(fmgPageValues.VEHICLE_MODEL); }); - test("getPageToRouteExistingOrderTo, should return vehicle-damage", async () => { + test("should return vehicle-style", async () => { + // Arrange + const toRoute = { + query: {} + }; + + // Mock out the lazy load calls for all components. + mockLazyLoadComponentReturnValues({ + [fmgPageValues.VEHICLE_MAKE]: true, + [fmgPageValues.VEHICLE_MODEL]: true, + [fmgPageValues.VEHICLE_STYLE]: true, + [fmgPageValues.VEHICLE_DAMAGE]: false, + }) + + // Act + const result = await getPageToRouteExistingOrderTo(toRoute, false); + + //Assert + expect(result).toBe(fmgPageValues.VEHICLE_STYLE); + }); + + test("should return vehicle-damage", async () => { // Arrange const toRoute = { query: {} @@ -74,10 +113,10 @@ describe("getPageToRouteExistingOrderTo", () => { const result = await getPageToRouteExistingOrderTo(toRoute, false); //Assert - expect(result).toBe('vehicle-damage'); + expect(result).toBe(fmgPageValues.VEHICLE_DAMAGE); }); - test("getPageToRouteExistingOrderTo, user has YMMS and no vehicle questions should return vin-lookup", async () => { + test("user has YMMS and no vehicle questions > should return vin-lookup", async () => { // Arrange const toRoute = { query: {} @@ -101,10 +140,10 @@ describe("getPageToRouteExistingOrderTo", () => { const result = await getPageToRouteExistingOrderTo(toRoute, false); //Assert - expect(result).toBe('vin-lookup'); + expect(result).toBe(fmgPageValues.VIN_LOOKUP); }); - test("getPageToRouteExistingOrderTo, user has YMMS but no questions or carId should return estimate", async () => { + test("user has YMMS but no questions or carId > should return estimate", async () => { // Arrange const toRoute = { query: {} @@ -128,10 +167,118 @@ describe("getPageToRouteExistingOrderTo", () => { const result = await getPageToRouteExistingOrderTo(toRoute, false); //Assert - expect(result).toBe('estimate'); + expect(result).toBe(fmgPageValues.ESTIMATE); }); - test("getPageToRouteExistingOrderTo, existing order, should return heritage", async () => { + test("user has capability questions and molding questions > should return capability questions", async () => { + // Arrange + const toRoute = { + query: {} + }; + + // Mock out the lazy load calls for all components. + mockLazyLoadComponentReturnValues({ + [fmgPageValues.VEHICLE_MAKE]: true, + [fmgPageValues.VEHICLE_MODEL]: true, + [fmgPageValues.VEHICLE_STYLE]: true, + [fmgPageValues.VEHICLE_DAMAGE]: true, + [fmgPageValues.ESTIMATE]: true, + [fmgPageValues.CAPABILITY_QUESTIONS]: true, + [fmgPageValues.MOLDING_QUESTIONS]: true, + [fmgPageValues.VEHICLE_PARTS]: false, + [fmgPageValues.PART_QUESTIONS]: false, + [fmgPageValues.VIN_LOOKUP]: false, + }) + + // Act + const result = await getPageToRouteExistingOrderTo(toRoute, false); + + //Assert + expect(result).toBe(fmgPageValues.CAPABILITY_QUESTIONS); + }); + + test("user has molding questions and part questions > should return molding questions", async () => { + // Arrange + const toRoute = { + query: {} + }; + + // Mock out the lazy load calls for all components. + mockLazyLoadComponentReturnValues({ + [fmgPageValues.VEHICLE_MAKE]: true, + [fmgPageValues.VEHICLE_MODEL]: true, + [fmgPageValues.VEHICLE_STYLE]: true, + [fmgPageValues.VEHICLE_DAMAGE]: true, + [fmgPageValues.ESTIMATE]: true, + [fmgPageValues.CAPABILITY_QUESTIONS]: false, + [fmgPageValues.MOLDING_QUESTIONS]: true, + [fmgPageValues.VEHICLE_PARTS]: false, + [fmgPageValues.PART_QUESTIONS]: true, + [fmgPageValues.VIN_LOOKUP]: false, + }) + + // Act + const result = await getPageToRouteExistingOrderTo(toRoute, false); + + //Assert + expect(result).toBe(fmgPageValues.MOLDING_QUESTIONS); + }); + + test("user has vehicle parts questions > should return vehicle-parts", async () => { + // Arrange + const toRoute = { + query: {} + }; + + // Mock out the lazy load calls for all components. + mockLazyLoadComponentReturnValues({ + [fmgPageValues.VEHICLE_MAKE]: true, + [fmgPageValues.VEHICLE_MODEL]: true, + [fmgPageValues.VEHICLE_STYLE]: true, + [fmgPageValues.VEHICLE_DAMAGE]: true, + [fmgPageValues.ESTIMATE]: true, + [fmgPageValues.CAPABILITY_QUESTIONS]: false, + [fmgPageValues.MOLDING_QUESTIONS]: false, + [fmgPageValues.VEHICLE_PARTS]: true, + [fmgPageValues.PART_QUESTIONS]: true, + [fmgPageValues.VIN_LOOKUP]: false, + }) + + // Act + const result = await getPageToRouteExistingOrderTo(toRoute, false); + + //Assert + expect(result).toBe(fmgPageValues.VEHICLE_PARTS); + }); + + test("user has part questions > should return part-questions", async () => { + // Arrange + const toRoute = { + query: {} + }; + + // Mock out the lazy load calls for all components. + mockLazyLoadComponentReturnValues({ + [fmgPageValues.VEHICLE_MAKE]: true, + [fmgPageValues.VEHICLE_MODEL]: true, + [fmgPageValues.VEHICLE_STYLE]: true, + [fmgPageValues.VEHICLE_DAMAGE]: true, + [fmgPageValues.ESTIMATE]: true, + [fmgPageValues.CAPABILITY_QUESTIONS]: false, + [fmgPageValues.MOLDING_QUESTIONS]: false, + [fmgPageValues.VEHICLE_PARTS]: false, + [fmgPageValues.PART_QUESTIONS]: true, + [fmgPageValues.VIN_LOOKUP]: false, + }) + + // Act + const result = await getPageToRouteExistingOrderTo(toRoute, false); + + //Assert + expect(result).toBe(fmgPageValues.PART_QUESTIONS); + }); + + test("existing order > should return heritage", async () => { // Arrange const toRoute = { query: { @@ -143,7 +290,7 @@ describe("getPageToRouteExistingOrderTo", () => { const result = await getPageToRouteExistingOrderTo(toRoute, true); // Assert - expect(result).toBe("heritage"); + expect(result).toBe(fmgPageValues.HERITAGE); }) }); diff --git a/src/layouts/vehicle-parts/vehicle-parts.spec.js b/src/layouts/vehicle-parts/vehicle-parts.spec.js index 9f766c7e9..bd7911da4 100644 --- a/src/layouts/vehicle-parts/vehicle-parts.spec.js +++ b/src/layouts/vehicle-parts/vehicle-parts.spec.js @@ -11,6 +11,7 @@ import { nextTick } from "vue"; import baseMixin from "@/mixins/base-mixin.js"; import store from "@/store"; import { navigateToHeritageFunnel } from "@/helpers/heritage-integration/navigation-helper"; +import { navigationScenarios } from "@/router/router-constants/navigation-scenarios"; // Mock our module for promises. jest.mock("@/helpers/layout-helper.js", () => ({ @@ -145,7 +146,7 @@ describe("vehicle-parts.vue", () => { test("Initial data, should populate this.glassParts", async () => { //Arrange - store.getters.pageData.mockReturnValueOnce(basePartResponse); + store.getters.pageData.mockReturnValue(basePartResponse); store.getters.lineItems = { glassParts: [{ partNumber: 'DB12209YPYNOEM' }] } const { wrapper } = setupMocks({ @@ -178,12 +179,8 @@ describe("vehicle-parts.vue", () => { expect(wrapper.vm.glassParts).toEqual({ "Rear-Stationary": { "Rear": ['DB12209YPYNOEM'] } }); }); - test("BackButtonAction triggers a router.navigate change", async () => { - + test("User had part questions > BackButtonAction triggers a router.navigate change with correct scenario", async () => { //Arrange - store.getters.pageData.mockReturnValueOnce(basePartResponse); - store.getters.lineItems = { glassParts: null } - const { wrapper } = setupMocks({ mountOptionsMockData: { router: { @@ -196,7 +193,25 @@ describe("vehicle-parts.vue", () => { } }, store: { - getters: store.getters + getters: { + pageData: () => { + return { + partsOrQuestions: [ + { + glassName: "Stationary", + glassLocation: "Rear", + parts: null, + partQuestions: [{ + testProperty: "some value" + }] + } + ] + } + }, + lineItems: { + glassParts: null + } + } }, } }); @@ -212,7 +227,46 @@ describe("vehicle-parts.vue", () => { wrapper.vm.backButtonAction(); //Assert - expect(wrapper.vm.$router.navigate).toHaveBeenCalled(); + expect(wrapper.vm.$router.navigate).toHaveBeenCalledWith(navigationScenarios.CLICKED_BACK_WITH_PART_QUESTION_ANSWERS, wrapper.vm.$route); + + }); + + test("User did not have part questions > BackButtonAction triggers a router.navigate change with correct scenario", async () => { + //Arrange + const { wrapper } = setupMocks({ + mountOptionsMockData: { + router: { + navigate: jest.fn(), + navigate: jest.fn() + }, + route: { + query: { + fmgPage: 'vehicle-parts', + } + }, + store: { + getters: { + pageData: () => basePartResponse, + lineItems: { + glassParts: null + } + } + }, + } + }); + + //Act + vehicleParts.beforeRouteEnter.call( + wrapper.vm, + { query: { fmgPage: "vehicle-parts" } }, + undefined, + (c) => c(wrapper.vm) + ); + + wrapper.vm.backButtonAction(); + + //Assert + expect(wrapper.vm.$router.navigate).toHaveBeenCalledWith(navigationScenarios.CLICKED_BACK_WITHOUT_PART_QUESTION_ANSWERS, wrapper.vm.$route); }); diff --git a/src/layouts/vehicle-parts/vehicle-parts.vue b/src/layouts/vehicle-parts/vehicle-parts.vue index 103af885b..10cf64ce9 100644 --- a/src/layouts/vehicle-parts/vehicle-parts.vue +++ b/src/layouts/vehicle-parts/vehicle-parts.vue @@ -67,6 +67,7 @@ import store from "@/store"; import { storeMutations } from "@/constants/store-mutations.js"; import vehicleQuestionsMixin from "@/mixins/vehicle-questions-mixin"; import { navigateToHeritageFunnel } from "@/helpers/heritage-integration/navigation-helper"; +import { assertParenthesizedExpression } from "@babel/types"; export default { name: "vehicle-parts", @@ -126,7 +127,7 @@ export default { return { glassName: g.glassName, glassLocation: g.glassLocation, - colorAnswers: g.parts.reduce((arr, p) => { + colorAnswers: g.parts?.reduce((arr, p) => { arr.push({ ColorAnswerText: p.color, FeatureAnswers: [ @@ -160,6 +161,8 @@ export default { }, backButtonAction() { const hasPartQuestions = this.hasPartQuestions(this.$store.getters.pageData(fmgPageValues.PART_QUESTIONS)?.partsOrQuestions); + // console.log(this.$store.getters.pageData(fmgPageValues.PART_QUESTIONS)) + // console.log(hasPartQuestions) const backNavigationScenario = hasPartQuestions ? this.navigationScenarios.CLICKED_BACK_WITH_PART_QUESTION_ANSWERS : this.navigationScenarios.CLICKED_BACK_WITHOUT_PART_QUESTION_ANSWERS; this.$router.navigate(