From 11ac6f454368413978e92050982d8584ae61e94d Mon Sep 17 00:00:00 2001 From: Adam Caouette Date: Thu, 3 Oct 2024 08:57:50 -0400 Subject: [PATCH 1/4] CSR-2234: add new constants for external parameters --- src/constants/external-parameters.js | 6 ++++++ 1 file changed, 6 insertions(+) create mode 100644 src/constants/external-parameters.js diff --git a/src/constants/external-parameters.js b/src/constants/external-parameters.js new file mode 100644 index 000000000..686e29235 --- /dev/null +++ b/src/constants/external-parameters.js @@ -0,0 +1,6 @@ +const externalParameterStatus = { + NOT_SET: null, + ACTIVE: 1, + INACTIVE: 0, +}; +export { externalParameterStatus }; \ No newline at end of file From 6cfba7e4310263c5b60bfe74aab631597ed2525f Mon Sep 17 00:00:00 2001 From: Adam Caouette Date: Thu, 3 Oct 2024 08:58:53 -0400 Subject: [PATCH 2/4] CSR-2234: restore original creation state of isExternalParameter var --- src/store/index.js | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/src/store/index.js b/src/store/index.js index a35b339b3..533ad3ad1 100644 --- a/src/store/index.js +++ b/src/store/index.js @@ -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); }, @@ -3423,6 +3424,7 @@ async function resetScheduleIfUnavailable(context, order, pageNameToLog) { function createExternalParameterDefaultState() { // create default externalParameter state const externalParameterDefaultState = { + isExternalParameter: externalParameterStatus.NOT_SET, vehicle: { year: null, make: null, From b48a62b3fc8803b121a43fe34474450a8757c3f2 Mon Sep 17 00:00:00 2001 From: Adam Caouette Date: Thu, 3 Oct 2024 08:59:55 -0400 Subject: [PATCH 3/4] CSR-2234: implement new externalParameter constants --- src/layouts/quote/quote.vue | 23 ++++++++++++----------- src/router/index.js | 7 ++++--- 2 files changed, 16 insertions(+), 14 deletions(-) diff --git a/src/layouts/quote/quote.vue b/src/layouts/quote/quote.vue index 9bc8bace4..b18dc3dde 100644 --- a/src/layouts/quote/quote.vue +++ b/src/layouts/quote/quote.vue @@ -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; @@ -339,9 +341,17 @@ export default { 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; + 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; @@ -365,15 +375,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(); } }); }, diff --git a/src/router/index.js b/src/router/index.js index 4c57921b7..9d4417ff8 100644 --- a/src/router/index.js +++ b/src/router/index.js @@ -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); From 4814b0ce39c7a1b08a0e75fdc3ff95f38ea8f207 Mon Sep 17 00:00:00 2001 From: Adam Caouette Date: Mon, 7 Oct 2024 11:04:53 -0400 Subject: [PATCH 4/4] CSR-2234: fix unit tests --- src/layouts/quote/quote.spec.js | 32 +++++++++++++++++++++----------- src/layouts/quote/quote.vue | 5 ++--- 2 files changed, 23 insertions(+), 14 deletions(-) diff --git a/src/layouts/quote/quote.spec.js b/src/layouts/quote/quote.spec.js index d9c1ffabf..c83801693 100644 --- a/src/layouts/quote/quote.spec.js +++ b/src/layouts/quote/quote.spec.js @@ -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); diff --git a/src/layouts/quote/quote.vue b/src/layouts/quote/quote.vue index b18dc3dde..7f3c017d7 100644 --- a/src/layouts/quote/quote.vue +++ b/src/layouts/quote/quote.vue @@ -338,7 +338,6 @@ export default { let internalThreshold = experimentMixin.methods.getSettingValue( experimentSettings.INSURANCE_TAB_TO_DISPLAY_THRESHOLD_INTERNAL ); - const isExternalParameter = store.getters.externalParameterState?.isExternalParameter; if (isExternalParameter === externalParameterStatus.NOT_SET) { @@ -352,7 +351,7 @@ export default { baseMixin.methods.ResetExternalParamsAndHideModal(); } else { // user came from an external source - if (store.getters.externalParameterQuote.isInsurance == true) { + if (store.getters.externalParameterQuote?.isInsurance == true) { // did user intentionally select insurance? vm.isInsuranceSelected = true; vm.servicePackage = store.getters.externalParameterQuote.servicePackage; @@ -571,7 +570,7 @@ export default { } }); this.$nextTick(() => { - const availablePackageNames = this.$refs.servicePackage.servicePackageAnswers; + const availablePackageNames = this.$refs.servicePackage?.servicePackageAnswers; var eventLabel = ""; availablePackageNames?.forEach((tier) => { if (tier) {