Merge pull request #2012 from Safelite/feature/CSR-2234

Feature/csr-2234
This commit is contained in:
AdamCaouetteSafelite 2024-10-07 11:14:14 -04:00 committed by GitHub
commit 812149a98b
No known key found for this signature in database
GPG key ID: B5690EEEBB952194
5 changed files with 48 additions and 29 deletions

View file

@ -0,0 +1,6 @@
const externalParameterStatus = {
NOT_SET: null,
ACTIVE: 1,
INACTIVE: 0,
};
export { externalParameterStatus };

View file

@ -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 = {
methods: {
filterOutFees: jest.fn().mockImplementation(() => {
@ -73,12 +91,6 @@ const mockMixin = {
isFormValid: jest.fn().mockImplementation(() => {
return true;
}),
getSettingValue: jest.fn((settingName) => {
if (settingName === experimentSettings.SERVICE_PACKAGE_DISCOUNT) {
return true;
}
return false;
}),
},
};
let mockTierOnePrice = 501;
@ -261,7 +273,7 @@ describe("quote.vue", () => {
};
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();
//Act
@ -309,7 +321,7 @@ describe("quote.vue", () => {
wrapper.vm.$route = { query: { isInsurance: "false" } };
const isServicePackageDiscount = mockMixin.methods.getSettingValue(
const isServicePackageDiscount = experimentMixin.methods.getSettingValue(
experimentSettings.SERVICE_PACKAGE_DISCOUNT
);
@ -701,7 +713,7 @@ describe("quote.vue", () => {
inactivePromos: [],
},
},
externalParameterState: { isExternalParameter: true },
externalParameterState: { isExternalParameter: 1 },
externalParameterQuote: {
isInsurance: true,
servicePackage: "glassonly",
@ -758,8 +770,6 @@ function setupMocks({ customMountOptions }) {
baseMixin.methods.ResetExternalParamsAndHideModal = jest.fn();
baseMixin.methods.isFormValid = jest.fn().mockReturnValue(true);
mountOptions.global.mocks["$store"] = store;
store.getters.experimentSettings = "test value";
mountOptions["attachTo"] = document.body;
const wrapper = shallowMount(quote, mountOptions);

View file

@ -136,6 +136,8 @@ import { nextTick } from "vue";
import { packageNames } from "@/constants/package-names";
import { navigateToHeritageFunnel } from "@/helpers/heritage-integration/navigation-helper";
import { containsRecalParts } from "@/helpers/recal-helper";
import { externalParameterStatus } from "@/constants/external-parameters";
defineRule("option-required", required(errorMessages.OPTION_REQUIRED));
const INSURANCE_TAB_TO_DISPLAY_THRESHOLD_DEFAULT = 300;
@ -336,13 +338,20 @@ export default {
let internalThreshold = experimentMixin.methods.getSettingValue(
experimentSettings.INSURANCE_TAB_TO_DISPLAY_THRESHOLD_INTERNAL
);
const isExternalParameter = store.getters.externalParameterState?.isExternalParameter;
if (isExternalParameter !== undefined) {
// user is from an external source (either has value or is null)
if (isExternalParameter === externalParameterStatus.NOT_SET) {
// 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?
vm.isInsuranceSelected = true;
vm.servicePackage = store.getters.externalParameterQuote.servicePackage;
@ -365,15 +374,6 @@ export default {
);
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(() => {
const availablePackageNames = this.$refs.servicePackage.servicePackageAnswers;
const availablePackageNames = this.$refs.servicePackage?.servicePackageAnswers;
var eventLabel = "";
availablePackageNames?.forEach((tier) => {
if (tier) {

View file

@ -10,6 +10,7 @@ import { getQuerystringParameter } from "@/helpers/querystring-helper";
import { getDeviceIdValue } from "@/helpers/heritage-integration/cookie-helper";
import { showFmgLoadingModal } from "@/helpers/loading-modal-helper";
import { fmgPageValues, funnelStartPageName } from "@/router/router-constants/fmgPage-values";
import { externalParameterStatus } from "@/constants/external-parameters";
// Heritage integration
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 (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
@ -540,7 +541,7 @@ async function DisplayPageError() {
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);
const pageError = getQuerystringParameter(queryStrings.PAGE_ERROR);
@ -639,7 +640,7 @@ function updateExternalParameterState() {
externalParameterModel &&
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_MAKE, externalParameterMake);
store.commit(storeMutations.UPDATE_EXTERNAL_PARAMETER_MODEL, externalParameterModel);

View file

@ -42,6 +42,7 @@ import {
coverageTypeEnum,
} from "@/constants/insurance";
import { containsRecalParts } from "@/helpers/recal-helper";
import { externalParameterStatus } from "@/constants/external-parameters";
// Export State
const getDefaultState = () => {
@ -507,7 +508,7 @@ export const mutations = {
saveExternalParameterState(externalParameterState);
},
resetIsExternalParameter(state) {
externalParameterState.isExternalParameter = null;
externalParameterState.isExternalParameter = externalParameterStatus.INACTIVE;
saveExternalParameterState(externalParameterState);
},
@ -3461,6 +3462,7 @@ async function resetScheduleIfUnavailable(context, order, pageNameToLog) {
function createExternalParameterDefaultState() {
// create default externalParameter state
const externalParameterDefaultState = {
isExternalParameter: externalParameterStatus.NOT_SET,
vehicle: {
year: null,
make: null,