From 809d1838df77548adfe137913e8c84d1cabd48dd Mon Sep 17 00:00:00 2001 From: Chloe Herd Date: Thu, 7 Mar 2024 12:14:52 -0500 Subject: [PATCH] Update unit tests --- src/constants/store-mutations.js | 1 + .../heritage-integration/navigation-helper.js | 4 +- .../navigation-helper.spec.js | 540 +++++++++++------- 3 files changed, 340 insertions(+), 205 deletions(-) diff --git a/src/constants/store-mutations.js b/src/constants/store-mutations.js index 0b0338fef..2d4e0b4e7 100644 --- a/src/constants/store-mutations.js +++ b/src/constants/store-mutations.js @@ -49,6 +49,7 @@ const storeMutations = { UPDATE_BILL_TO_ACCT_NUMBER: "updateBillToAcctNumber", UPDATE_EON: "updateEON", UPDATE_IS_INSURANCE: "updateIsInsurance", + UPDATE_IS_VERIFIED_INSURANCE: "updateInsuranceVerifiedStatus", UPDATE_SAVED_SESSION_ID: "updateSavedSessionId", UPDATE_CRM_CUSTOMER_ID: "updateCrmCustomerId", UPDATE_IS_PIA: "updateIsPia", diff --git a/src/helpers/heritage-integration/navigation-helper.js b/src/helpers/heritage-integration/navigation-helper.js index a6fdd22b2..79ba0fce7 100644 --- a/src/helpers/heritage-integration/navigation-helper.js +++ b/src/helpers/heritage-integration/navigation-helper.js @@ -26,7 +26,7 @@ export async function getPageToRouteExistingOrderTo(toRoute = {}) { /* * Send the user to the specified page, except in specific scenarios. */ -async function getDirectNavigation(toRoute) { +export async function getDirectNavigation(toRoute) { const fmgPageValue = toRoute.query[queryStrings.FMG_PAGE]; // Override if Verified Insurance & Trying to go to vehicle @@ -47,7 +47,7 @@ async function getDirectNavigation(toRoute) { * General strategy: run through pages in reverse order, and select first where prerequisites are valid. * QUOTE is the latest page to send to. */ -async function getImplicitNavigation(toRoute) { +export async function getImplicitNavigation(toRoute) { const vehicleDamageComponent = await getLazyLoadedComponent(fmgPageValues.VEHICLE_DAMAGE); const estimateComponent = await getLazyLoadedComponent(fmgPageValues.ESTIMATE); const vinLookupComponent = await getLazyLoadedComponent(fmgPageValues.VIN_LOOKUP); diff --git a/src/helpers/heritage-integration/navigation-helper.spec.js b/src/helpers/heritage-integration/navigation-helper.spec.js index e0bd51b95..89df1bd17 100644 --- a/src/helpers/heritage-integration/navigation-helper.spec.js +++ b/src/helpers/heritage-integration/navigation-helper.spec.js @@ -1,7 +1,4 @@ -import { - getPageToRouteExistingOrderTo, - navigateToHeritageFunnel, -} from "@/helpers/heritage-integration/navigation-helper"; +import * as navigationHelper from "@/helpers/heritage-integration/navigation-helper"; import * as orderHelper from "@/helpers/heritage-integration/order-helper"; import { lazyLoadComponent } from "@/router/dynamic-routing/component-loader.js"; import { storeActions } from "@/constants/store-actions"; @@ -14,233 +11,370 @@ import { fmgPageValues } from "@/router/router-constants/fmgPage-values"; import store from "@/store"; import router from "@/router"; +const getPageToRouteExistingOrderTo = navigationHelper.getPageToRouteExistingOrderTo; +const navigateToHeritageFunnel = navigationHelper.navigateToHeritageFunnel; + // Mock Lazy Load jest.mock("@/router/dynamic-routing/component-loader.js", () => ({ lazyLoadComponent: jest.fn(), })); describe("getPageToRouteExistingOrderTo", () => { - test("should return vehicle", async () => { - // Arrange - const toRoute = { - query: {}, - }; - - store.commit(storeMutations.UPDATE_IS_REPAIR, false); - store.commit(storeMutations.UPDATE_MAKE, "acura"); - - // Mock out the lazy load calls for all components. - mockLazyLoadComponentReturnValues({ - [fmgPageValues.VEHICLE]: true, - [fmgPageValues.VEHICLE_DAMAGE]: false, - }); - - // Act - const result = await getPageToRouteExistingOrderTo(toRoute); - - //Assert - expect(result).toBe(fmgPageValues.VEHICLE); - }); - - test("should return vehicle-damage", async () => { - // Arrange - const toRoute = { - query: {}, - }; - - store.commit(storeMutations.UPDATE_IS_REPAIR, false); - store.commit(storeMutations.UPDATE_MAKE, "acura"); - - // Mock out the lazy load calls for all components. - mockLazyLoadComponentReturnValues({ - [fmgPageValues.VEHICLE]: true, - [fmgPageValues.VEHICLE_DAMAGE]: true, - [fmgPageValues.ESTIMATE]: false, - }); - - // Act - const result = await getPageToRouteExistingOrderTo(toRoute); - - //Assert - expect(result).toBe(fmgPageValues.VEHICLE_DAMAGE); - }); - - test("user has YMMS and no vehicle questions > should return estimate", async () => { - // Arrange - const toRoute = { - query: {}, - }; - - store.commit(storeMutations.UPDATE_IS_REPAIR, false); - store.commit(storeMutations.UPDATE_MAKE, "acura"); - - const mockExperimentsList = [ - { - universeName: "ConceptFunnel", - settings: { - SuppressVinCapture: false, + describe("Explicit vs. Implicit Routing", () => { + test("Should call explicit routing if `fmgPage` parameter is present in query", async () => { + // Arrange + const toRoute = { + query: { + fmgPage: "schedule", }, - }, - ]; - store.commit(storeMutations.UPDATE_EXPERIMENTS, mockExperimentsList); + }; - // Mock out the lazy load calls for all components. - mockLazyLoadComponentReturnValues({ - [fmgPageValues.VEHICLE]: true, - [fmgPageValues.VEHICLE_DAMAGE]: true, - [fmgPageValues.ESTIMATE]: true, - [fmgPageValues.CAPABILITY_QUESTIONS]: false, - [fmgPageValues.MOLDING_QUESTIONS]: false, - [fmgPageValues.VEHICLE_PARTS]: false, - [fmgPageValues.PART_QUESTIONS]: false, - [fmgPageValues.VIN_LOOKUP]: true, + mockLazyLoadComponentReturnValues(); + + // Act + const result = await getPageToRouteExistingOrderTo(toRoute); + + // Assert + // If direct, should be "schedule". + // Otherwise, not. + expect(result).toBe("schedule"); }); - // Act - const result = await getPageToRouteExistingOrderTo(toRoute); + test("Should call implicit routing if `fmgPage` parameter is NOT present in query", async () => { + // Arrange + const toRoute = { + query: {}, + }; - //Assert - expect(result).toBe(fmgPageValues.ESTIMATE); + mockLazyLoadComponentReturnValues(); + + // Act + const result = await getPageToRouteExistingOrderTo(toRoute); + + // Assert + // If direct, should be "schedule". + // Otherwise, not. + expect(result).not.toBe("schedule"); + }); }); - test("user has YMMS but no questions or carId > should return estimate", async () => { - // Arrange - const toRoute = { - query: {}, - }; + describe("Implicit Routing", () => { + test("should return vehicle", async () => { + // Arrange + const toRoute = { + query: {}, + }; - store.commit(storeMutations.UPDATE_IS_REPAIR, false); - store.commit(storeMutations.UPDATE_MAKE, "acura"); + store.commit(storeMutations.UPDATE_IS_REPAIR, false); + store.commit(storeMutations.UPDATE_MAKE, "acura"); - // Mock out the lazy load calls for all components. - mockLazyLoadComponentReturnValues({ - [fmgPageValues.VEHICLE]: true, - [fmgPageValues.VEHICLE_DAMAGE]: true, - [fmgPageValues.ESTIMATE]: true, - [fmgPageValues.CAPABILITY_QUESTIONS]: false, - [fmgPageValues.MOLDING_QUESTIONS]: false, - [fmgPageValues.VEHICLE_PARTS]: false, - [fmgPageValues.PART_QUESTIONS]: false, - [fmgPageValues.VIN_LOOKUP]: false, + // Mock out the lazy load calls for all components. + mockLazyLoadComponentReturnValues({ + [fmgPageValues.VEHICLE]: true, + [fmgPageValues.VEHICLE_DAMAGE]: false, + }); + + // Act + const result = await getPageToRouteExistingOrderTo(toRoute); + + //Assert + expect(result).toBe(fmgPageValues.VEHICLE); }); - // Act - const result = await getPageToRouteExistingOrderTo(toRoute); + test("should return vehicle-damage", async () => { + // Arrange + const toRoute = { + query: {}, + }; - //Assert - expect(result).toBe(fmgPageValues.ESTIMATE); + store.commit(storeMutations.UPDATE_IS_REPAIR, false); + store.commit(storeMutations.UPDATE_MAKE, "acura"); + + // Mock out the lazy load calls for all components. + mockLazyLoadComponentReturnValues({ + [fmgPageValues.VEHICLE]: true, + [fmgPageValues.VEHICLE_DAMAGE]: true, + [fmgPageValues.ESTIMATE]: false, + }); + + // Act + const result = await getPageToRouteExistingOrderTo(toRoute); + + //Assert + expect(result).toBe(fmgPageValues.VEHICLE_DAMAGE); + }); + + test("user has YMMS and no vehicle questions > should return estimate", async () => { + // Arrange + const toRoute = { + query: {}, + }; + + store.commit(storeMutations.UPDATE_IS_REPAIR, false); + store.commit(storeMutations.UPDATE_MAKE, "acura"); + + const mockExperimentsList = [ + { + universeName: "ConceptFunnel", + settings: { + SuppressVinCapture: false, + }, + }, + ]; + store.commit(storeMutations.UPDATE_EXPERIMENTS, mockExperimentsList); + + // Mock out the lazy load calls for all components. + mockLazyLoadComponentReturnValues({ + [fmgPageValues.VEHICLE]: true, + [fmgPageValues.VEHICLE_DAMAGE]: true, + [fmgPageValues.ESTIMATE]: true, + [fmgPageValues.CAPABILITY_QUESTIONS]: false, + [fmgPageValues.MOLDING_QUESTIONS]: false, + [fmgPageValues.VEHICLE_PARTS]: false, + [fmgPageValues.PART_QUESTIONS]: false, + [fmgPageValues.VIN_LOOKUP]: true, + }); + + // Act + const result = await getPageToRouteExistingOrderTo(toRoute); + + //Assert + expect(result).toBe(fmgPageValues.ESTIMATE); + }); + + test("user has YMMS but no questions or carId > should return estimate", async () => { + // Arrange + const toRoute = { + query: {}, + }; + + store.commit(storeMutations.UPDATE_IS_REPAIR, false); + store.commit(storeMutations.UPDATE_MAKE, "acura"); + + // Mock out the lazy load calls for all components. + mockLazyLoadComponentReturnValues({ + [fmgPageValues.VEHICLE]: true, + [fmgPageValues.VEHICLE_DAMAGE]: true, + [fmgPageValues.ESTIMATE]: true, + [fmgPageValues.CAPABILITY_QUESTIONS]: false, + [fmgPageValues.MOLDING_QUESTIONS]: false, + [fmgPageValues.VEHICLE_PARTS]: false, + [fmgPageValues.PART_QUESTIONS]: false, + [fmgPageValues.VIN_LOOKUP]: false, + }); + + // Act + const result = await getPageToRouteExistingOrderTo(toRoute); + + //Assert + expect(result).toBe(fmgPageValues.ESTIMATE); + }); + + test("user has capability questions and molding questions > should return capability questions", async () => { + // Arrange + const toRoute = { + query: {}, + }; + + store.commit(storeMutations.UPDATE_IS_REPAIR, false); + store.commit(storeMutations.UPDATE_MAKE, "acura"); + + // Mock out the lazy load calls for all components. + mockLazyLoadComponentReturnValues({ + [fmgPageValues.VEHICLE]: 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); + + //Assert + expect(result).toBe(fmgPageValues.CAPABILITY_QUESTIONS); + }); + + test("user has molding questions and part questions > should return molding questions", async () => { + // Arrange + const toRoute = { + query: {}, + }; + + store.commit(storeMutations.UPDATE_IS_REPAIR, false); + store.commit(storeMutations.UPDATE_MAKE, "acura"); + + // Mock out the lazy load calls for all components. + mockLazyLoadComponentReturnValues({ + [fmgPageValues.VEHICLE]: 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); + + //Assert + expect(result).toBe(fmgPageValues.MOLDING_QUESTIONS); + }); + + test("user has vehicle parts questions > should return vehicle-parts", async () => { + // Arrange + const toRoute = { + query: {}, + }; + + store.commit(storeMutations.UPDATE_IS_REPAIR, false); + store.commit(storeMutations.UPDATE_MAKE, "acura"); + + // Mock out the lazy load calls for all components. + mockLazyLoadComponentReturnValues({ + [fmgPageValues.VEHICLE]: 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); + + //Assert + expect(result).toBe(fmgPageValues.VEHICLE_PARTS); + }); + + test("user has part questions > should return part-questions", async () => { + // Arrange + const toRoute = { + query: {}, + }; + + store.commit(storeMutations.UPDATE_IS_REPAIR, false); + store.commit(storeMutations.UPDATE_MAKE, "acura"); + + // Mock out the lazy load calls for all components. + mockLazyLoadComponentReturnValues({ + [fmgPageValues.VEHICLE]: 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); + + //Assert + expect(result).toBe(fmgPageValues.PART_QUESTIONS); + }); + + test("should return quote, if not verified insurance", async () => { + // Arrange + const toRoute = { + query: {}, + }; + + store.commit(storeMutations.UPDATE_IS_REPAIR, false); + store.commit(storeMutations.UPDATE_MAKE, "acura"); + + // Mock out the lazy load calls for all components. + mockLazyLoadComponentReturnValues({ + [fmgPageValues.VEHICLE]: 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, + [fmgPageValues.QUOTE]: true, + }); + + // Act + const result = await getPageToRouteExistingOrderTo(toRoute); + + //Assert + expect(result).toBe(fmgPageValues.QUOTE); + }); + + test("should not return pages beyond quote even if prerequisites are met", async () => { + // Arrange + const toRoute = { + query: {}, + }; + + store.commit(storeMutations.UPDATE_IS_REPAIR, false); + store.commit(storeMutations.UPDATE_MAKE, "acura"); + + // Mock out the lazy load calls for all components. + mockLazyLoadComponentReturnValues({ + [fmgPageValues.VEHICLE]: 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, + [fmgPageValues.QUOTE]: true, + [fmgPageValues.SERVICE_LOCATION]: true, + [fmgPageValues.SCHEDULE]: true, + }); + + // Act + const result = await getPageToRouteExistingOrderTo(toRoute); + + //Assert + expect(result).toBe(fmgPageValues.QUOTE); + }); }); - test("user has capability questions and molding questions > should return capability questions", async () => { - // Arrange - const toRoute = { - query: {}, - }; + describe("Explicit Routing", () => { + test("Returns the value passed in in nominal case", async () => { + // Arrange + const toRoute = { + query: { + fmgPage: "testValue", + }, + }; - store.commit(storeMutations.UPDATE_IS_REPAIR, false); - store.commit(storeMutations.UPDATE_MAKE, "acura"); + // Act + const result = await getPageToRouteExistingOrderTo(toRoute); - // Mock out the lazy load calls for all components. - mockLazyLoadComponentReturnValues({ - [fmgPageValues.VEHICLE]: 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, + // Assert + expect(result).toBe("testValue"); }); - // Act - const result = await getPageToRouteExistingOrderTo(toRoute); + test("For verified insurance users, replace navigation to `vehicle` with `vehicle-damage`", async () => { + // Arrange + const toRoute = { + query: { + fmgPage: fmgPageValues.VEHICLE, + }, + }; - //Assert - expect(result).toBe(fmgPageValues.CAPABILITY_QUESTIONS); - }); + store.commit(storeMutations.UPDATE_IS_VERIFIED_INSURANCE, true); - test("user has molding questions and part questions > should return molding questions", async () => { - // Arrange - const toRoute = { - query: {}, - }; + // Act + const result = await getPageToRouteExistingOrderTo(toRoute); - store.commit(storeMutations.UPDATE_IS_REPAIR, false); - store.commit(storeMutations.UPDATE_MAKE, "acura"); - - // Mock out the lazy load calls for all components. - mockLazyLoadComponentReturnValues({ - [fmgPageValues.VEHICLE]: 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, + // Assert + expect(result).toBe(fmgPageValues.VEHICLE_DAMAGE); }); - - // Act - const result = await getPageToRouteExistingOrderTo(toRoute); - - //Assert - expect(result).toBe(fmgPageValues.MOLDING_QUESTIONS); - }); - - test("user has vehicle parts questions > should return vehicle-parts", async () => { - // Arrange - const toRoute = { - query: {}, - }; - - store.commit(storeMutations.UPDATE_IS_REPAIR, false); - store.commit(storeMutations.UPDATE_MAKE, "acura"); - - // Mock out the lazy load calls for all components. - mockLazyLoadComponentReturnValues({ - [fmgPageValues.VEHICLE]: 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); - - //Assert - expect(result).toBe(fmgPageValues.VEHICLE_PARTS); - }); - - test("user has part questions > should return part-questions", async () => { - // Arrange - const toRoute = { - query: {}, - }; - - store.commit(storeMutations.UPDATE_IS_REPAIR, false); - store.commit(storeMutations.UPDATE_MAKE, "acura"); - - // Mock out the lazy load calls for all components. - mockLazyLoadComponentReturnValues({ - [fmgPageValues.VEHICLE]: 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); - - //Assert - expect(result).toBe(fmgPageValues.PART_QUESTIONS); }); });