From 19b870dc7ce751281f3b9761589522cf0605e52c Mon Sep 17 00:00:00 2001 From: Alex Humphries Date: Thu, 11 Jun 2026 09:25:46 -0400 Subject: [PATCH] INSR-9940: Add/fix tests for cart-dropdown --- .../cart-dropdown/cart-dropdown.spec.js | 160 +++++++++++++++++- .../cart-dropdown/cart-dropdown.vue | 4 - 2 files changed, 156 insertions(+), 8 deletions(-) diff --git a/src/iss-components/cart-dropdown/cart-dropdown.spec.js b/src/iss-components/cart-dropdown/cart-dropdown.spec.js index 16692604..1efd6907 100644 --- a/src/iss-components/cart-dropdown/cart-dropdown.spec.js +++ b/src/iss-components/cart-dropdown/cart-dropdown.spec.js @@ -13,6 +13,7 @@ import { getPriceOfLineItems } from '@/helpers/price-calculator.js'; import coverageStatuses from '@/constants/coverage-statuses'; import coverageType from '@/constants/coverage-type'; import * as cartHelper from '@/helpers/cart-helper'; +import { experimentSettings } from '@/constants/experiments'; const VERIFYING_COVERAGE = 'Verifying coverage'; @@ -30,7 +31,7 @@ jest.mock('@/helpers/service-package-helper', () => ({ getPackageContents: jest.fn() })); -function getMountedComponent(mainInitialState = {}, initialData = {}, propsData = {}) { +function getMountedComponent(mainInitialState = {}, initialData = {}, propsData = {}, experimentMockFunction = jest.fn(() => 'false')) { const mountOptions = getMountOptions({ router: { navigate: jest.fn() @@ -44,7 +45,7 @@ function getMountedComponent(mainInitialState = {}, initialData = {}, propsData }); useMainStore(testingPinia); - mountOptions.global.mixins[0].methods.getSettingValue = jest.fn(() => 'false'); + mountOptions.global.mixins[0].methods.getSettingValue = experimentMockFunction; mountOptions.global.plugins = [testingPinia]; mountOptions.data = () => (initialData); mountOptions.propsData = propsData; @@ -804,12 +805,16 @@ describe('cart-dropdown component', () => { partType: partTypeStrings.REPLACE_FEE })); }); - test('when mobileFee, includes mobile fee', () => { + test('when mobile fee should be included, includes mobile fee', () => { // Arrange const storeData = { order: { lineItems: { - feeItems: [{ partType: partTypeStrings.MOBILE_FEE }] + feeItems: [{ partType: partTypeStrings.MOBILE_FEE, sellingPrice: 123}] + }, + insuranceCoverage: { + coverageStatus: coverageStatuses.VERIFIED, + coverageType: coverageType.NO_COMP } } }; @@ -977,6 +982,153 @@ describe('cart-dropdown component', () => { expect(result.name).toBe(expectedName); }); }); + describe('includeMobileFeeInCart', () => { + test('returns false with no mobile fee', () => { + // Arrange + const storeData = { + order: { + lineItems: { + feeItems: [] + } + } + }; + const { wrapper } = getMountedComponent(storeData); + + // Act + const result = wrapper.vm.includeMobileFeeInCart; + + // Assert + expect(result).toBe(false); + }); + + test('returns false with a mobile fee with no price', () => { + // Arrange + const storeData = { + order: { + lineItems: { + feeItems: [{ partType: partTypeStrings.MOBILE_FEE, price: 0 }] + } + } + }; + const { wrapper } = getMountedComponent(storeData); + + // Act + const result = wrapper.vm.includeMobileFeeInCart; + + // Assert + expect(result).toBe(false); + }); + + test('returns true for priced mobile fee for No Comp', () => { + // Arrange + const storeData = { + order: { + lineItems: { + feeItems: [{ partType: partTypeStrings.MOBILE_FEE, price: 100 }] + }, + insuranceCoverage: { + coverageStatus: coverageStatuses.VERIFIED, + coverageType: coverageType.NO_COMP + } + } + }; + const { wrapper } = getMountedComponent(storeData); + + // Act + const result = wrapper.vm.includeMobileFeeInCart; + + // Assert + expect(result).toBe(true); + }); + + test('returns true for priced mobile fee for ITAC', () => { + // Arrange + const storeData = { + order: { + lineItems: { + feeItems: [{ partType: partTypeStrings.MOBILE_FEE, price: 100 }] + }, + insuranceCoverage: { + coverageStatus: coverageStatuses.VERIFIED, + coverageType: coverageType.ITAC + } + } + }; + const { wrapper } = getMountedComponent(storeData); + + // Act + const result = wrapper.vm.includeMobileFeeInCart; + + // Assert + expect(result).toBe(true); + }); + + test('returns false for priced mobile fee for Deductible without Split Pay', () => { + // Arrange + const storeData = { + order: { + lineItems: { + feeItems: [{ partType: partTypeStrings.MOBILE_FEE, price: 100 }] + }, + insuranceCoverage: { + coverageStatus: coverageStatuses.VERIFIED, + coverageType: coverageType.Deductible + } + } + }; + const { wrapper } = getMountedComponent(storeData); + + // Act + const result = wrapper.vm.includeMobileFeeInCart; + + // Assert + expect(result).toBe(false); + }); + + test('returns false for priced mobile fee for Deductible with Split Pay and isInsurable=true', () => { + // Arrange + const storeData = { + order: { + lineItems: { + feeItems: [{ partType: partTypeStrings.MOBILE_FEE, price: 100, isInsurable: true }] + }, + insuranceCoverage: { + coverageStatus: coverageStatuses.VERIFIED, + coverageType: coverageType.Deductible + } + } + }; + const { wrapper } = getMountedComponent(storeData, {}, {}, (settingName) => (settingName === experimentSettings.MSR_SPLIT_PAY_ENABLED).toString()); + + // Act + const result = wrapper.vm.includeMobileFeeInCart; + + // Assert + expect(result).toBe(false); + }); + + test('returns true for priced mobile fee for Deductible with Split Pay and isInsurable=false', () => { + // Arrange + const storeData = { + order: { + lineItems: { + feeItems: [{ partType: partTypeStrings.MOBILE_FEE, price: 100, isInsurable: false }] + }, + insuranceCoverage: { + coverageStatus: coverageStatuses.VERIFIED, + coverageType: coverageType.Deductible + } + } + }; + const { wrapper } = getMountedComponent(storeData, {}, {}, (settingName) => (settingName === experimentSettings.MSR_SPLIT_PAY_ENABLED).toString()); + + // Act + const result = wrapper.vm.includeMobileFeeInCart; + + // Assert + expect(result).toBe(true); + }); + }); }); describe('method', () => { const dollarAmount = '$84.00'; diff --git a/src/iss-components/cart-dropdown/cart-dropdown.vue b/src/iss-components/cart-dropdown/cart-dropdown.vue index f4b28f53..2cd0fb94 100644 --- a/src/iss-components/cart-dropdown/cart-dropdown.vue +++ b/src/iss-components/cart-dropdown/cart-dropdown.vue @@ -399,10 +399,6 @@ export default { return true; } - if (!this.hasMSRPart) { - return false; - } - const isSplitPayEnabled = this.getSettingValue(experimentSettings.MSR_SPLIT_PAY_ENABLED) === 'true'; if (!isSplitPayEnabled) { return false;