From 3ebbc47e9f169070e2b21831fade8a6265f83ce1 Mon Sep 17 00:00:00 2001 From: Sneha Date: Mon, 28 Oct 2024 17:12:59 +0530 Subject: [PATCH 1/2] CSR-2249 --- src/constants/experiments.js | 1 + .../service-package-question.spec.js | 26 ++++++ .../service-package-question.vue | 35 ++++++-- .../service-package-radio.vue | 84 +++++++++++-------- 4 files changed, 105 insertions(+), 41 deletions(-) diff --git a/src/constants/experiments.js b/src/constants/experiments.js index eeabeb7d6..83555fc04 100644 --- a/src/constants/experiments.js +++ b/src/constants/experiments.js @@ -12,6 +12,7 @@ const experimentSettings = { SUBMIT_ORDER_ENABLE_PIA: "SubmitOrder_Enable_PIA", IS_EMAIL_OPTIONAL: "isEmailOptional", SERVICE_PACKAGE_DISCOUNT: "OfferServicePackageDiscount", + PROMO_ON_PACKAGE: "Offer_Promo_On_Pkg", RECAL_PRICE_REMOVE: "RecalPriceRemove", INSURANCE_TAB_TO_DISPLAY_THRESHOLD_INTERNAL: "NextGen_InternalInsuranceTabDisplayThreshold", INSURANCE_TAB_TO_DISPLAY_THRESHOLD_EXTERNAL: "NextGen_ExternalInsuranceTabDisplayThreshold", diff --git a/src/layouts/quote/service-package-question/service-package-question.spec.js b/src/layouts/quote/service-package-question/service-package-question.spec.js index e24b77f6a..d8edb254c 100644 --- a/src/layouts/quote/service-package-question/service-package-question.spec.js +++ b/src/layouts/quote/service-package-question/service-package-question.spec.js @@ -10,6 +10,7 @@ import { containsLineItemWithPartType, findLineItemsWithPartType, } from "@/helpers/service-package-helper"; +import { experimentSettings } from "@/constants/experiments"; import baseMixin from "@/mixins/base-mixin.js"; import { partTypeStrings } from "@/constants/part-type-strings"; import { nextTick } from "vue"; @@ -19,6 +20,18 @@ jest.mock("@/store", () => ({ dispatch: jest.fn(), })); +const mockExperimentSettings = experimentSettings; + +jest.mock("@/mixins/experiment-mixin.js", () => ({ + methods: { + getSettingValue(settingName) { + if (settingName === mockExperimentSettings.PROMO_ON_PACKAGE) { + return true; + } + }, + }, +})); + describe("service-package-question.vue", () => { beforeEach(async () => { processedCmsContent = inputQuestionWidgetAnswers; @@ -162,6 +175,19 @@ describe("service-package-question.vue", () => { wrapper.vm.servicePackageAnswers[0].buttonAuxillaryCopy.includes("As little as") ).toBe(true); }); + it("should show service package discount when insurance is not selected", () => { + // Arrange + mockProps.isInsuranceSelected = false; + const wrapper = setupMocks({}); + // Act + + // Assert + expect( + wrapper.vm.servicePackageAnswers[0].additionalButtonData.Text.includes( + "Special: Save $" + ) + ).toBe(true); + }); it("should return [] from nullSafeAvailableLineItems and not error out if availableLineItems is null", () => { // Arrange mockProps.availableLineItems = null; diff --git a/src/layouts/quote/service-package-question/service-package-question.vue b/src/layouts/quote/service-package-question/service-package-question.vue index 2a544e8ce..e475becd5 100644 --- a/src/layouts/quote/service-package-question/service-package-question.vue +++ b/src/layouts/quote/service-package-question/service-package-question.vue @@ -36,6 +36,8 @@ import { getLineItemsThatMatchPromos, } from "@/helpers/promotions-helper"; import { containsRecalParts, getItemsWithoutRecalParts } from "@/helpers/recal-helper"; +import experimentMixin from "@/mixins/experiment-mixin.js"; +import { experimentSettings } from "@/constants/experiments"; export default { name: "servicePackageQuestion", @@ -129,16 +131,22 @@ export default { buttonLabelSubCopy: this.getSubheaderTextFromCms(answer.SubWidgetName), buttonBodyCopy: this.getBodyTextFromCms(answer.SubWidgetName), //The package supports service-package-discount if it has the text value in CMS - buttonAuxillaryCopy: this.getDiscountedPackagePriceString( - answer.Name, - this.isServicePackageDiscountOnOrder && answer.Text != "" - ), + buttonAuxillaryCopy: this.isInsuranceSelected + ? this.getDiscountedPackagePriceString(answer.Name, false) + : this.getDiscountedPackagePriceString( + answer.Name, + this.isServicePackageDiscountOnOrder && + this.discountPackageNames == answer.Name + ), buttonFooterCopy: this.getFooterTextFromCms(answer.SubWidgetName), additionalButtonData: { strikeThroughPrice: this.getPackagePriceString(answer.Name), servicePackageDiscount: - this.isServicePackageDiscountOnOrder && answer.Text != "", - Text: answer.Text + this.getServicePackageDiscountPrice(), + this.isServicePackageDiscountOnOrder && + this.discountPackageNames == answer.Name, + Text: this.isInsuranceSelected + ? false + : "Special: Save $" + this.getServicePackageDiscountPrice(), }, })); return modifiedAnswers; @@ -149,6 +157,21 @@ export default { this.nullSafeAvailableLineItems ); }, + discountPackageNames() { + const discountServicePackage = experimentMixin.methods.getSettingValue( + experimentSettings.PROMO_ON_PACKAGE + ); + switch (discountServicePackage) { + case "ECON": + return packageNames.TIER_ONE; + case "STANDARD": + return packageNames.TIER_TWO; + case "PREMIUM": + return packageNames.TIER_THREE; + default: + return null; + } + }, frontWipersApplicableForTierTwo() { return shouldFrontWipersBeAvailable( this.glassToReplace, diff --git a/src/layouts/quote/service-package-question/service-package-radio/service-package-radio.vue b/src/layouts/quote/service-package-question/service-package-radio/service-package-radio.vue index 4a7fd38d4..a4bd1a6b4 100644 --- a/src/layouts/quote/service-package-question/service-package-radio/service-package-radio.vue +++ b/src/layouts/quote/service-package-question/service-package-radio/service-package-radio.vue @@ -1,15 +1,8 @@