diff --git a/src/helpers/recal-helper.js b/src/helpers/recal-helper.js index e72c2d63..429e2c72 100644 --- a/src/helpers/recal-helper.js +++ b/src/helpers/recal-helper.js @@ -52,3 +52,23 @@ export function getRecalPartNumbers(glassPartsArray) { } } +export function containsRecalParts(lineItems) { + if (!lineItems) { + return false; + } + + if (Array.isArray(lineItems)) { + return lineItems.some((li) => isRecalPartOrHasChildRecalPart(li)); + } else { + // complex object form -- flatten and re-call. + const flattened = [ + ...(lineItems.glassParts ?? []), + ...(lineItems.supportingItems ?? []), + ...(lineItems.vaps ?? []), + ...(lineItems.promos ?? []), + ]; + + return flattened.some((li) => isRecalPartOrHasChildRecalPart(li)); + } +} + diff --git a/src/layouts/coverage-statement/coverage-statement.spec.js b/src/layouts/coverage-statement/coverage-statement.spec.js index a8b77aa5..dcccbed6 100644 --- a/src/layouts/coverage-statement/coverage-statement.spec.js +++ b/src/layouts/coverage-statement/coverage-statement.spec.js @@ -32,6 +32,12 @@ jest.mock('@/helpers/text-helper', () => ({ formatAmountInDollars: jest.fn() })); +jest.mock('@/helpers/recal-helper.js', () => ({ + containsRecalParts: jest.fn() +})); + +import { containsRecalParts } from '@/helpers/recal-helper.js'; + const SAFELITE_PROVIDER = 'Safelite'; const CANCEL_CLAIM_REF_NAME = 'CancelClaimModal'; @@ -337,15 +343,17 @@ describe('coverageStatement.vue', () => { // Assert expect(result).toBeFalsy(); }); - test('returns true when a part in glassParts require recalibration', () => { + test('returns true when a part in glassParts require recalibration and recalibration has been added to order', () => { // Arrange + containsRecalParts.mockReturnValue(true); const mainInitialState = { order: { lineItems: { glassParts: [ { partNumber: 123, - requiresRecalibration: true + requiresRecalibration: true, + partType: 'RECALIBRATION' }, { partNumber: 111, diff --git a/src/layouts/coverage-statement/coverage-statement.vue b/src/layouts/coverage-statement/coverage-statement.vue index 4cc38651..70415327 100644 --- a/src/layouts/coverage-statement/coverage-statement.vue +++ b/src/layouts/coverage-statement/coverage-statement.vue @@ -147,6 +147,7 @@ import { getPriceOfLineItems } from '@/helpers/price-calculator'; import coverageStatuses from '@/constants/coverage-statuses'; import coverageType from '@/constants/coverage-type'; import oemEndorsementModal from '@/layouts/coverage-statement/oem-endorsement-modal/oem-endorsement-modal.vue'; +import { containsRecalParts } from '@/helpers/recal-helper'; const RECAL_MODAL_REF_NAME = 'RecalModal'; const CANCEL_CLAIM_REF_NAME = 'CancelClaimModal'; @@ -305,9 +306,11 @@ export default { }, isADAS() { const { glassParts } = useMainStore().order.lineItems; + const orderContainsRecalPart = containsRecalParts(glassParts); return ( glassParts !== null && !!glassParts.find((part) => part.requiresRecalibration) + && orderContainsRecalPart ); }, totalServicePrice() { diff --git a/src/layouts/service-packages/service-package-question/service-package-question.vue b/src/layouts/service-packages/service-package-question/service-package-question.vue index 73e29932..63bac64f 100644 --- a/src/layouts/service-packages/service-package-question/service-package-question.vue +++ b/src/layouts/service-packages/service-package-question/service-package-question.vue @@ -23,6 +23,7 @@ import partTypeStrings from '@/constants/part-type-strings'; import { useMainStore } from '@/store'; import { getPriceOfLineItem } from '@/helpers/price-calculator'; import { shallowRef } from 'vue'; +import { containsRecalParts } from '@/helpers/recal-helper'; const glassLocations = damageLocationsSelected; @@ -100,7 +101,7 @@ export default { return modifiedAnswers; }, isRecalibrationOnOrder() { - return this.mainStore.hasRecalibrationPart; + return this.mainStore.hasRecalibrationPart && containsRecalParts(this.mainStore.order.lineItems); }, frontWipersApplicableForTierTwo() { const frontWipersAreAvailable = this.lineItemsContainsPartType(partTypeStrings.FRONT_WIPER);