diff --git a/jest.config.js b/jest.config.js
index e276f88f4..80bbe9d6d 100644
--- a/jest.config.js
+++ b/jest.config.js
@@ -13,7 +13,6 @@ 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",
diff --git a/src/helpers/damage-helper.js b/src/helpers/damage-helper.js
index c39283d72..453aadf69 100644
--- a/src/helpers/damage-helper.js
+++ b/src/helpers/damage-helper.js
@@ -1,10 +1,19 @@
import store from "@/store";
+import baseMixin from "@/mixins/base-mixin.js";
+import { storeActions } from "@/constants/store-actions";
export function getDamageString() {
return store.getters.damage.glassToReplace.length > 1 ? "match" : store.getters.damage.glassToReplace[0].location;
}
-export function compareGlassOptions(newOptions, currentOptions){
+export async function isGlassAvailableForCarId(carId){
+ const newGlassOptions = await baseMixin.methods.dispatchNonBlockingStoreAction(
+ storeActions.GET_DAMAGE_OPTIONS,
+ { carId: carId }
+ );
+
+ const currentGlassOptions = store.getters.damage.glassToReplace;
+
const optionsMap = {
Windshield: "windshieldOptions",
Driver: "driverSideOptions",
@@ -12,11 +21,11 @@ export function compareGlassOptions(newOptions, currentOptions){
Rear: "backGlassOptions"
}
- for(const option of currentOptions){
- if(!newOptions[optionsMap[option.location]].availableReplacementOptions.includes(option.name)){
- return true;
+ for(const option of currentGlassOptions){
+ if(!newGlassOptions.data[optionsMap[option.location]].availableReplacementOptions.includes(option.name)){
+ return false;
}
}
- return false;
+ return true;
}
\ No newline at end of file
diff --git a/src/helpers/heritage-integration/navigation-helper.js b/src/helpers/heritage-integration/navigation-helper.js
index 724b13f7d..989dec817 100644
--- a/src/helpers/heritage-integration/navigation-helper.js
+++ b/src/helpers/heritage-integration/navigation-helper.js
@@ -53,6 +53,21 @@ export async function navigateToHeritageFunnel() {
);
}
+export async function navigateAfterSaveToHeritageFunnel(currentRoute) {
+ const currentComponent = currentRoute.matched[0].components;
+ currentComponent.default.methods.resetDependentState();
+ // Create the order (or save existing order) when navigating to Heritage Funnel.
+ await saveOrder();
+
+ router.navigateToExternalUrl(
+ externalUrls.HERITAGE_FUNNEL,
+ {
+ corid: store.getters.order.referralCorrelationId,
+ src: "concept-funnel"
+ }
+ );
+}
+
/*
Logic for getting the last "valid" page a user visited.
*/
@@ -78,7 +93,7 @@ async function getLatestPageForRedirection() {
return fmgPageValues.VEHICLE_DAMAGE;
} else {
if (store.getters.vehicle.vin) {
- return fmgPageValues.VIN_LOOKUP;
+ return fmgPageValues.LICENSE_PLATE_LOOKUP;
} else {
return fmgPageValues.ESTIMATE;
}
diff --git a/src/layouts/license-plate-lookup/license-plate-lookup.spec.js b/src/layouts/license-plate-lookup/license-plate-lookup.spec.js
new file mode 100644
index 000000000..19242c60d
--- /dev/null
+++ b/src/layouts/license-plate-lookup/license-plate-lookup.spec.js
@@ -0,0 +1,135 @@
+// Components
+import vehicleDamage from "@/layouts/license-plate-lookup/license-plate-lookup.vue";
+
+// Supporting Files
+import { settleAllPromises } from "@/helpers/layout-helper.js";
+import baseMixin from "@/mixins/base-mixin";
+import { fetchCmsContentForPage } from "@/helpers/cms-content-helper";
+import { shallowMount, flushPromises } from "@vue/test-utils";
+import { getMountOptions } from "@/helpers/unit-test-helper.js";
+import { nextTick } from "vue";
+import { storeActions } from "@/constants/store-actions";
+import { storeMutations } from "@/constants/store-mutations";
+import store from "@/store";
+import { validate } from "vee-validate";
+
+// Mock our module for promises.
+jest.mock("@/helpers/layout-helper.js", () => ({
+ settleAllPromises: jest.fn(),
+}));
+
+// Mock fetchCmsContentForPage
+jest.mock("@/helpers/cms-content-helper", () => ({
+ fetchCmsContentForPage: jest.fn(),
+}));
+
+// Mock Store
+jest.mock("@/store", () => ({
+ commit: jest.fn(),
+ dispatch: jest.fn(),
+ getters: {
+ vehicle: {
+ carId: "C00000000",
+ image: "test.jpg",
+ payment: {
+ insuranceCoverage: {
+ isVerified: false
+ }
+ }
+ },
+ eventBusItem: jest.fn(),
+ damage: {
+ glassToReplace: []
+ },
+ },
+}));
+
+describe("license-plate-lookup.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("license-plate-lookup.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();
+
+ });
+});
+
+
+function setupMocks({
+ pageHeaderWidgetHeaderText = {},
+ mountOptionsMockData = {
+ router: {
+ navigate: jest.fn(),
+ },
+ store: {
+ getters: {
+ vehicle: {},
+ payment: { insuranceCoverage: { isVerified: false } },
+ },
+ },
+ },
+}) {
+ //Mock api responses
+ baseMixin.methods.dispatchNonBlockingStoreAction = jest.fn();
+ const apiResponses = {
+ cmsContent: {
+ FunnelSubHeaderWidget: pageHeaderWidgetHeaderText,
+ VehicleBannerWidget: {
+ GenericVehicleImage:
+ "https://digitalconsumercms-dev.safelite.com/images/default-source/default-album/blurred-image.jpg?sfvrsn=a6ce3034_3",
+ },
+ FunnelHeaderWidget: {
+ LogoImage:
+ "https://digitalconsumercms-dev.safelite.com/images/default-source/default-album/safelite-logo.svg?sfvrsn=45e7ed06_3",
+ },
+ },
+ };
+
+ const apiPromise = Promise.resolve(apiResponses);
+
+ settleAllPromises.mockImplementation(() => apiPromise);
+ fetchCmsContentForPage.mockImplementation(() => Promise.resolve());
+
+
+ const mountOptions = getMountOptions(mountOptionsMockData);
+ mountOptions['attachTo'] = document.body; // append wrapper to document.body to test DOM methods
+
+ const wrapper = shallowMount(vehicleDamage, mountOptions);
+
+ wrapper.vm.setCmsContent = baseMixin.methods.setCmsContent;
+
+ return { wrapper, apiPromise };
+}
\ No newline at end of file
diff --git a/src/layouts/license-plate-lookup/license-plate-lookup.vue b/src/layouts/license-plate-lookup/license-plate-lookup.vue
index f76a98c69..5ec973063 100644
--- a/src/layouts/license-plate-lookup/license-plate-lookup.vue
+++ b/src/layouts/license-plate-lookup/license-plate-lookup.vue
@@ -11,42 +11,42 @@