Merge pull request #2012 from Safelite/feature/CSR-2234
Feature/csr-2234
This commit is contained in:
commit
812149a98b
5 changed files with 48 additions and 29 deletions
6
src/constants/external-parameters.js
Normal file
6
src/constants/external-parameters.js
Normal file
|
|
@ -0,0 +1,6 @@
|
||||||
|
const externalParameterStatus = {
|
||||||
|
NOT_SET: null,
|
||||||
|
ACTIVE: 1,
|
||||||
|
INACTIVE: 0,
|
||||||
|
};
|
||||||
|
export { externalParameterStatus };
|
||||||
|
|
@ -65,6 +65,24 @@ jest.mock("@/mixins/base-mixin", () => ({
|
||||||
},
|
},
|
||||||
}));
|
}));
|
||||||
|
|
||||||
|
const mockExperimentSettings = experimentSettings;
|
||||||
|
|
||||||
|
jest.mock("@/mixins/experiment-mixin.js", () => ({
|
||||||
|
methods: {
|
||||||
|
getSettingValue(settingName) {
|
||||||
|
if (settingName === mockExperimentSettings.SERVICE_PACKAGE_DISCOUNT) {
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
if (settingName === mockExperimentSettings.INSURANCE_TAB_TO_DISPLAY_THRESHOLD_INTERNAL) {
|
||||||
|
return 300;
|
||||||
|
} else if (settingName === mockExperimentSettings.INSURANCE_TAB_TO_DISPLAY_THRESHOLD_EXTERNAL) {
|
||||||
|
return 500;
|
||||||
|
}
|
||||||
|
return "test";
|
||||||
|
},
|
||||||
|
},
|
||||||
|
}));
|
||||||
|
|
||||||
const mockMixin = {
|
const mockMixin = {
|
||||||
methods: {
|
methods: {
|
||||||
filterOutFees: jest.fn().mockImplementation(() => {
|
filterOutFees: jest.fn().mockImplementation(() => {
|
||||||
|
|
@ -73,12 +91,6 @@ const mockMixin = {
|
||||||
isFormValid: jest.fn().mockImplementation(() => {
|
isFormValid: jest.fn().mockImplementation(() => {
|
||||||
return true;
|
return true;
|
||||||
}),
|
}),
|
||||||
getSettingValue: jest.fn((settingName) => {
|
|
||||||
if (settingName === experimentSettings.SERVICE_PACKAGE_DISCOUNT) {
|
|
||||||
return true;
|
|
||||||
}
|
|
||||||
return false;
|
|
||||||
}),
|
|
||||||
},
|
},
|
||||||
};
|
};
|
||||||
let mockTierOnePrice = 501;
|
let mockTierOnePrice = 501;
|
||||||
|
|
@ -261,7 +273,7 @@ describe("quote.vue", () => {
|
||||||
};
|
};
|
||||||
const { wrapper } = setupMocks({});
|
const { wrapper } = setupMocks({});
|
||||||
|
|
||||||
//mock this to avoid needing to populate this.$route in an unrelated test
|
//mock this to avoid needing to populate this.$route in an unrelated test
|
||||||
wrapper.vm.getDefaultIsInsuranceSelectedValue = jest.fn();
|
wrapper.vm.getDefaultIsInsuranceSelectedValue = jest.fn();
|
||||||
|
|
||||||
//Act
|
//Act
|
||||||
|
|
@ -309,7 +321,7 @@ describe("quote.vue", () => {
|
||||||
|
|
||||||
wrapper.vm.$route = { query: { isInsurance: "false" } };
|
wrapper.vm.$route = { query: { isInsurance: "false" } };
|
||||||
|
|
||||||
const isServicePackageDiscount = mockMixin.methods.getSettingValue(
|
const isServicePackageDiscount = experimentMixin.methods.getSettingValue(
|
||||||
experimentSettings.SERVICE_PACKAGE_DISCOUNT
|
experimentSettings.SERVICE_PACKAGE_DISCOUNT
|
||||||
);
|
);
|
||||||
|
|
||||||
|
|
@ -701,7 +713,7 @@ describe("quote.vue", () => {
|
||||||
inactivePromos: [],
|
inactivePromos: [],
|
||||||
},
|
},
|
||||||
},
|
},
|
||||||
externalParameterState: { isExternalParameter: true },
|
externalParameterState: { isExternalParameter: 1 },
|
||||||
externalParameterQuote: {
|
externalParameterQuote: {
|
||||||
isInsurance: true,
|
isInsurance: true,
|
||||||
servicePackage: "glassonly",
|
servicePackage: "glassonly",
|
||||||
|
|
@ -758,8 +770,6 @@ function setupMocks({ customMountOptions }) {
|
||||||
baseMixin.methods.ResetExternalParamsAndHideModal = jest.fn();
|
baseMixin.methods.ResetExternalParamsAndHideModal = jest.fn();
|
||||||
baseMixin.methods.isFormValid = jest.fn().mockReturnValue(true);
|
baseMixin.methods.isFormValid = jest.fn().mockReturnValue(true);
|
||||||
mountOptions.global.mocks["$store"] = store;
|
mountOptions.global.mocks["$store"] = store;
|
||||||
store.getters.experimentSettings = "test value";
|
|
||||||
|
|
||||||
mountOptions["attachTo"] = document.body;
|
mountOptions["attachTo"] = document.body;
|
||||||
|
|
||||||
const wrapper = shallowMount(quote, mountOptions);
|
const wrapper = shallowMount(quote, mountOptions);
|
||||||
|
|
|
||||||
|
|
@ -136,6 +136,8 @@ import { nextTick } from "vue";
|
||||||
import { packageNames } from "@/constants/package-names";
|
import { packageNames } from "@/constants/package-names";
|
||||||
import { navigateToHeritageFunnel } from "@/helpers/heritage-integration/navigation-helper";
|
import { navigateToHeritageFunnel } from "@/helpers/heritage-integration/navigation-helper";
|
||||||
import { containsRecalParts } from "@/helpers/recal-helper";
|
import { containsRecalParts } from "@/helpers/recal-helper";
|
||||||
|
import { externalParameterStatus } from "@/constants/external-parameters";
|
||||||
|
|
||||||
defineRule("option-required", required(errorMessages.OPTION_REQUIRED));
|
defineRule("option-required", required(errorMessages.OPTION_REQUIRED));
|
||||||
|
|
||||||
const INSURANCE_TAB_TO_DISPLAY_THRESHOLD_DEFAULT = 300;
|
const INSURANCE_TAB_TO_DISPLAY_THRESHOLD_DEFAULT = 300;
|
||||||
|
|
@ -336,13 +338,20 @@ export default {
|
||||||
let internalThreshold = experimentMixin.methods.getSettingValue(
|
let internalThreshold = experimentMixin.methods.getSettingValue(
|
||||||
experimentSettings.INSURANCE_TAB_TO_DISPLAY_THRESHOLD_INTERNAL
|
experimentSettings.INSURANCE_TAB_TO_DISPLAY_THRESHOLD_INTERNAL
|
||||||
);
|
);
|
||||||
|
|
||||||
const isExternalParameter = store.getters.externalParameterState?.isExternalParameter;
|
const isExternalParameter = store.getters.externalParameterState?.isExternalParameter;
|
||||||
|
|
||||||
if (isExternalParameter !== undefined) {
|
if (isExternalParameter === externalParameterStatus.NOT_SET) {
|
||||||
// user is from an external source (either has value or is null)
|
// there are no active or inactive external parameters; use internal threshold
|
||||||
|
if (internalThreshold) thresholdToUse = internalThreshold;
|
||||||
|
|
||||||
if (store.getters.externalParameterQuote.isInsurance == true) {
|
vm.isInsuranceSelected = getIsInsuranceSelectedValue(
|
||||||
|
vm.availableLineItems,
|
||||||
|
thresholdToUse
|
||||||
|
);
|
||||||
|
baseMixin.methods.ResetExternalParamsAndHideModal();
|
||||||
|
} else {
|
||||||
|
// user came from an external source
|
||||||
|
if (store.getters.externalParameterQuote?.isInsurance == true) {
|
||||||
// did user intentionally select insurance?
|
// did user intentionally select insurance?
|
||||||
vm.isInsuranceSelected = true;
|
vm.isInsuranceSelected = true;
|
||||||
vm.servicePackage = store.getters.externalParameterQuote.servicePackage;
|
vm.servicePackage = store.getters.externalParameterQuote.servicePackage;
|
||||||
|
|
@ -365,15 +374,6 @@ export default {
|
||||||
);
|
);
|
||||||
baseMixin.methods.ResetExternalParamsAndHideModal();
|
baseMixin.methods.ResetExternalParamsAndHideModal();
|
||||||
}
|
}
|
||||||
} else {
|
|
||||||
// there are no external parameters; use internal threshold
|
|
||||||
if (internalThreshold) thresholdToUse = internalThreshold;
|
|
||||||
|
|
||||||
vm.isInsuranceSelected = getIsInsuranceSelectedValue(
|
|
||||||
vm.availableLineItems,
|
|
||||||
thresholdToUse
|
|
||||||
);
|
|
||||||
baseMixin.methods.ResetExternalParamsAndHideModal();
|
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
},
|
},
|
||||||
|
|
@ -571,7 +571,7 @@ export default {
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
this.$nextTick(() => {
|
this.$nextTick(() => {
|
||||||
const availablePackageNames = this.$refs.servicePackage.servicePackageAnswers;
|
const availablePackageNames = this.$refs.servicePackage?.servicePackageAnswers;
|
||||||
var eventLabel = "";
|
var eventLabel = "";
|
||||||
availablePackageNames?.forEach((tier) => {
|
availablePackageNames?.forEach((tier) => {
|
||||||
if (tier) {
|
if (tier) {
|
||||||
|
|
|
||||||
|
|
@ -10,6 +10,7 @@ import { getQuerystringParameter } from "@/helpers/querystring-helper";
|
||||||
import { getDeviceIdValue } from "@/helpers/heritage-integration/cookie-helper";
|
import { getDeviceIdValue } from "@/helpers/heritage-integration/cookie-helper";
|
||||||
import { showFmgLoadingModal } from "@/helpers/loading-modal-helper";
|
import { showFmgLoadingModal } from "@/helpers/loading-modal-helper";
|
||||||
import { fmgPageValues, funnelStartPageName } from "@/router/router-constants/fmgPage-values";
|
import { fmgPageValues, funnelStartPageName } from "@/router/router-constants/fmgPage-values";
|
||||||
|
import { externalParameterStatus } from "@/constants/external-parameters";
|
||||||
|
|
||||||
// Heritage integration
|
// Heritage integration
|
||||||
import { isSavedSessionStillActive } from "@/helpers/heritage-integration/session-helper";
|
import { isSavedSessionStillActive } from "@/helpers/heritage-integration/session-helper";
|
||||||
|
|
@ -264,7 +265,7 @@ router.beforeEach(async (to, from, next) => {
|
||||||
);
|
);
|
||||||
// If alert event is on the bus, then display the alert
|
// If alert event is on the bus, then display the alert
|
||||||
if (alertEvent !== undefined || unknownAlertEvent !== undefined) {
|
if (alertEvent !== undefined || unknownAlertEvent !== undefined) {
|
||||||
store.commit(storeMutations.UPDATE_IS_EXTERNAL_PARAMETER, false);
|
store.commit(storeMutations.UPDATE_IS_EXTERNAL_PARAMETER, externalParameterStatus.INACTIVE);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
// fromPaymentToConfirmation workaround for navigating from an iframe but
|
// fromPaymentToConfirmation workaround for navigating from an iframe but
|
||||||
|
|
@ -540,7 +541,7 @@ async function DisplayPageError() {
|
||||||
type: globalEventTypes.Danger,
|
type: globalEventTypes.Danger,
|
||||||
}
|
}
|
||||||
);
|
);
|
||||||
store.commit(storeMutations.UPDATE_IS_EXTERNAL_PARAMETER, false);
|
store.commit(storeMutations.UPDATE_IS_EXTERNAL_PARAMETER, externalParameterStatus.INACTIVE);
|
||||||
baseMixin.methods.dispatchStoreAction(storeActions.RESET_SAVE_SESSION_PROMISE);
|
baseMixin.methods.dispatchStoreAction(storeActions.RESET_SAVE_SESSION_PROMISE);
|
||||||
const pageError = getQuerystringParameter(queryStrings.PAGE_ERROR);
|
const pageError = getQuerystringParameter(queryStrings.PAGE_ERROR);
|
||||||
|
|
||||||
|
|
@ -639,7 +640,7 @@ function updateExternalParameterState() {
|
||||||
externalParameterModel &&
|
externalParameterModel &&
|
||||||
externalParameterStyle
|
externalParameterStyle
|
||||||
) {
|
) {
|
||||||
store.commit(storeMutations.UPDATE_IS_EXTERNAL_PARAMETER, true);
|
store.commit(storeMutations.UPDATE_IS_EXTERNAL_PARAMETER, externalParameterStatus.ACTIVE);
|
||||||
store.commit(storeMutations.UPDATE_EXTERNAL_PARAMETER_YEAR, externalParameterYear);
|
store.commit(storeMutations.UPDATE_EXTERNAL_PARAMETER_YEAR, externalParameterYear);
|
||||||
store.commit(storeMutations.UPDATE_EXTERNAL_PARAMETER_MAKE, externalParameterMake);
|
store.commit(storeMutations.UPDATE_EXTERNAL_PARAMETER_MAKE, externalParameterMake);
|
||||||
store.commit(storeMutations.UPDATE_EXTERNAL_PARAMETER_MODEL, externalParameterModel);
|
store.commit(storeMutations.UPDATE_EXTERNAL_PARAMETER_MODEL, externalParameterModel);
|
||||||
|
|
|
||||||
|
|
@ -42,6 +42,7 @@ import {
|
||||||
coverageTypeEnum,
|
coverageTypeEnum,
|
||||||
} from "@/constants/insurance";
|
} from "@/constants/insurance";
|
||||||
import { containsRecalParts } from "@/helpers/recal-helper";
|
import { containsRecalParts } from "@/helpers/recal-helper";
|
||||||
|
import { externalParameterStatus } from "@/constants/external-parameters";
|
||||||
|
|
||||||
// Export State
|
// Export State
|
||||||
const getDefaultState = () => {
|
const getDefaultState = () => {
|
||||||
|
|
@ -507,7 +508,7 @@ export const mutations = {
|
||||||
saveExternalParameterState(externalParameterState);
|
saveExternalParameterState(externalParameterState);
|
||||||
},
|
},
|
||||||
resetIsExternalParameter(state) {
|
resetIsExternalParameter(state) {
|
||||||
externalParameterState.isExternalParameter = null;
|
externalParameterState.isExternalParameter = externalParameterStatus.INACTIVE;
|
||||||
saveExternalParameterState(externalParameterState);
|
saveExternalParameterState(externalParameterState);
|
||||||
},
|
},
|
||||||
|
|
||||||
|
|
@ -3461,6 +3462,7 @@ async function resetScheduleIfUnavailable(context, order, pageNameToLog) {
|
||||||
function createExternalParameterDefaultState() {
|
function createExternalParameterDefaultState() {
|
||||||
// create default externalParameter state
|
// create default externalParameter state
|
||||||
const externalParameterDefaultState = {
|
const externalParameterDefaultState = {
|
||||||
|
isExternalParameter: externalParameterStatus.NOT_SET,
|
||||||
vehicle: {
|
vehicle: {
|
||||||
year: null,
|
year: null,
|
||||||
make: null,
|
make: null,
|
||||||
|
|
|
||||||
Loading…
Reference in a new issue