From 4bff273b47f652c0c636f7b4f3cc2659416c4ddb Mon Sep 17 00:00:00 2001 From: Katie Kroell Date: Fri, 27 Mar 2026 11:42:46 -0400 Subject: [PATCH 1/3] fix recal logic --- src/helpers/recal-helper.js | 20 +++++++++++++++++++ .../coverage-statement.spec.js | 12 +++++++++-- .../coverage-statement/coverage-statement.vue | 3 +++ .../service-package-question.vue | 3 ++- 4 files changed, 35 insertions(+), 3 deletions(-) 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); From 744f1b47240ed2164f1c00e55f2f9702d01753c0 Mon Sep 17 00:00:00 2001 From: katiekroell <100247286+katiekroell@users.noreply.github.com> Date: Fri, 27 Mar 2026 11:51:40 -0400 Subject: [PATCH 2/3] Update src/helpers/recal-helper.js Co-authored-by: Copilot <175728472+Copilot@users.noreply.github.com> --- src/helpers/recal-helper.js | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/src/helpers/recal-helper.js b/src/helpers/recal-helper.js index 429e2c72..68fdd51c 100644 --- a/src/helpers/recal-helper.js +++ b/src/helpers/recal-helper.js @@ -64,8 +64,9 @@ export function containsRecalParts(lineItems) { const flattened = [ ...(lineItems.glassParts ?? []), ...(lineItems.supportingItems ?? []), + ...(lineItems.otherParts ?? []), + ...(lineItems.feeItems ?? []), ...(lineItems.vaps ?? []), - ...(lineItems.promos ?? []), ]; return flattened.some((li) => isRecalPartOrHasChildRecalPart(li)); From 94f1504ef9fd4bffaafa8bfd23f8ff791eda5dc6 Mon Sep 17 00:00:00 2001 From: "copilot-swe-agent[bot]" <198982749+Copilot@users.noreply.github.com> Date: Fri, 27 Mar 2026 15:54:58 +0000 Subject: [PATCH 3/3] fix: use .some() instead of .filter() in isRecalPartOrHasChildRecalPart to return boolean Agent-Logs-Url: https://github.com/Safelite/DigitalConsumer.ISS/sessions/af7c0e65-2f59-45e0-8c49-f5c468cafa1a Co-authored-by: katiekroell <100247286+katiekroell@users.noreply.github.com> --- src/helpers/recal-helper.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/helpers/recal-helper.js b/src/helpers/recal-helper.js index 68fdd51c..c6cce97e 100644 --- a/src/helpers/recal-helper.js +++ b/src/helpers/recal-helper.js @@ -11,7 +11,7 @@ export function isRecalPartOrHasChildRecalPart(glassPart) { const isGlassPartRecalPart = isRecalPart(glassPart); if (!isGlassPartRecalPart && glassPart.childParts && glassPart.childParts.length > 0) { - return glassPart.childParts.filter((cp) => isRecalPartOrHasChildRecalPart(cp)); + return glassPart.childParts.some((cp) => isRecalPartOrHasChildRecalPart(cp)); } return isGlassPartRecalPart;