diff --git a/src/helpers/heritage-integration/navigation-helper.js b/src/helpers/heritage-integration/navigation-helper.js index a2b4452d5..029fb1f08 100644 --- a/src/helpers/heritage-integration/navigation-helper.js +++ b/src/helpers/heritage-integration/navigation-helper.js @@ -65,6 +65,9 @@ export async function skipVinLookup() { if (store.getters.damage.isRepair) { return true; } + if (store.getters.vehicle.vinRequired) { + return false; + } const isVinOptionalVehicle = store.getters.order.vehicle.make ? await store.dispatch(storeActions.IS_VIN_OPTIONAL_VEHICLE) : false; diff --git a/src/helpers/heritage-integration/navigation-helper.spec.js b/src/helpers/heritage-integration/navigation-helper.spec.js index 752c98fdc..ab1b9d6d7 100644 --- a/src/helpers/heritage-integration/navigation-helper.spec.js +++ b/src/helpers/heritage-integration/navigation-helper.spec.js @@ -11,6 +11,7 @@ import { damageLocationsSelected as glassLocations } from "@/constants/damage-lo import store from "@/store"; import router from "@/router"; +import { skipVinLookup } from "@/helpers/heritage-integration/navigation-helper"; const getPageToRouteExistingOrderTo = navigationHelper.getPageToRouteExistingOrderTo; const navigateToHeritageFunnel = navigationHelper.navigateToHeritageFunnel; @@ -147,6 +148,20 @@ describe("navigateToHeritageFunnel", () => { }); }); +describe("skipVinLookup", () => { + afterEach(() => { + store.commit(storeMutations.UPDATE_VIN_REQUIRED, false); + store.commit(storeMutations.UPDATE_IS_REPAIR, false); + }); + + test("returns false when vehicle vin is required", async () => { + store.commit(storeMutations.UPDATE_VIN_REQUIRED, true); + store.commit(storeMutations.UPDATE_IS_REPAIR, false); + + await expect(skipVinLookup()).resolves.toBe(false); + }); +}); + /** * `arePagePrerequisitesValidObject` is an object where the keys are fmgPageValue names and the values are booleans that indicate * whether arePagePrerequisitesValid is true or false diff --git a/src/mixins/vin-pages-mixin.js b/src/mixins/vin-pages-mixin.js index 78cb134cf..c15529d4f 100644 --- a/src/mixins/vin-pages-mixin.js +++ b/src/mixins/vin-pages-mixin.js @@ -37,7 +37,7 @@ export default { pageNameToLog: pageName, }); - if (result.PartNotFound) { + if (result.PartNotFound || store.getters.vehicle.vinRequired) { return bailoutMixin.methods.navigateToBailoutPage( this, bailoutCodes.PART_NOT_FOUND diff --git a/src/mixins/vin-pages-mixin.spec.js b/src/mixins/vin-pages-mixin.spec.js index d9ff6f874..46d755c3c 100644 --- a/src/mixins/vin-pages-mixin.spec.js +++ b/src/mixins/vin-pages-mixin.spec.js @@ -3,6 +3,10 @@ import { shallowMount } from "@vue/test-utils"; import { setupMocksForJsFiles, getMountOptions } from "@/helpers/unit-test-helper.js"; import { storeActions } from "@/constants/store-actions"; import vehicleQuestionsMixin from "@/mixins/vehicle-questions-mixin"; +import bailoutMixin from "@/mixins/bailout-mixin"; +import { bailoutCodes } from "@/constants/bailout-codes"; +import store from "@/store"; +import { storeMutations } from "@/constants/store-mutations"; jest.mock("@/helpers/heritage-integration/navigation-helper", () => ({ navigateForward: jest.fn(), @@ -15,6 +19,7 @@ jest.mock("@/helpers/heritage-integration/order-helper.js", () => ({ describe("vin-pages-mixin", () => { afterEach(() => { jest.clearAllMocks(); + store.commit(storeMutations.UPDATE_VIN_REQUIRED, false); }); describe("navigateForwardWithSingleCarMatch", () => { @@ -29,6 +34,24 @@ describe("vin-pages-mixin", () => { // Assert expect(vehicleQuestionsMixin.methods.navigateForward).toHaveBeenCalled(); }); + + test("vinRequired vehicles navigate to bailout after VIN is saved", async () => { + // Arrange + store.commit(storeMutations.UPDATE_VIN_REQUIRED, true); + const { wrapper } = setupMocks({}); + bailoutMixin.methods.navigateToBailoutPage = jest.fn(); + vehicleQuestionsMixin.methods.navigateForward = jest.fn(); + + // Act + await wrapper.vm.navigateForwardWithSingleCarMatch(); + + // Assert + expect(bailoutMixin.methods.navigateToBailoutPage).toHaveBeenCalledWith( + wrapper.vm, + bailoutCodes.PART_NOT_FOUND + ); + expect(vehicleQuestionsMixin.methods.navigateForward).not.toHaveBeenCalled(); + }); }); });