From 9bf5255f2b7dc7abc82f47e3486654e8dc8b98ea Mon Sep 17 00:00:00 2001 From: Adam Caouette Date: Fri, 20 Sep 2024 15:23:28 -0400 Subject: [PATCH 1/2] CSR-2166: refactoring to include logic to retrieve an insurance threshold from external parameters --- src/constants/experiments.js | 2 + src/layouts/quote/quote.vue | 90 ++++++++++++++++++++++++------------ 2 files changed, 63 insertions(+), 29 deletions(-) diff --git a/src/constants/experiments.js b/src/constants/experiments.js index 52017ce47..eeabeb7d6 100644 --- a/src/constants/experiments.js +++ b/src/constants/experiments.js @@ -13,6 +13,8 @@ const experimentSettings = { IS_EMAIL_OPTIONAL: "isEmailOptional", SERVICE_PACKAGE_DISCOUNT: "OfferServicePackageDiscount", RECAL_PRICE_REMOVE: "RecalPriceRemove", + INSURANCE_TAB_TO_DISPLAY_THRESHOLD_INTERNAL: "NextGen_InternalInsuranceTabDisplayThreshold", + INSURANCE_TAB_TO_DISPLAY_THRESHOLD_EXTERNAL: "NextGen_ExternalInsuranceTabDisplayThreshold", }; const experimentTriggers = { diff --git a/src/layouts/quote/quote.vue b/src/layouts/quote/quote.vue index f98d4dab0..a5222b49b 100644 --- a/src/layouts/quote/quote.vue +++ b/src/layouts/quote/quote.vue @@ -135,6 +135,8 @@ import { packageNames } from "@/constants/package-names"; import { navigateToHeritageFunnel } from "@/helpers/heritage-integration/navigation-helper"; defineRule("option-required", required(errorMessages.OPTION_REQUIRED)); +const INSURANCE_TAB_TO_DISPLAY_THRESHOLD_DEFAULT = 300; + export default { name: "quote", async beforeRouteEnter(to, from, next) { @@ -262,7 +264,6 @@ export default { vm.addableVaps = addableVaps; vm.lineItems = lineItems; vm.availableLineItems = pricingResults; - vm.isInsuranceSelected = vm.getDefaultIsInsuranceSelectedValue(vm.availableLineItems); vm.holdParentAccountNumber = holdParentAccountNumber; vm.holdBillToAccountNumber = holdBillToAccountNumber; @@ -291,8 +292,51 @@ export default { navigateToHeritageFunnel({ shouldSaveSession: true, pageNameToLog: "quote" }); } - if (store.getters.externalParameterState?.isExternalParameter) { - if (store.getters.externalParameterQuote.isInsurance == true) { + const getIsInsuranceSelectedValue = (availableLineItems, insuranceThreshold) => { + const serviceLocationState = store.getters.order.serviceLocation.state; + // Override if coming back from QuoteDetails. Remove override after Quote release + const isInsuranceOverrideValue = to.query?.isInsurance; + + const defaultIsInsuranceSelectedValue = store.getters.order.payment.isInsurance; + //Default to Insurance Tab if user Service zip is from certain States + if ( + serviceLocationState != null && + payWithInsuranceStates.find((item) => item === serviceLocationState) + ) + return true; + else if (isInsuranceOverrideValue != null) { + return isInsuranceOverrideValue == "true"; + } else if (defaultIsInsuranceSelectedValue != null) { + return defaultIsInsuranceSelectedValue; + } else { + // TEMPORARY CODE WHILE DEVELOPING + if (availableLineItems) { + let tierOnePackagePriceTemp = baseMixin.methods.getTierOnePackagePrice( + baseMixin.methods.filterOutFees(availableLineItems) + ); + let whatToReturn = baseMixin.methods.getTierOnePackagePrice( + baseMixin.methods.filterOutFees(availableLineItems) + ) > insuranceThreshold; + return whatToReturn; // TODO AJC: TIGHTEN THIS BACK UP AFTER TESTING + } else { + return null; + } + } + }; + let thresholdToUse = INSURANCE_TAB_TO_DISPLAY_THRESHOLD_DEFAULT; + let internalThreshold = experimentMixin.methods.getSettingValue( + experimentSettings.INSURANCE_TAB_TO_DISPLAY_THRESHOLD_INTERNAL + ); + + if (!store.getters.externalParameterState?.isExternalParameter) { // there are no external parameters + + if (internalThreshold) thresholdToUse = internalThreshold; + vm.isInsuranceSelected = getIsInsuranceSelectedValue(vm.availableLineItems, thresholdToUse); + baseMixin.methods.ResetExternalParamsAndHideModal(); + + } else { // there ARE external parameters + + if (store.getters.externalParameterQuote.isInsurance == true) { // did user intentionally select insurance? vm.isInsuranceSelected = true; vm.servicePackage = store.getters.externalParameterQuote.servicePackage; await nextTick(); @@ -303,10 +347,22 @@ export default { baseMixin.methods.ResetExternalParamsAndHideModal(); } } else { + // did user come from external source (LeadGen)? + let externalSource = store.getters.externalParameterSource ? store.getters.externalParameterSource : null; + + // Business logic to determine what "external" source is + if (externalSource?.includes("LeadGen")) { + const externalThreshold = experimentMixin.methods.getSettingValue( + experimentSettings.INSURANCE_TAB_TO_DISPLAY_THRESHOLD_EXTERNAL + ); + if (externalThreshold) thresholdToUse = externalThreshold; + } else { + if (internalThreshold) thresholdToUse = internalThreshold; + } + vm.isInsuranceSelected = getIsInsuranceSelectedValue(vm.availableLineItems, thresholdToUse); baseMixin.methods.ResetExternalParamsAndHideModal(); } - } else { - baseMixin.methods.ResetExternalParamsAndHideModal(); + } }); }, @@ -392,30 +448,6 @@ export default { payment.insuranceCoverage?.isVerified === false) ); }, - getDefaultIsInsuranceSelectedValue(availableLineItems) { - const serviceLocationState = store.getters.order.serviceLocation.state; - // Override if coming back from QuoteDetails. Remove override after Quote release - const isInsuranceOverrideValue = this.$route.query?.isInsurance; - - const defaultIsInsuranceSelectedValue = this.$store.getters.order.payment.isInsurance; - //Default to Insurance Tab if user Service zip is from certain States - if ( - serviceLocationState != null && - payWithInsuranceStates.find((item) => item === serviceLocationState) - ) - return true; - else if (isInsuranceOverrideValue != null) { - return isInsuranceOverrideValue == "true"; - } else if (defaultIsInsuranceSelectedValue != null) { - return defaultIsInsuranceSelectedValue; - } else { - return availableLineItems - ? baseMixin.methods.getTierOnePackagePrice( - baseMixin.methods.filterOutFees(availableLineItems) - ) > 300 - : null; - } - }, vapsItemsSelectedAction(vapsItemsSelected) { this.lineItems.vaps = vapsItemsSelected; }, From add23e716509068b71a97b9fd465dcc7ac5f55ef Mon Sep 17 00:00:00 2001 From: Adam Caouette Date: Fri, 20 Sep 2024 16:50:24 -0400 Subject: [PATCH 2/2] CSR-2166: fix unit test --- src/layouts/quote/quote.spec.js | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/src/layouts/quote/quote.spec.js b/src/layouts/quote/quote.spec.js index d8e08a77d..ef5c945a3 100644 --- a/src/layouts/quote/quote.spec.js +++ b/src/layouts/quote/quote.spec.js @@ -391,12 +391,11 @@ describe("quote.vue", () => { }, }; const { wrapper } = setupMocks({}); - wrapper.vm.$route = { query: { isInsurance: "false" } }; //Act await quote.beforeRouteEnter.call( wrapper.vm, - { query: { fmgPage: "quote" } }, + { query: { fmgPage: "quote", isInsurance: false } }, undefined, (c) => c(wrapper.vm) );