From 9c2968b4f124862354a52d8538742f965404be64 Mon Sep 17 00:00:00 2001 From: Chris Redelinghuys Date: Mon, 27 Apr 2026 10:00:48 -0400 Subject: [PATCH 01/14] CASH-2592: Add Dual Recal to MSR Co-authored-by: Copilot --- src/fmg-components/cart/cart.vue | 3 ++- src/helpers/pricing-helper.js | 4 +++- src/layouts/schedule/schedule.vue | 8 +++++++- 3 files changed, 12 insertions(+), 3 deletions(-) diff --git a/src/fmg-components/cart/cart.vue b/src/fmg-components/cart/cart.vue index 9a6f55576..faa28376d 100644 --- a/src/fmg-components/cart/cart.vue +++ b/src/fmg-components/cart/cart.vue @@ -962,7 +962,8 @@ export default { return this.supportingItems.find( (lineItem) => lineItem.partType == partTypeStrings.MOBILE_FEE && - lineItem.partNumber == partNumberStrings.MOBILE_STATIC_RECAL_FEE + (lineItem.partNumber == partNumberStrings.MOBILE_STATIC_RECAL_FEE || + lineItem.partNumber == partNumberStrings.MOBILE_DUAL_RECAL_FEE) ); }, msrFeeCartItem() { diff --git a/src/helpers/pricing-helper.js b/src/helpers/pricing-helper.js index 9564b5c1f..fff87d82f 100644 --- a/src/helpers/pricing-helper.js +++ b/src/helpers/pricing-helper.js @@ -108,7 +108,9 @@ export async function getPricingByDayPartWithPrice(pageNameToLog) { export function getMSRFeePartPrice(supportingItems, includeTax) { let msrFeePrice = 0; const msrFeeLineItem = supportingItems?.find( - (lineItem) => lineItem.partNumber === partNumberStrings.MOBILE_STATIC_RECAL_FEE + (lineItem) => + lineItem.partNumber === partNumberStrings.MOBILE_STATIC_RECAL_FEE || + lineItem.partNumber === partNumberStrings.MOBILE_DUAL_RECAL_FEE ); if (msrFeeLineItem) { msrFeePrice = baseMixin?.methods?.getTotalPriceOfAllLineItemsAndChildParts( diff --git a/src/layouts/schedule/schedule.vue b/src/layouts/schedule/schedule.vue index c483c90df..6f2db110b 100644 --- a/src/layouts/schedule/schedule.vue +++ b/src/layouts/schedule/schedule.vue @@ -706,10 +706,16 @@ export default { isMobileStaticRecalibrationApplicable() { return ( this.displayMSR && - this.mobileFeePart?.partNumber == partNumberStrings.MOBILE_STATIC_RECAL_FEE && + this.isMSRFeePartNumber && (this.enableMSRSplitPay || this.isCashItacNoComp || this.mobileFeePart?.isInsurable) ); }, + isMSRFeePartNumber() { + return ( + this.mobileFeePart?.partNumber === partNumberStrings.MOBILE_STATIC_RECAL_FEE || + this.mobileFeePart?.partNumber === partNumberStrings.MOBILE_DUAL_RECAL_FEE + ); + }, displayMSR() { return ( experimentMixin.methods From 4cf8957672e4461f3196bd66cc6f6aab28c7f74d Mon Sep 17 00:00:00 2001 From: CarlNation Date: Mon, 27 Apr 2026 11:00:48 -0400 Subject: [PATCH 02/14] CASH-2399 Handle error scenario where Adyen fails to load CASH-2399 Handle error scenario where Adyen fails to load. Will navigate back to payment-method on error. --- src/helpers/damage-helper.js | 2 +- src/layouts/payment-adyen/payment-adyen.vue | 38 +++++++++++++++++++-- src/mixins/analytics-mixin.js | 12 ++++++- 3 files changed, 48 insertions(+), 4 deletions(-) diff --git a/src/helpers/damage-helper.js b/src/helpers/damage-helper.js index 1763ffbea..5c7a2de7c 100644 --- a/src/helpers/damage-helper.js +++ b/src/helpers/damage-helper.js @@ -103,7 +103,7 @@ export function getSideDoorGlassString(glassLocation, glassName) { export function getDamageInfoWordingText(damageInfo) { const glassTextArray = []; - damageInfo.glassToReplace.forEach((item) => { + damageInfo.glassToReplace?.forEach((item) => { let string = ""; if (item.glassLocation === glassLocations.WINDSHIELD) { string = item.glassLocation; diff --git a/src/layouts/payment-adyen/payment-adyen.vue b/src/layouts/payment-adyen/payment-adyen.vue index 5b3a663ea..4bdcf46ce 100644 --- a/src/layouts/payment-adyen/payment-adyen.vue +++ b/src/layouts/payment-adyen/payment-adyen.vue @@ -77,6 +77,7 @@ import { createAdyenCheckout } from "@/helpers/adyen-helper"; import { Dropin } from "@adyen/adyen-web/auto"; import { applicationConfig } from "@/constants/application-config"; import { paymentMethods } from "@/constants/payment-method-constants"; +import analyticsMixin from "@/mixins/analytics-mixin"; import "@adyen/adyen-web/styles/adyen.css"; import { mapAdyenToFmgPaymentMethod, mapFmgToAdyenPaymentMethod } from "../../helpers/adyen-helper"; @@ -133,6 +134,28 @@ export default { }, methods: { + async initializeAdyenWithErrorHandling() { + try { + await this.initializeAdyen(); + } catch (error) { + console.error("Failed to initialize Adyen payment:", error); + + const errorJson = JSON.stringify( + error, + Object.getOwnPropertyNames(Object(error)) + ); + analyticsMixin.methods.pushFmgSessionData(errorJson); + await global.$logger.logError(errorJson); + + this.$router.navigateWithoutSaving( + this.navigationScenarios.PIA_ERROR, + this.pageName + ); + + return; + } + }, + async backButtonAction() { // Stub, for navigating back via nav-bar. this.$router.navigateWithoutSaving( @@ -203,6 +226,12 @@ export default { }, onError: (error, component) => { console.log(`Error from Adyen`); + const errorJson = JSON.stringify( + error, + Object.getOwnPropertyNames(Object(error)) + ); + analyticsMixin.methods.pushFmgSessionData(errorJson); + this.handleError(error); }, }, @@ -371,7 +400,12 @@ export default { await global.$logger.logError(stringToLog); - this.hasPaymentFailureError = true; + this.$router.navigateWithoutSaving( + this.navigationScenarios.PIA_ERROR, + this.pageName + ); + + return; } this.dropinComponent?.update(); @@ -566,7 +600,7 @@ export default { }, mounted() { - this.initializeAdyen(); + this.initializeAdyenWithErrorHandling(); }, components: { diff --git a/src/mixins/analytics-mixin.js b/src/mixins/analytics-mixin.js index 3ab575f58..1ea812c49 100644 --- a/src/mixins/analytics-mixin.js +++ b/src/mixins/analytics-mixin.js @@ -160,12 +160,16 @@ export default { // and aws FireHose stream, DigitalConsumer-Session-Firehose, to push data to an // S3 bucket, safelite-dev-digitalconsumer-session-data-us-east-2/1. // This bucket data is then picked up by snowflake for analytics use. - async pushFmgSessionData() { + async pushFmgSessionData(errorJson = null) { var currentPageName = getPageNameFromRouter(true); if (!currentPageName) { return; } + if (errorJson) { + currentPageName += ` ERROR: ${errorJson}`; + } + const hasSubmittedOrder = baseMixin.methods.hasSubmittedOrder(); const submittedOrder = baseMixin.methods.getSubmittedOrder(); const order = hasSubmittedOrder ? submittedOrder : store.getters.order; @@ -209,6 +213,7 @@ export default { var appointment = `${order?.schedule?.date ?? ""} ${order?.schedule?.startTime ?? ""}`; var sessionData = {}; + sessionData.currentPage = currentPageName; sessionData.sid = getSessionIdValue(); sessionData.deviceId = getDeviceIdValue(); @@ -931,6 +936,11 @@ function getPageNameFromRouter(useDefaultUrl = false) { router.currentRoute.value && router.currentRoute.value.name ) { + const query = router.currentRoute.value.query; + if (query && Object.keys(query).length > 0 && useDefaultUrl === true) { + const queryString = new URLSearchParams(query).toString(); + return `${router.currentRoute.value.name}?${queryString}`; + } return router.currentRoute.value.name; } From 09ca8efd9d1ad44f4f64e85bd92ecf73c8f1a09c Mon Sep 17 00:00:00 2001 From: CarlNation Date: Mon, 27 Apr 2026 11:13:12 -0400 Subject: [PATCH 03/14] prettier prettier --- src/layouts/payment-adyen/payment-adyen.vue | 5 +---- 1 file changed, 1 insertion(+), 4 deletions(-) diff --git a/src/layouts/payment-adyen/payment-adyen.vue b/src/layouts/payment-adyen/payment-adyen.vue index 4bdcf46ce..4297eb317 100644 --- a/src/layouts/payment-adyen/payment-adyen.vue +++ b/src/layouts/payment-adyen/payment-adyen.vue @@ -140,10 +140,7 @@ export default { } catch (error) { console.error("Failed to initialize Adyen payment:", error); - const errorJson = JSON.stringify( - error, - Object.getOwnPropertyNames(Object(error)) - ); + const errorJson = JSON.stringify(error, Object.getOwnPropertyNames(Object(error))); analyticsMixin.methods.pushFmgSessionData(errorJson); await global.$logger.logError(errorJson); From d707f13940b69299e0624e5ab08d7f428b35a131 Mon Sep 17 00:00:00 2001 From: Minojhini Valaiyapathi Date: Tue, 28 Apr 2026 08:38:11 -0400 Subject: [PATCH 04/14] CASH-2576 - updated the v2 version for /zip/damageType --- src/constants/endpoints.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/constants/endpoints.js b/src/constants/endpoints.js index 50dea494f..9e884df91 100644 --- a/src/constants/endpoints.js +++ b/src/constants/endpoints.js @@ -141,7 +141,7 @@ const endpoints = { method: "POST", }, ValidateZip: { - url: "/location/api/v1/location/zip", + url: "/location/api/v2/location/zip", method: "GET", }, PriceOrderItems: { From a0435780715a14e2d1f4410fbbd298cd77e07992 Mon Sep 17 00:00:00 2001 From: Chris Redelinghuys Date: Tue, 28 Apr 2026 11:42:46 -0400 Subject: [PATCH 05/14] CASH-2599: Pass isMSRFeeCoveredByInsurance to cart from Adyen page --- src/layouts/payment-adyen/payment-adyen.vue | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/src/layouts/payment-adyen/payment-adyen.vue b/src/layouts/payment-adyen/payment-adyen.vue index 4297eb317..fc3ad668d 100644 --- a/src/layouts/payment-adyen/payment-adyen.vue +++ b/src/layouts/payment-adyen/payment-adyen.vue @@ -35,6 +35,7 @@ :insuranceCompanyName="insuranceCompanyName" :showInsuranceCoverageAs="showInsuranceCoverageAs" :isMSRFeeApplicable="isMSRFeeApplicable" + :IsMSRFeeCoveredByInsurance="isMSRFeeCoveredByInsurance" :isItac="isItac" :isNoComp="isNoComp" :isCollapsible="false" /> @@ -591,6 +592,9 @@ export default { isMSRFeeApplicable() { return this.$store.getters.order.isMSRFeeApplicable; }, + isMSRFeeCoveredByInsurance() { + return this.$store.getters.order.isMSRFeeCoveredByInsurance; + }, lineItems() { return deepClone(this.$store.getters.lineItems); }, From 03f3a11f86de86412a8af99fb206d2c1c55994c2 Mon Sep 17 00:00:00 2001 From: Minojhini Valaiyapathi Date: Tue, 28 Apr 2026 13:28:11 -0400 Subject: [PATCH 06/14] CASH-2478 - Updated to v2 version for parts damage-options endpoint --- src/constants/endpoints.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/constants/endpoints.js b/src/constants/endpoints.js index abcf06502..b2c7b4821 100644 --- a/src/constants/endpoints.js +++ b/src/constants/endpoints.js @@ -25,7 +25,7 @@ const endpoints = { method: "GET", }, GetDamageOptions: { - url: "/parts/api/v1/parts/damage-options", + url: "/parts/api/v2/parts/damage-options", method: "GET", }, LookupVehicleByYmms: { From 3887057cda38d37f15fd68ae30cc8bf2466b7172 Mon Sep 17 00:00:00 2001 From: Minojhini Valaiyapathi Date: Thu, 30 Apr 2026 11:01:08 -0400 Subject: [PATCH 07/14] CASH-2576 - MS-backed v2 provider lookup and zip CTU with provider number. so passing that to bill to account --- src/layouts/address-lookup/address-lookup.vue | 1 + src/layouts/capability-questions/capability-questions.vue | 2 ++ src/layouts/license-plate-lookup/license-plate-lookup.vue | 1 + src/layouts/molding-questions/molding-questions.vue | 2 ++ src/layouts/part-questions/part-questions.vue | 2 ++ src/layouts/schedule/schedule.vue | 1 + src/layouts/service-zip/service-zip.vue | 3 +++ src/layouts/vehicle-damage/vehicle-damage.vue | 2 ++ src/layouts/vehicle/vehicle.vue | 1 + src/layouts/vin-lookup/vin-lookup.vue | 2 ++ src/mixins/base-mixin.js | 1 + src/router/methods/helpers/initialize-from-querystrings.js | 1 + src/router/methods/route-logic/vehicle.js | 1 + src/store/index.js | 3 ++- 14 files changed, 22 insertions(+), 1 deletion(-) diff --git a/src/layouts/address-lookup/address-lookup.vue b/src/layouts/address-lookup/address-lookup.vue index 081be8def..a7e1f6bca 100644 --- a/src/layouts/address-lookup/address-lookup.vue +++ b/src/layouts/address-lookup/address-lookup.vue @@ -421,6 +421,7 @@ export default { state: resultMap.serviceZipValidationResponse.state, zipCode: this.serviceZipCode, zipCodeCtu: resultMap.serviceZipValidationResponse.zipCodeCtu, + providerNumber: resultMap.serviceZipValidationResponse.providerNumber, }, false ); diff --git a/src/layouts/capability-questions/capability-questions.vue b/src/layouts/capability-questions/capability-questions.vue index c4f5df92c..659c8bdc1 100644 --- a/src/layouts/capability-questions/capability-questions.vue +++ b/src/layouts/capability-questions/capability-questions.vue @@ -73,6 +73,8 @@ export default { zipCode: store.getters.externalParameterServiceZip.zipCode, state: null, zipCodeCtu: null, + providerNumber: + store.getters.externalParameterServiceZip.providerNumber, }, false ); diff --git a/src/layouts/license-plate-lookup/license-plate-lookup.vue b/src/layouts/license-plate-lookup/license-plate-lookup.vue index a1477a664..730d6b4f2 100644 --- a/src/layouts/license-plate-lookup/license-plate-lookup.vue +++ b/src/layouts/license-plate-lookup/license-plate-lookup.vue @@ -360,6 +360,7 @@ export default { state: resultMap.serviceZipValidationResponse.state, zipCode: this.serviceZipCode, zipCodeCtu: resultMap.serviceZipValidationResponse.zipCodeCtu, + providerNumber: resultMap.serviceZipValidationResponse.providerNumber, }, false ); diff --git a/src/layouts/molding-questions/molding-questions.vue b/src/layouts/molding-questions/molding-questions.vue index a7f4900de..268f7356c 100644 --- a/src/layouts/molding-questions/molding-questions.vue +++ b/src/layouts/molding-questions/molding-questions.vue @@ -73,6 +73,8 @@ export default { zipCode: store.getters.externalParameterServiceZip.zipCode, state: null, zipCodeCtu: null, + providerNumber: + store.getters.externalParameterServiceZip.providerNumber, }, false ); diff --git a/src/layouts/part-questions/part-questions.vue b/src/layouts/part-questions/part-questions.vue index 958a38095..800fed21d 100644 --- a/src/layouts/part-questions/part-questions.vue +++ b/src/layouts/part-questions/part-questions.vue @@ -75,6 +75,8 @@ export default { zipCode: store.getters.externalParameterServiceZip.zipCode, state: serviceState ?? null, zipCodeCtu: serviceZipCtu ?? null, + providerNumber: + store.getters.externalParameterServiceZip.providerNumber, }, false ); diff --git a/src/layouts/schedule/schedule.vue b/src/layouts/schedule/schedule.vue index 6f2db110b..002440ec3 100644 --- a/src/layouts/schedule/schedule.vue +++ b/src/layouts/schedule/schedule.vue @@ -1810,6 +1810,7 @@ export default { zipCode: newZipCode.zipCode, state: newZipCode.state, zipCodeCtu: newZipCode.zipCodeCtu, + providerNumber: newZipCode.providerNumber, }, false ); diff --git a/src/layouts/service-zip/service-zip.vue b/src/layouts/service-zip/service-zip.vue index c82a0a0e3..47538cbd9 100644 --- a/src/layouts/service-zip/service-zip.vue +++ b/src/layouts/service-zip/service-zip.vue @@ -135,6 +135,8 @@ export default { zipCode: store.getters.externalParameterServiceZip.zipCode, state: null, zipCodeCtu: null, + providerNumber: + store.getters.externalParameterServiceZip.providerNumber, }, false ); @@ -246,6 +248,7 @@ export default { zipCode: this.serviceZipCode, state: zipCodeData.state, zipCodeCtu: zipCodeData.zipCodeCtu, + providerNumber: zipCodeData.providerNumber, }, false ); diff --git a/src/layouts/vehicle-damage/vehicle-damage.vue b/src/layouts/vehicle-damage/vehicle-damage.vue index e68598bd4..487c3ee05 100644 --- a/src/layouts/vehicle-damage/vehicle-damage.vue +++ b/src/layouts/vehicle-damage/vehicle-damage.vue @@ -184,6 +184,8 @@ export default { zipCode: store.getters.externalParameterServiceZip.zipCode, state: null, zipCodeCtu: null, + providerNumber: + store.getters.externalParameterServiceZip.providerNumber, }, false ); diff --git a/src/layouts/vehicle/vehicle.vue b/src/layouts/vehicle/vehicle.vue index 5c80694bf..b6ddc1bb9 100644 --- a/src/layouts/vehicle/vehicle.vue +++ b/src/layouts/vehicle/vehicle.vue @@ -525,6 +525,7 @@ export default { zipCode: this.serviceZipCode, state: zipCodeData.state, zipCodeCtu: zipCodeData.zipCodeCtu, + providerNumber: zipCodeData.providerNumber, }, false ); diff --git a/src/layouts/vin-lookup/vin-lookup.vue b/src/layouts/vin-lookup/vin-lookup.vue index ae80f670f..74bc0e11e 100644 --- a/src/layouts/vin-lookup/vin-lookup.vue +++ b/src/layouts/vin-lookup/vin-lookup.vue @@ -380,6 +380,7 @@ export default { state: resultMap.zipCodeData.state, zipCode: this.serviceZipCode, zipCodeCtu: resultMap.zipCodeData.zipCodeCtu, + providerNumber: resultMap.zipCodeData.providerNumber, }, false ); @@ -401,6 +402,7 @@ export default { state: zipCodeData.state, zipCode: this.serviceZipCode, zipCodeCtu: zipCodeData.zipCodeCtu, + providerNumber: zipCodeData.providerNumber, }, false ); diff --git a/src/mixins/base-mixin.js b/src/mixins/base-mixin.js index 4ca139275..24cb7949b 100644 --- a/src/mixins/base-mixin.js +++ b/src/mixins/base-mixin.js @@ -82,6 +82,7 @@ export default { isServiceable: serviceZipValidationResponse.data.isServiceable, state: serviceZipValidationResponse.data.state, zipCodeCtu: serviceZipValidationResponse.data.zipCodeCtu, + providerNumber: serviceZipValidationResponse.data.providerNumber, }; }, getTierOnePackagePrice(lineItems) { diff --git a/src/router/methods/helpers/initialize-from-querystrings.js b/src/router/methods/helpers/initialize-from-querystrings.js index 4d342cdc0..95cbad6fc 100644 --- a/src/router/methods/helpers/initialize-from-querystrings.js +++ b/src/router/methods/helpers/initialize-from-querystrings.js @@ -147,6 +147,7 @@ function resetStoreForExternalParameter() { state: null, zipCode: null, zipCodeCtu: null, + providerNumber: null, }); store.dispatch(storeActions.SAVE_EMAIL, null); store.dispatch(storeActions.RESET_DAMAGE_STATE_AND_DEPENDENCIES); diff --git a/src/router/methods/route-logic/vehicle.js b/src/router/methods/route-logic/vehicle.js index e7ff41fc0..7221ef275 100644 --- a/src/router/methods/route-logic/vehicle.js +++ b/src/router/methods/route-logic/vehicle.js @@ -30,6 +30,7 @@ export async function vehicleBeforeEnter(to, from) { zipCode: newZipFromQuerystring, state: zipData.state, zipCodeCtu: zipData.zipCodeCtu, + providerNumber: zipData.providerNumber, }); } } diff --git a/src/store/index.js b/src/store/index.js index de95a5dda..a8994ee5e 100644 --- a/src/store/index.js +++ b/src/store/index.js @@ -432,6 +432,7 @@ export const mutations = { state.order.serviceLocation.state = serviceZipInfo.state; state.order.serviceLocation.zipCode = serviceZipInfo.zipCode; state.order.serviceLocation.zipCodeCtu = serviceZipInfo.zipCodeCtu; + state.order.serviceLocation.providerNumber = serviceZipInfo.providerNumber; }, updateServiceLocation(state, serviceLocationInfo) { state.order.serviceLocation.address = serviceLocationInfo.address; @@ -3403,7 +3404,7 @@ export const actions = { { payload: { parentAccountNumber = context.getters.order.payment.parentAccountNumber, - providerNumber = context.getters.order.serviceLocation.zipCodeCtu, + providerNumber = context.getters.order.serviceLocation.providerNumber || context.getters.order.serviceLocation.zipCodeCtu, isItac = context.getters.order.policy.isItac, }, pageNameToLog, From c5288496968a0ed817d33c835f9b86000e607669 Mon Sep 17 00:00:00 2001 From: Minojhini Valaiyapathi Date: Thu, 30 Apr 2026 11:08:14 -0400 Subject: [PATCH 08/14] CASH-2576 - Fixed code formatting --- src/store/index.js | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/src/store/index.js b/src/store/index.js index a8994ee5e..b397218f7 100644 --- a/src/store/index.js +++ b/src/store/index.js @@ -3404,7 +3404,8 @@ export const actions = { { payload: { parentAccountNumber = context.getters.order.payment.parentAccountNumber, - providerNumber = context.getters.order.serviceLocation.providerNumber || context.getters.order.serviceLocation.zipCodeCtu, + providerNumber = context.getters.order.serviceLocation.providerNumber || + context.getters.order.serviceLocation.zipCodeCtu, isItac = context.getters.order.policy.isItac, }, pageNameToLog, From f1147f490bf646f51761b92f62f423a7e85e7867 Mon Sep 17 00:00:00 2001 From: CarlNation Date: Fri, 1 May 2026 10:27:58 -0400 Subject: [PATCH 09/14] return user defect when on the return-user page and the user navigates back to content site and then goes forward to vue app, the user is being sent back to return user page where it does not hide the loading modal. --- src/layouts/return-user/return-user.vue | 7 +++++++ 1 file changed, 7 insertions(+) diff --git a/src/layouts/return-user/return-user.vue b/src/layouts/return-user/return-user.vue index ad307080d..5a31c4bad 100644 --- a/src/layouts/return-user/return-user.vue +++ b/src/layouts/return-user/return-user.vue @@ -74,6 +74,13 @@ export default { startOverImage: null, }; }, + mounted() { + // The global baseMixin.mounted() skips hiding the loading modal when + // external-parameter state is active, but those parameters have no + // consumer on this interstitial. Clear that state and ensure the loader + // is hidden so the user can never get stuck behind it on this page. + this.ResetExternalParamsAndHideModal(); + }, methods: { arePagePrerequisitesValid() { return getFunnelCookie() !== null; From 67c6ec484a7c49f49bb05c2306e8584803aad581 Mon Sep 17 00:00:00 2001 From: CarlNation Date: Fri, 1 May 2026 10:38:58 -0400 Subject: [PATCH 10/14] use standard call use standard call --- src/layouts/return-user/return-user.vue | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/src/layouts/return-user/return-user.vue b/src/layouts/return-user/return-user.vue index 5a31c4bad..6ce0b2528 100644 --- a/src/layouts/return-user/return-user.vue +++ b/src/layouts/return-user/return-user.vue @@ -47,6 +47,7 @@ import { Form } from "vee-validate"; import { getFunnelCookie } from "@/helpers/heritage-integration/cookie-helper"; import { deleteFunnelCookie } from "@/helpers/heritage-integration/cookie-helper"; import { storeActions } from "@/constants/store-actions"; +import baseMixin from "@/mixins/base-mixin"; export default { name: "return-user", @@ -79,7 +80,7 @@ export default { // external-parameter state is active, but those parameters have no // consumer on this interstitial. Clear that state and ensure the loader // is hidden so the user can never get stuck behind it on this page. - this.ResetExternalParamsAndHideModal(); + baseMixin.methods.ResetExternalParamsAndHideModal(); }, methods: { arePagePrerequisitesValid() { From f36b7a8e70aebfa21c63bdbbb6737559b1181fef Mon Sep 17 00:00:00 2001 From: kpatel8hs4io <31411746+kpatel8hs4io@users.noreply.github.com> Date: Sun, 3 May 2026 12:15:16 -0400 Subject: [PATCH 11/14] Update HomePage.ts --- playwright-tests/pages/HomePage.ts | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/playwright-tests/pages/HomePage.ts b/playwright-tests/pages/HomePage.ts index 52ceca875..d4703c29c 100644 --- a/playwright-tests/pages/HomePage.ts +++ b/playwright-tests/pages/HomePage.ts @@ -21,7 +21,7 @@ export class HomePage extends BasePage { readonly viewQuoteButton: Locator; //Zip Entry - readonly widgetZipEntryField: Locator; + readonly widgetZipEntryInputField: Locator; readonly getQuoteAndScheduleButton: Locator; url = process.env['BASE_URL']!; @@ -30,7 +30,7 @@ export class HomePage extends BasePage { super(page); this.page = page; - this.letsGetStartedButton = this.page.getByRole('button', { name: 'Let\'s get started' }); + this.letsGetStartedButton = this.page.locator('a.zip-submit-button'); this.cusmodalPopup = this.page.locator('#Cusmodalpopup'); this.closePopupButton = this.page.getByRole('button', { name: '×' }); @@ -46,7 +46,7 @@ export class HomePage extends BasePage { this.viewQuoteButton = this.page.locator('#ctaSubmit'); //Zip Entry - this.widgetZipEntryField = this.page.getByRole('textbox', { name: 'Enter service ZIP code' }); + this.widgetZipEntryInputField = this.page.locator('input#zipcode'); this.getQuoteAndScheduleButton = this.page.getByLabel('main').getByRole('link', { name: 'Get quote + schedule' }); } @@ -61,7 +61,7 @@ export class HomePage extends BasePage { async letsGetStarted(zip: string, enterFunnelWithZip: boolean) { if (enterFunnelWithZip) { - await this.widgetZipEntryField.fill(zip); + await this.widgetZipEntryInputField.fill(zip); /* await this.letsGetStartedButton.evaluate((element, zip) => { const currentHref = element.getAttribute('href') || ''; element.setAttribute('href', `${currentHref}?zipCode=${zip}`); From 594002b37d509d34467235b5fc3ff214b8ab9ad9 Mon Sep 17 00:00:00 2001 From: kpatel8hs4io <31411746+kpatel8hs4io@users.noreply.github.com> Date: Sun, 3 May 2026 12:24:21 -0400 Subject: [PATCH 12/14] playwright tests updates --- playwright-tests/.env | 3 +- playwright-tests/.env.dev | 5 +- playwright-tests/framework/TestData.ts | 5 + .../framework/localTypes/IExperiments.ts | 3 +- playwright-tests/pages/BasePage.ts | 42 ++++---- playwright-tests/pages/PaymentMethodPage.ts | 11 +- playwright-tests/pages/PaypalPage.ts | 4 +- playwright-tests/pages/SchedulePage.ts | 9 ++ playwright-tests/pages/ServicePackagesPage.ts | 31 ++++++ playwright-tests/playwright.config.ts | 3 +- playwright-tests/tests/0000__M.test.ts | 11 +- .../tests/CashRepairInShopAfterPay.ts | 3 +- .../tests/CashReplaceDualMobileMSR.ts | 99 +++++++++++++++++ .../tests/CashReplaceDualNonMSRInshop.ts | 82 ++++++++++++++ ...ReplaceGlassAddressLookupInshopAfterPay.ts | 10 +- .../tests/CashReplaceMultiGlassPromoInshop.ts | 18 +++- .../CashReplaceMultiSlidingGlassDropoff.ts | 2 +- .../tests/CashReplaceStaticInshop.ts | 41 +++---- .../tests/CashReplaceStaticMobileMSR.ts | 92 ++++++++++++++++ ...placeSwitchToInsuranceProgressiveNoComp.ts | 2 + playwright-tests/tests/InsuranceUSAAMsr.ts | 101 ++++++++++++++++++ 21 files changed, 513 insertions(+), 64 deletions(-) create mode 100644 playwright-tests/tests/CashReplaceDualMobileMSR.ts create mode 100644 playwright-tests/tests/CashReplaceDualNonMSRInshop.ts create mode 100644 playwright-tests/tests/CashReplaceStaticMobileMSR.ts create mode 100644 playwright-tests/tests/InsuranceUSAAMsr.ts diff --git a/playwright-tests/.env b/playwright-tests/.env index 179424e5e..e9de46d32 100644 --- a/playwright-tests/.env +++ b/playwright-tests/.env @@ -9,8 +9,9 @@ SKIP_CONTENT_SITE="false" # Experiments Flag IS_MOBILEFIRST="false" -IS_ADYENPAYMENTS="false" +IS_ADYENPAYMENTS="true" IS_MULTILOCATIONPOPUP="false" +IS_MSRSPLITPAY="false" # Base URLs by environment # qa diff --git a/playwright-tests/.env.dev b/playwright-tests/.env.dev index de2c3c0f2..80841fd14 100644 --- a/playwright-tests/.env.dev +++ b/playwright-tests/.env.dev @@ -2,15 +2,16 @@ # Environment configuration # Environment type -PLAYWRIGHT_ENV="qa" +PLAYWRIGHT_ENV="QA" # Skip content site SKIP_CONTENT_SITE="false" # Experiments Flag IS_MOBILEFIRST="false" -IS_ADYENPAYMENTS="false" +IS_ADYENPAYMENTS="true" IS_MULTILOCATIONPOPUP="false" +IS_MSRSPLITPAY="false" # Base URLs by environment # qa diff --git a/playwright-tests/framework/TestData.ts b/playwright-tests/framework/TestData.ts index 6a87dfd8f..332e3dc26 100644 --- a/playwright-tests/framework/TestData.ts +++ b/playwright-tests/framework/TestData.ts @@ -11,6 +11,10 @@ export interface ITestData extends base { mockFirstInshopCallNoSchedule?: boolean, handleMobileFirstModal?: boolean, experiments?: IExperiments + isMSRGlassPart?: boolean, + isMSRZip?: boolean, + isPIAEnabled?: boolean, + isDualRecal?: boolean, } @@ -19,5 +23,6 @@ export function getDefaultExperimentsData(): IExperiments { isAdyenPayments: !!process.env.IS_ADYENPAYMENTS && process.env.IS_ADYENPAYMENTS !== "" ? process.env.IS_ADYENPAYMENTS === "true" : false, isMobileFirst: !!process.env.IS_MOBILEFIRST && process.env.IS_MOBILEFIRST !== "" ? process.env.IS_MOBILEFIRST === "true" : false, isMultiLocationPopup: !!process.env.IS_MULTILOCATIONPOPUP && process.env.IS_MULTILOCATIONPOPUP !== "" ? process.env.IS_MULTILOCATIONPOPUP === "true" : false, + isMsrSplitPay: !!process.env.IS_MSRSPLITPAY && process.env.IS_MSRSPLITPAY !== "" ? process.env.IS_MSRSPLITPAY === "true" : false, } } diff --git a/playwright-tests/framework/localTypes/IExperiments.ts b/playwright-tests/framework/localTypes/IExperiments.ts index bfe13c864..ec0d15180 100644 --- a/playwright-tests/framework/localTypes/IExperiments.ts +++ b/playwright-tests/framework/localTypes/IExperiments.ts @@ -1,5 +1,6 @@ export interface IExperiments { isMobileFirst: boolean, isAdyenPayments: boolean, - isMultiLocationPopup: boolean + isMultiLocationPopup: boolean, + isMsrSplitPay: boolean } \ No newline at end of file diff --git a/playwright-tests/pages/BasePage.ts b/playwright-tests/pages/BasePage.ts index e9fe835dc..4e6a9e93c 100644 --- a/playwright-tests/pages/BasePage.ts +++ b/playwright-tests/pages/BasePage.ts @@ -19,6 +19,7 @@ export class BasePage { readonly hamburgerMenu: Locator; readonly progressBar: Locator; readonly loaders: Locator; + readonly yellowAlertMessage: Locator; constructor(page: Page) { this.page = page; @@ -29,6 +30,7 @@ export class BasePage { this.hamburgerMenu = this.page.getByRole('button', { name: 'Hamburger Menu (modal window)' }); this.progressBar = this.page.locator('.progress-bar-outer .progress-bar-inner'); this.loaders = this.page.locator('.spinner-border, .loader'); + this.yellowAlertMessage = this.page.locator('.alert-warning'); } async nextPage() { @@ -135,42 +137,30 @@ export class BasePage { async mockScheduleResponseForFirstInshopCallNoSchedule(customerDetails: ICustomerDetails) { - let fistInshopScheduleCall = true; + // let fistInshopScheduleCall = true; const apiUrl = `https://digitalapi.${process.env['PLAYWRIGHT_ENV']!.replace('sys', 'test').toLowerCase()}.safelite.io/schedule/api/v1/schedule/shop-time-slots`; await this.page.route(apiUrl, async (route) => { - if (!fistInshopScheduleCall) { + /*if (!fistInshopScheduleCall) { return route.continue(); - } - - // const fmt = (d: Date) => `${d.getFullYear()}-${String(d.getMonth()+1).padStart(2,"0")}-${String(d.getDate()).padStart(2,"0")}`; - // const startDate = new Date(); - //const beginningOfWeek = new Date(startDate.getFullYear(), startDate.getMonth(), startDate.getDate() - startDate.getDay()); - // const endDate = new Date(beginningOfWeek.getFullYear(), beginningOfWeek.getMonth(), beginningOfWeek.getDate() + 13); - // e.g., "2025-07-23" - /*if (route.request().postDataJSON().startDate === fmt(startDate) && route.request().postDataJSON().endDate === fmt(endDate)) { - const response = await route.fetch(); - const responseBody = await response.json(); - - responseBody.days = []; - // Mock the response - await route.fulfill({ - response, - body: JSON.stringify(responseBody), - }); }*/ const response = await route.fetch(); const responseBody = await response.json(); - responseBody.days = []; + // Remove up to the first five items from the days array, keeping the rest; if empty, leave as is + if (Array.isArray(responseBody.days) && responseBody.days.length > 0) { + responseBody.days = responseBody.days.slice(5); + } else { + responseBody.days = []; + } // Mock the response await route.fulfill({ response, body: JSON.stringify(responseBody), }); - fistInshopScheduleCall = false; + // fistInshopScheduleCall = false; }); } @@ -252,9 +242,9 @@ export class BasePage { if (experiments !== undefined) { experimentsURLExtension += "?cns=all&experiments=" - experimentsURLExtension += experiments?.isMobileFirst + /*experimentsURLExtension += experiments?.isMobileFirst ? "MobileFirstAppointment=MobileFirstAppt_V1=MobileFirstAppt_TEST=true" - : "MobileFirstAppointment=MobileFirstAppt_V1=MobileFirstAppt_CONTROL=true"; + : "MobileFirstAppointment=MobileFirstAppt_V1=MobileFirstAppt_CONTROL=true";*/ experimentsURLExtension += experiments?.isAdyenPayments ? ",Adyen%20Payments=Adyen%20Payment%20Test=Adyen%20Payment%20(Test)=true" @@ -263,11 +253,15 @@ export class BasePage { experimentsURLExtension += experiments?.isMultiLocationPopup ? ",MultiLocationPopup=MultiLocationPopup_V1=MultiLocationPopup_TEST=true" : ",MultiLocationPopup=MultiLocationPopup_V1=MultiLocationPopup_CONTROL=true"; + + experimentsURLExtension += experiments?.isMsrSplitPay + ? ",MSR=MSR_With_Splitpay=YesShowMSR_TEST=true" + : ",MSR=MSR_With_Splitpay=NoShowMSR_CONTROL=true"; } else { console.log("Url extension without query string"); } // Convert to HTML encoding before returning - return experimentsURLExtension; + return process.env.PLAYWRIGHT_ENV == 'sys' ? '' : experimentsURLExtension; } } \ No newline at end of file diff --git a/playwright-tests/pages/PaymentMethodPage.ts b/playwright-tests/pages/PaymentMethodPage.ts index 215ccff30..d0ef408a6 100644 --- a/playwright-tests/pages/PaymentMethodPage.ts +++ b/playwright-tests/pages/PaymentMethodPage.ts @@ -272,9 +272,10 @@ export class PaymentMethodPage extends BasePage { if (await this.payAtServiceButton.isVisible()) { await this.payAtServiceButton.click(); } else if (isRecalVehicle) { - await this.recalibrationCheckbox.click(); + if (await this.recalibrationCheckbox.isVisible()) { + await this.recalibrationCheckbox.click(); + } } - } async verifyVAPS(): Promise { @@ -559,8 +560,10 @@ export class PaymentMethodPage extends BasePage { await this.validateProgressBar(ProgressBarPercentages.PaymentMethodPage); await this.validatePaymentDetailsPage(testData); - await this.ValidateAfterPayBreakOutSection(); - + if (testData.isPIAEnabled) { + await this.ValidateAfterPayBreakOutSection(); + } + if (isForcedOEM) { await this.validateOEMPart(isForcedOEM); } diff --git a/playwright-tests/pages/PaypalPage.ts b/playwright-tests/pages/PaypalPage.ts index 650acc27a..1c4bef5b6 100644 --- a/playwright-tests/pages/PaypalPage.ts +++ b/playwright-tests/pages/PaypalPage.ts @@ -47,10 +47,10 @@ export class PaypalPage extends BasePage { await this.page.screenshot({ path: `test-results\\ortoni-data\\paypal-username-${Date.now()}.png`, fullPage: true }); await this.usernameTextBox.fill(paymentDetails!.username!); await this.nextButton.click(); - if (!experiments!.isAdyenPayments){ + /*if (!experiments!.isAdyenPayments){ await this.tryAnotherWayButton.click(); await this.usePasswordInsteadButton.click(); - } + }*/ await this.passwordTextBox.fill(paymentDetails!.password!); await this.paypalLoginButton.click(); await this.payWithRadioButton.click(); diff --git a/playwright-tests/pages/SchedulePage.ts b/playwright-tests/pages/SchedulePage.ts index 30fc830d0..088049693 100644 --- a/playwright-tests/pages/SchedulePage.ts +++ b/playwright-tests/pages/SchedulePage.ts @@ -80,6 +80,15 @@ export class SchedulePage extends BasePage { async selectLocation(testData: Partial) { const { appointmentDetails, customerDetails } = testData; + if (testData.isMSRGlassPart || testData.isDualRecal) { + if (testData.isMSRZip) { + expect(await this.mobileButton.isVisible()).toBe(true); + } else { + expect(await this.mobileButton.isVisible()).toBe(false); + expect(await this.yellowAlertMessage.locator('.alert-heading').filter({ hasText: ' We\'re not able to provide mobile service.' }).isVisible()).toBe(true); + } + } + switch(appointmentDetails?.serviceLocation) { case ServiceLocation.Mobile: await this.scheduleMobile(testData); diff --git a/playwright-tests/pages/ServicePackagesPage.ts b/playwright-tests/pages/ServicePackagesPage.ts index 2f16cb7b4..8fbc22a87 100644 --- a/playwright-tests/pages/ServicePackagesPage.ts +++ b/playwright-tests/pages/ServicePackagesPage.ts @@ -5,6 +5,7 @@ import { ProgressBarPercentages } from 'framework/localTypes/Enums'; import { PaymentMethod } from "framework/localTypes/Enums"; import { step } from 'framework/localTypes/Step'; import { ITestData } from 'framework/TestData'; +import { PaymentMethodPage } from './PaymentMethodPage'; export class ServicePackagesPage extends BasePage { readonly page: Page; @@ -227,6 +228,32 @@ export class ServicePackagesPage extends BasePage { } } + async verifyGlassCashQuoteEvent() { + // Get displayed price text for Glass Only package (e.g. "$41.25in 4 interest-free payments\nor $164.99 in single payment") + const expectedGlassOnlyPrice = await this.glassOnlypackagePrice.innerText(); + + // Extract the single payment amount (e.g. 164.99) from the end of the string using regex + const singlePaymentRegex = /\$([\d,]+\.\d{2})\s*in single payment/; + const match = expectedGlassOnlyPrice.match(singlePaymentRegex); + if (!match) { + throw new Error(`Expected single payment price to be present in: ${expectedGlassOnlyPrice}`); + } + const expectedSinglePayAmount = parseFloat(match[1].replace(',', '')); + + // Retrieve the dataLayer from the browser. (Assumes dataLayer is in global scope. Adjust if needed.) + const dataLayer = await this.page.evaluate(() => (window as any).dataLayer); + + // Find the first object with a GlassCashQuote property and extract its value. + const glassCashQuote = dataLayer?.find((item: any) => item && item.GlassCashQuote)?.GlassCashQuote; + if (glassCashQuote === undefined || glassCashQuote === null) { + throw new Error("No GlassCashQuote found in dataLayer"); + } + + // Validate that the GlassCashQuote value matches the extracted expectedSinglePayAmount (with currency float precision) + Soft.expect(Number.parseFloat(glassCashQuote)).toBe(expectedSinglePayAmount); + + } + @step("ServicePackagePage >> Select Payment Method and Service Type: ") async handleServicePackagePage(testData: Partial) { const { customerDetails, paymentMethod, paymentDetails, servicePackage, isCanNotRecal, isDynamicRecal, hasOemEndorsement, vehicleDamage, appointmentDetails, totalAmount } = testData; @@ -289,6 +316,10 @@ export class ServicePackagesPage extends BasePage { await this.verifyVehicleParts(vehicleDamage!); } + if (testData.paymentMethod == PaymentMethod.SelfPay) { + await this.verifyGlassCashQuoteEvent(); + } + // Validate backend for OEM endorsement if (hasOemEndorsement) { await this.verifyOEMPart(); diff --git a/playwright-tests/playwright.config.ts b/playwright-tests/playwright.config.ts index 026f5b2d9..f5295bc1c 100644 --- a/playwright-tests/playwright.config.ts +++ b/playwright-tests/playwright.config.ts @@ -100,7 +100,8 @@ export default defineConfig({ headless: process.env.CI ? true : false, screenshot: "only-on-failure", actionTimeout: 60_000, - navigationTimeout: 60_000 + navigationTimeout: 60_000, + bypassCSP: true }, /* Configure projects for major browsers */ diff --git a/playwright-tests/tests/0000__M.test.ts b/playwright-tests/tests/0000__M.test.ts index 0dcb5155e..79cfc89f8 100644 --- a/playwright-tests/tests/0000__M.test.ts +++ b/playwright-tests/tests/0000__M.test.ts @@ -19,12 +19,14 @@ import { ApiResponseInterceptUtil } from 'safelite-playwright-core'; import cashReplaceGlassPromoInshopTests from "./CashReplaceGlassPromoInshop"; import cashReplaceMultiGlassPromoInshopTests from "./CashReplaceMultiGlassPromoInshop"; import cashReplaceStaticInshopTests from "./CashReplaceStaticInshop"; +import cashReplaceStaticMobileMSRTests from "./CashReplaceStaticMobileMSR"; import cashReplaceRainDefensePromoInshopTests from "./CashReplaceRainDefensePromoInshop"; import cashReplaceSafeliteCanNotRecalMobileTests from "./CashReplaceSafeliteCanNotRecalMobile"; import cashReplaceVinMobileTests from "./CashReplaceVinMobile"; import cashReplaceWiperDropoffTests from "./CashReplaceWiperDropoff"; import cashReplaceWiperPromoInShopTests from "./CashReplaceWiperPromoInshop"; import insuranceAcuityPaypalTests from "./InsuranceAcuityPaypal"; +// import insuranceUSAAMsrTests from "./InsuranceUSAAMsr"; import insuranceITAC21stCenturyTests from "./InsuranceITAC21stCentury"; import insuranceGeicoTests from "./InsuranceGeico"; import insuranceITACOptimizedPriceValidationAllStateTests from "./InsuranceITACOptimizedPriceValidationAllState"; @@ -42,6 +44,9 @@ import insuranceBigTruckVerifiedTests from "./InsuranceBigTruckVerified"; import insuranceUnverifiedTests from "./InsuranceUnverified"; import CashReplaceSplitWindshieldTests from "./CashReplaceSplitWindshield"; import insuranceMeemicNearSchoolVerifiedTests from "./InsuranceMeemicNearSchoolVerified"; +import cashReplaceDualMobileMSRTests from "./CashReplaceDualMobileMSR"; +import cashReplaceDualNonMSRInshopTests from "./CashReplaceDualNonMSRInshop"; + const test = getTestObject(); @@ -78,12 +83,16 @@ const allStandardTests = [ { name: "CashReplaceVinMobile", tests: cashReplaceVinMobileTests }, { name: "CashReplaceWiperDropoff", tests: cashReplaceWiperDropoffTests }, { name: "CashReplaceStaticInshop", tests: cashReplaceStaticInshopTests }, + { name: "CashReplaceDualMobileMSR", tests: cashReplaceDualMobileMSRTests }, + { name: "CashReplaceDualNonMSRInshop", tests: cashReplaceDualNonMSRInshopTests }, + { name: "CashReplaceStaticMobileMSR", tests: cashReplaceStaticMobileMSRTests }, { name: "CashReplaceWiperPromoInshop", tests: cashReplaceWiperPromoInShopTests }, { name: "CashReplaceSwitchToInsuranceProgressiveNoComp", tests: cashReplaceSwitchToInsuranceProgressiveNoCompTests }, - { name: "CashReplaceMobileFirstModal", tests: cashReplaceMobileFirstModalTests }, + // { name: "CashReplaceMobileFirstModal", tests: cashReplaceMobileFirstModalTests }, // TODO: Uncomment when QA is ready to run heavy truck tests // {name: "CashReplaceSplitWindshield", tests: CashReplaceSplitWindshieldTests}, { name: "InsuranceAcuityPaypal", tests: insuranceAcuityPaypalTests }, + // { name: "InsuranceUSAAMsr", tests: insuranceUSAAMsrTests }, { name: "InsuranceITAC21stCentury", tests: insuranceITAC21stCenturyTests }, { name: "InsuranceNoCompProgressive", tests: insuranceNoCompProgressiveTests }, // {name: "InsuranceBigTruckVerified", tests: insuranceBigTruckVerifiedTests}, diff --git a/playwright-tests/tests/CashRepairInShopAfterPay.ts b/playwright-tests/tests/CashRepairInShopAfterPay.ts index dc34404e5..71bce3f25 100644 --- a/playwright-tests/tests/CashRepairInShopAfterPay.ts +++ b/playwright-tests/tests/CashRepairInShopAfterPay.ts @@ -38,7 +38,8 @@ const cashRepairInShopAfterPayData : Partial = { // Experiments experiments: { - ...getDefaultExperimentsData() + ...getDefaultExperimentsData(), + isAdyenPayments: true } } diff --git a/playwright-tests/tests/CashReplaceDualMobileMSR.ts b/playwright-tests/tests/CashReplaceDualMobileMSR.ts new file mode 100644 index 000000000..454f4d2a8 --- /dev/null +++ b/playwright-tests/tests/CashReplaceDualMobileMSR.ts @@ -0,0 +1,99 @@ +//Imports here +import { ITestData, getDefaultExperimentsData } from 'framework/TestData' +import { ServicePackage, PaymentType, PartQuestionType, ServiceLocation } from 'safelite-playwright-core'; +import { ITestCase } from '../framework/Typedefs' +import { VehicleLookupType } from 'safelite-playwright-core'; +import { getDefaultTestData, setFakerSeedFromTestName } from 'safelite-playwright-core'; +import { PaymentMethod } from 'framework/localTypes/Enums'; + +// Set the seed before generating any data +setFakerSeedFromTestName("CashReplaceDualMobileMSR"); + +// Now get the test data with the seeded faker +const CashReplaceDualMobileMSRData: Partial = { + ...getDefaultTestData(), // Get default data with current seed + + // CASH Client + paymentMethod: PaymentMethod.SelfPay, + + // Key feature: Premium package with Rain Defense + servicePackage: ServicePackage.Standard, + + // Flag for recalibration vehicle + isRecalVehicle: true, + + // Override customer details + customerDetails: { + ...getDefaultTestData().customerDetails!, + address: { + ...getDefaultTestData().customerDetails!.address, + postalCode: '43085' + // postalCode: '21237' + } + }, + + // Override appointment details + appointmentDetails: { + serviceLocation: ServiceLocation.Mobile, + appointmentDate: getDefaultTestData().appointmentDetails?.appointmentDate, + serviceAddress: { + // Use street address from current faker seed + street: "649 High Street", + city: 'Worthington', + state: 'OH', + postalCode: '43085', // + country: 'United States' + }, + }, + + // override part questions + partQuestions: [ + { + partQuestionType: PartQuestionType.GeneralQuestion1, + isOnPage: true, + optionToSelect: 'Yes' + } + ], + + + // Override vehicle details + vehicleDetails: { + ...getDefaultTestData().vehicleDetails!, + year: '2020', + make: 'Honda', + model: 'Pilot', + style: '4 door utility', + vehicleLookupType: VehicleLookupType.Zip + }, + + mockFirstInshopCallNoSchedule: true, + + isMSRGlassPart: true, + isMSRZip: true, + + // No need to override vehicleDamage as it already defaults to WindshieldCrack + + // Payment at service + paymentDetails: { + paymentType: PaymentType.PayAtService + }, + + // Flag for PIA disabled + isPIAEnabled: false, + + // Experiments + experiments: { + ...getDefaultExperimentsData() + } +} + +const cashReplaceDualMobileMSRTests: ITestCase[] = []; + +const tc = { + name: `CashReplaceDualMobileMSR`, + tags: ['@E2E', '@CashReplaceDualMobileMSR', '@test_report', '@CASH'], + testData: CashReplaceDualMobileMSRData +}; +cashReplaceDualMobileMSRTests.push(tc); + +export default cashReplaceDualMobileMSRTests; \ No newline at end of file diff --git a/playwright-tests/tests/CashReplaceDualNonMSRInshop.ts b/playwright-tests/tests/CashReplaceDualNonMSRInshop.ts new file mode 100644 index 000000000..8abea0f00 --- /dev/null +++ b/playwright-tests/tests/CashReplaceDualNonMSRInshop.ts @@ -0,0 +1,82 @@ +//Imports here +import { ITestData, getDefaultExperimentsData } from 'framework/TestData' +import { ServicePackage, PaymentType, PartQuestionType, ServiceLocation } from 'safelite-playwright-core'; +import { ITestCase } from '../framework/Typedefs' +import { VehicleLookupType } from 'safelite-playwright-core'; +import { getDefaultTestData, setFakerSeedFromTestName } from 'safelite-playwright-core'; +import { PaymentMethod } from 'framework/localTypes/Enums'; + +// Set the seed before generating any data +setFakerSeedFromTestName("CashReplaceDualNonMSRInshop"); + +// Now get the test data with the seeded faker +const CashReplaceDualMobileMSRData: Partial = { + ...getDefaultTestData(), // Get default data with current seed + + // CASH Client + paymentMethod: PaymentMethod.SelfPay, + + // Key feature: Premium package with Rain Defense + servicePackage: ServicePackage.Standard, + + // Flag for recalibration vehicle + isRecalVehicle: true, + + // Override customer details + customerDetails: { + ...getDefaultTestData().customerDetails!, + address: { + ...getDefaultTestData().customerDetails!.address, + postalCode: '43085' + // postalCode: '21237' + } + }, + + // override part questions + partQuestions: [ + { + partQuestionType: PartQuestionType.GeneralQuestion1, + isOnPage: true, + optionToSelect: 'Yes' + } + ], + + // Override vehicle details + vehicleDetails: { + ...getDefaultTestData().vehicleDetails!, + year: '2024', + make: 'Subaru', + model: 'Ascent', + style: '4 door utility', + vehicleLookupType: VehicleLookupType.Zip + }, + + mockFirstInshopCallNoSchedule: true, + + isMSRGlassPart: false, + isMSRZip: true, + + // Payment at service + paymentDetails: { + paymentType: PaymentType.PayAtService + }, + + // Flag for PIA disabled + isPIAEnabled: false, + + // Experiments + experiments: { + ...getDefaultExperimentsData() + } +} + +const cashReplaceDualNonMSRInshopTests: ITestCase[] = []; + +const tc = { + name: `CashReplaceDualNonMSRInshop`, + tags: ['@E2E', '@CashReplaceDualNonMSRInshop', '@test_report', '@CASH'], + testData: CashReplaceDualMobileMSRData +}; +cashReplaceDualNonMSRInshopTests.push(tc); + +export default cashReplaceDualNonMSRInshopTests; \ No newline at end of file diff --git a/playwright-tests/tests/CashReplaceGlassAddressLookupInshopAfterPay.ts b/playwright-tests/tests/CashReplaceGlassAddressLookupInshopAfterPay.ts index 50f885f96..6feb3c651 100644 --- a/playwright-tests/tests/CashReplaceGlassAddressLookupInshopAfterPay.ts +++ b/playwright-tests/tests/CashReplaceGlassAddressLookupInshopAfterPay.ts @@ -35,10 +35,10 @@ const cashReplaceGlassAddressLookupInshopAfterPayData: Partial = { // Override vehicle details vehicleDetails: { ...getDefaultTestData().vehicleDetails!, - year: '2013', - make: 'Hyundai', - model: 'Sonata', - style: '4 door sedan', + year: '2024', + make: 'Acura', + model: 'MDX', + style: '4 door utility', vehicleLookupType: VehicleLookupType.Address }, @@ -48,7 +48,7 @@ const cashReplaceGlassAddressLookupInshopAfterPayData: Partial = { // Experiments experiments: { ...getDefaultExperimentsData() - } + } } const cashReplaceGlassAddressLookupInshopAfterPayTests: ITestCase[] = []; diff --git a/playwright-tests/tests/CashReplaceMultiGlassPromoInshop.ts b/playwright-tests/tests/CashReplaceMultiGlassPromoInshop.ts index 89406bc29..c0ca40afa 100644 --- a/playwright-tests/tests/CashReplaceMultiGlassPromoInshop.ts +++ b/playwright-tests/tests/CashReplaceMultiGlassPromoInshop.ts @@ -35,9 +35,12 @@ const cashReplaceMultiGlassPromoInshopData: Partial = { make: 'Subaru', model: 'Outback', style: '4 door station wagon', - vin: '4S4BSENC4K3221004', - vehicleLookupType: VehicleLookupType.Vin + // vin: '4S4BSENC4K3221004', + vehicleLookupType: VehicleLookupType.Zip }, + + // Special flag to skip estimate page + isSkipEstimatePage: true, // Key feature: multiple damaged glasses vehicleDamage: [ @@ -55,6 +58,15 @@ const cashReplaceMultiGlassPromoInshopData: Partial = { // Add promo code promoCode: '20CALL', }, + + // override part questions + partQuestions: [ + { + partQuestionType: PartQuestionType.GeneralQuestion1, + isOnPage: true, + optionToSelect: 'Yes' + } + ], // Vehicle part questions for multiple glass parts vehiclePartQuestions: [ @@ -62,7 +74,7 @@ const cashReplaceMultiGlassPromoInshopData: Partial = { partQuestionType: PartQuestionType.WindshieldColor, isOnPage: true, optionToSelect: 'Green Tint, Blue Shade', - secondaryQuestionOptionToSelect: 'solar, lane departure warning system, heated glass wiper park, high beam assist, soundproofing' + secondaryQuestionOptionToSelect: 'solar, lane departure warning system, hwp, high beam assist, soundproofing' }, { partQuestionType: PartQuestionType.DriverFrontColor, diff --git a/playwright-tests/tests/CashReplaceMultiSlidingGlassDropoff.ts b/playwright-tests/tests/CashReplaceMultiSlidingGlassDropoff.ts index c687861a8..67b8ab76e 100644 --- a/playwright-tests/tests/CashReplaceMultiSlidingGlassDropoff.ts +++ b/playwright-tests/tests/CashReplaceMultiSlidingGlassDropoff.ts @@ -85,7 +85,7 @@ const cashReplaceMultiSlidingGlassDropoffData: Partial = { partQuestionType: PartQuestionType.WindshieldColor, isOnPage: true, optionToSelect: 'Green Tint', - secondaryQuestionOptionToSelect: 'rain sensor, solar, soundproofing, third visor frit, lane departure warning system, heated glass wiper park, w/combination bracket' + secondaryQuestionOptionToSelect: 'rain sensor, solar, soundproofing, third visor frit, lane departure warning system, hwp, w/combination bracket' }, { partQuestionType: PartQuestionType.PassengerFrontColor, diff --git a/playwright-tests/tests/CashReplaceStaticInshop.ts b/playwright-tests/tests/CashReplaceStaticInshop.ts index 107b625a1..f7304ca46 100644 --- a/playwright-tests/tests/CashReplaceStaticInshop.ts +++ b/playwright-tests/tests/CashReplaceStaticInshop.ts @@ -15,19 +15,26 @@ const CashReplaceStaticInshopData: Partial = { // CASH Client paymentMethod: PaymentMethod.SelfPay, - + // Key feature: Premium package with Rain Defense servicePackage: ServicePackage.Standard, - + // Flag for recalibration vehicle isRecalVehicle: true, - + + // Flag for MSR Glass Part + isMSRGlassPart: true, + + // Flag for MSR Zip + isMSRZip: false, + // Override customer details customerDetails: { ...getDefaultTestData().customerDetails!, address: { ...getDefaultTestData().customerDetails!.address, - postalCode: '43085' + postalCode: '55113' // Non MSR zip + // postalCode: '21237' } }, @@ -37,34 +44,32 @@ const CashReplaceStaticInshopData: Partial = { partQuestionType: PartQuestionType.GeneralQuestion1, isOnPage: true, optionToSelect: 'Yes' - }, - { - partQuestionType: PartQuestionType.GeneralQuestion2, - isOnPage: true, - optionToSelect: 'Yes' } ], - + + // Override vehicle details vehicleDetails: { ...getDefaultTestData().vehicleDetails!, - year: '2022', - make: 'Mazda', - model: 'CX-9', - style: '4 door utility', - vin: '3FA6P0HD8LR234510', + year: '2023', + make: 'Hyundai', + model: 'Elantra', + style: '4 door sedan', vehicleLookupType: VehicleLookupType.Zip }, mockFirstInshopCallNoSchedule: true, - + // No need to override vehicleDamage as it already defaults to WindshieldCrack - + // Payment at service paymentDetails: { paymentType: PaymentType.PayAtService }, + // Flag for PIA disabled + isPIAEnabled: false, + // Experiments experiments: { ...getDefaultExperimentsData() @@ -75,7 +80,7 @@ const cashReplaceStaticInshopTests: ITestCase[] = []; const tc = { name: `CashReplaceStaticInshop`, - tags: ['@E2E','@CashReplaceStaticInshop', '@test_report', '@CASH'], + tags: ['@E2E', '@CashReplaceStaticInshop', '@test_report', '@CASH'], testData: CashReplaceStaticInshopData }; cashReplaceStaticInshopTests.push(tc); diff --git a/playwright-tests/tests/CashReplaceStaticMobileMSR.ts b/playwright-tests/tests/CashReplaceStaticMobileMSR.ts new file mode 100644 index 000000000..f2839e101 --- /dev/null +++ b/playwright-tests/tests/CashReplaceStaticMobileMSR.ts @@ -0,0 +1,92 @@ +//Imports here +import { ITestData, getDefaultExperimentsData } from 'framework/TestData' +import { ServicePackage, PaymentType, PartQuestionType, ServiceLocation } from 'safelite-playwright-core'; +import { ITestCase } from '../framework/Typedefs' +import { VehicleLookupType } from 'safelite-playwright-core'; +import { getDefaultTestData, setFakerSeedFromTestName } from 'safelite-playwright-core'; +import { PaymentMethod } from 'framework/localTypes/Enums'; + +// Set the seed before generating any data +setFakerSeedFromTestName("CashReplaceStaticMobileMSR"); + +// Now get the test data with the seeded faker +const CashReplaceStaticMobileMSRData: Partial = { + ...getDefaultTestData(), // Get default data with current seed + + // CASH Client + paymentMethod: PaymentMethod.SelfPay, + + // Key feature: Premium package with Rain Defense + servicePackage: ServicePackage.Standard, + + // Flag for recalibration vehicle + isRecalVehicle: true, + + // Override customer details + customerDetails: { + ...getDefaultTestData().customerDetails!, + address: { + ...getDefaultTestData().customerDetails!.address, + postalCode: '43085' + // postalCode: '21237' + } + }, + + // override part questions + partQuestions: [ + { + partQuestionType: PartQuestionType.GeneralQuestion1, + isOnPage: true, + optionToSelect: 'Yes' + } + ], + + // Override vehicle details + vehicleDetails: { + ...getDefaultTestData().vehicleDetails!, + year: '2023', + make: 'Hyundai', + model: 'Elantra', + style: '4 door sedan', + vin: '3FA6P0HD8LR234510', + vehicleLookupType: VehicleLookupType.Zip + }, + + mockFirstInshopCallNoSchedule: true, + + // No need to override vehicleDamage as it already defaults to WindshieldCrack + // Override appointment details + appointmentDetails: { + serviceLocation: ServiceLocation.Mobile, + appointmentDate: getDefaultTestData().appointmentDetails?.appointmentDate, + serviceAddress: { + // Use street address from current faker seed + street: "649 High Street", + city: 'Worthington', + state: 'OH', + postalCode: '43085', // + country: 'United States' + }, + }, + + // Payment at service + paymentDetails: { + paymentType: PaymentType.PayAtService + }, + + // Experiments + experiments: { + ...getDefaultExperimentsData() + } +} + +const cashReplaceStaticMobileMSRTests: ITestCase[] = []; + +const tc = { + name: `cashReplaceStaticMobileMSR`, + tags: ['@E2E','@cashReplaceStaticMobileMSR', '@test_report', '@CASH'], + testData: CashReplaceStaticMobileMSRData +}; +cashReplaceStaticMobileMSRTests.push(tc); + +export default cashReplaceStaticMobileMSRTests; \ No newline at end of file diff --git a/playwright-tests/tests/CashReplaceSwitchToInsuranceProgressiveNoComp.ts b/playwright-tests/tests/CashReplaceSwitchToInsuranceProgressiveNoComp.ts index 98c965b0c..7261cc238 100644 --- a/playwright-tests/tests/CashReplaceSwitchToInsuranceProgressiveNoComp.ts +++ b/playwright-tests/tests/CashReplaceSwitchToInsuranceProgressiveNoComp.ts @@ -37,6 +37,8 @@ const cashReplaceSwitchToInsuranceProgressiveNoCompData: Partial = { style: "4 door sedan" }, + isSkipEstimatePage: true, + partQuestions: [ { partQuestionType: PartQuestionType.GeneralQuestion1, diff --git a/playwright-tests/tests/InsuranceUSAAMsr.ts b/playwright-tests/tests/InsuranceUSAAMsr.ts new file mode 100644 index 000000000..052fdc387 --- /dev/null +++ b/playwright-tests/tests/InsuranceUSAAMsr.ts @@ -0,0 +1,101 @@ +//Imports here +import { ITestData, getDefaultExperimentsData } from 'framework/TestData' +import { ServiceLocation, DamageType, PartQuestionType, VehicleDamage, PaymentType, Flow } from 'safelite-playwright-core'; +import { PaymentMethod } from "framework/localTypes/Enums"; +import { ITestCase } from '../framework/Typedefs' +import { VehicleLookupType } from 'safelite-playwright-core'; +import { getDefaultTestData, setFakerSeedFromTestName } from 'safelite-playwright-core'; + +// Set the seed based on test name for consistent but unique data +setFakerSeedFromTestName("InsuranceUSAAMsr"); + +// Now get the test data with the seeded faker +const insuranceUSAAMsrData: Partial = { + ...getDefaultTestData(), // Get default data with current seed + + // Key feature: Insurance flow with Acuity + paymentMethod: PaymentMethod.Insurance, + + // Insurance claim flags + isDuplicateClaim: true, + flow: Flow.Managed, + isUseVehicleOnPolicy: true, + + // Override customer details for Kentucky location + customerDetails: { + ...getDefaultTestData().customerDetails!, + address: { + street: getDefaultTestData().customerDetails!.address.street, + city: 'Cleaveland', + state: 'Ohio', + postalCode: '44125', + country: 'United States' + } + }, + + // Insurance claim details + claimDetails: { + client: 'USAA', + policyNumber: 'MOCK900040MSR', + policyDeductible: 100.00, + damageDate: new Date(new Date().setDate(new Date().getDate() - 1)).toLocaleDateString('en-US', {month: '2-digit', day: '2-digit', year: 'numeric'}), + damageCause: DamageType.Rock + }, + + // Heavy duty truck details with VIN lookup + vehicleDetails: { + ...getDefaultTestData().vehicleDetails!, + year: '2023', + make: 'Hyundai', + model: 'Elantra', + style: '4 door sedan' + }, + + isRecalVehicle: true, + + // No need to override vehicleDamage as it already defaults to WindshieldCrack + + // Override for mobile service + appointmentDetails: { + serviceLocation: ServiceLocation.Mobile, + appointmentDate: getDefaultTestData().appointmentDetails?.appointmentDate, + serviceAddress: { + // Use street address from current faker seed + street: "13300 Carpenter Rd", + city: 'Cleveland', + state: 'OH', + postalCode: '44125', + country: 'United States' + } + }, + + // Part questions for windshield + partQuestions: [ + { + partQuestionType: PartQuestionType.GeneralQuestion1, + isOnPage: true, + optionToSelect: 'Yes' + }, + ], + + // Override payment details (empty because we skip payment method page in insurance flow) + paymentDetails: { + paymentType: PaymentType.PayAtService + }, + + // Experiments + experiments: { + ...getDefaultExperimentsData() + } +} + +const insuranceUSAAMsrTests: ITestCase[] = []; + +const tc = { + name: `InsuranceUSAAMsr`, + tags: ['@E2E','@InsuranceAcuityPaypal', '@test_report', '@Insurance', '@CASH-1187', '@CASH-848'], + testData: insuranceUSAAMsrData +}; +insuranceUSAAMsrTests.push(tc); + +export default insuranceUSAAMsrTests; \ No newline at end of file From 003ae8edd40d8275cb17ee51f1a914ac9776eacb Mon Sep 17 00:00:00 2001 From: Minojhini Valaiyapathi Date: Tue, 5 May 2026 09:53:43 -0400 Subject: [PATCH 13/14] CASH-2576 - Reverting the changes back from v2 to v1 endpoint for validateZip --- src/layouts/address-lookup/address-lookup.vue | 1 - src/layouts/capability-questions/capability-questions.vue | 2 -- src/layouts/license-plate-lookup/license-plate-lookup.vue | 1 - src/layouts/molding-questions/molding-questions.vue | 2 -- src/layouts/part-questions/part-questions.vue | 2 -- src/layouts/schedule/schedule.vue | 1 - src/layouts/service-zip/service-zip.vue | 3 --- src/layouts/vehicle-damage/vehicle-damage.vue | 2 -- src/layouts/vehicle/vehicle.vue | 1 - src/layouts/vin-lookup/vin-lookup.vue | 2 -- src/mixins/base-mixin.js | 1 - src/router/methods/helpers/initialize-from-querystrings.js | 1 - src/router/methods/route-logic/vehicle.js | 1 - src/store/index.js | 4 +--- 14 files changed, 1 insertion(+), 23 deletions(-) diff --git a/src/layouts/address-lookup/address-lookup.vue b/src/layouts/address-lookup/address-lookup.vue index a7e1f6bca..081be8def 100644 --- a/src/layouts/address-lookup/address-lookup.vue +++ b/src/layouts/address-lookup/address-lookup.vue @@ -421,7 +421,6 @@ export default { state: resultMap.serviceZipValidationResponse.state, zipCode: this.serviceZipCode, zipCodeCtu: resultMap.serviceZipValidationResponse.zipCodeCtu, - providerNumber: resultMap.serviceZipValidationResponse.providerNumber, }, false ); diff --git a/src/layouts/capability-questions/capability-questions.vue b/src/layouts/capability-questions/capability-questions.vue index 659c8bdc1..c4f5df92c 100644 --- a/src/layouts/capability-questions/capability-questions.vue +++ b/src/layouts/capability-questions/capability-questions.vue @@ -73,8 +73,6 @@ export default { zipCode: store.getters.externalParameterServiceZip.zipCode, state: null, zipCodeCtu: null, - providerNumber: - store.getters.externalParameterServiceZip.providerNumber, }, false ); diff --git a/src/layouts/license-plate-lookup/license-plate-lookup.vue b/src/layouts/license-plate-lookup/license-plate-lookup.vue index 730d6b4f2..a1477a664 100644 --- a/src/layouts/license-plate-lookup/license-plate-lookup.vue +++ b/src/layouts/license-plate-lookup/license-plate-lookup.vue @@ -360,7 +360,6 @@ export default { state: resultMap.serviceZipValidationResponse.state, zipCode: this.serviceZipCode, zipCodeCtu: resultMap.serviceZipValidationResponse.zipCodeCtu, - providerNumber: resultMap.serviceZipValidationResponse.providerNumber, }, false ); diff --git a/src/layouts/molding-questions/molding-questions.vue b/src/layouts/molding-questions/molding-questions.vue index 268f7356c..a7f4900de 100644 --- a/src/layouts/molding-questions/molding-questions.vue +++ b/src/layouts/molding-questions/molding-questions.vue @@ -73,8 +73,6 @@ export default { zipCode: store.getters.externalParameterServiceZip.zipCode, state: null, zipCodeCtu: null, - providerNumber: - store.getters.externalParameterServiceZip.providerNumber, }, false ); diff --git a/src/layouts/part-questions/part-questions.vue b/src/layouts/part-questions/part-questions.vue index 800fed21d..958a38095 100644 --- a/src/layouts/part-questions/part-questions.vue +++ b/src/layouts/part-questions/part-questions.vue @@ -75,8 +75,6 @@ export default { zipCode: store.getters.externalParameterServiceZip.zipCode, state: serviceState ?? null, zipCodeCtu: serviceZipCtu ?? null, - providerNumber: - store.getters.externalParameterServiceZip.providerNumber, }, false ); diff --git a/src/layouts/schedule/schedule.vue b/src/layouts/schedule/schedule.vue index 002440ec3..6f2db110b 100644 --- a/src/layouts/schedule/schedule.vue +++ b/src/layouts/schedule/schedule.vue @@ -1810,7 +1810,6 @@ export default { zipCode: newZipCode.zipCode, state: newZipCode.state, zipCodeCtu: newZipCode.zipCodeCtu, - providerNumber: newZipCode.providerNumber, }, false ); diff --git a/src/layouts/service-zip/service-zip.vue b/src/layouts/service-zip/service-zip.vue index 47538cbd9..c82a0a0e3 100644 --- a/src/layouts/service-zip/service-zip.vue +++ b/src/layouts/service-zip/service-zip.vue @@ -135,8 +135,6 @@ export default { zipCode: store.getters.externalParameterServiceZip.zipCode, state: null, zipCodeCtu: null, - providerNumber: - store.getters.externalParameterServiceZip.providerNumber, }, false ); @@ -248,7 +246,6 @@ export default { zipCode: this.serviceZipCode, state: zipCodeData.state, zipCodeCtu: zipCodeData.zipCodeCtu, - providerNumber: zipCodeData.providerNumber, }, false ); diff --git a/src/layouts/vehicle-damage/vehicle-damage.vue b/src/layouts/vehicle-damage/vehicle-damage.vue index 487c3ee05..e68598bd4 100644 --- a/src/layouts/vehicle-damage/vehicle-damage.vue +++ b/src/layouts/vehicle-damage/vehicle-damage.vue @@ -184,8 +184,6 @@ export default { zipCode: store.getters.externalParameterServiceZip.zipCode, state: null, zipCodeCtu: null, - providerNumber: - store.getters.externalParameterServiceZip.providerNumber, }, false ); diff --git a/src/layouts/vehicle/vehicle.vue b/src/layouts/vehicle/vehicle.vue index b6ddc1bb9..5c80694bf 100644 --- a/src/layouts/vehicle/vehicle.vue +++ b/src/layouts/vehicle/vehicle.vue @@ -525,7 +525,6 @@ export default { zipCode: this.serviceZipCode, state: zipCodeData.state, zipCodeCtu: zipCodeData.zipCodeCtu, - providerNumber: zipCodeData.providerNumber, }, false ); diff --git a/src/layouts/vin-lookup/vin-lookup.vue b/src/layouts/vin-lookup/vin-lookup.vue index 74bc0e11e..ae80f670f 100644 --- a/src/layouts/vin-lookup/vin-lookup.vue +++ b/src/layouts/vin-lookup/vin-lookup.vue @@ -380,7 +380,6 @@ export default { state: resultMap.zipCodeData.state, zipCode: this.serviceZipCode, zipCodeCtu: resultMap.zipCodeData.zipCodeCtu, - providerNumber: resultMap.zipCodeData.providerNumber, }, false ); @@ -402,7 +401,6 @@ export default { state: zipCodeData.state, zipCode: this.serviceZipCode, zipCodeCtu: zipCodeData.zipCodeCtu, - providerNumber: zipCodeData.providerNumber, }, false ); diff --git a/src/mixins/base-mixin.js b/src/mixins/base-mixin.js index 24cb7949b..4ca139275 100644 --- a/src/mixins/base-mixin.js +++ b/src/mixins/base-mixin.js @@ -82,7 +82,6 @@ export default { isServiceable: serviceZipValidationResponse.data.isServiceable, state: serviceZipValidationResponse.data.state, zipCodeCtu: serviceZipValidationResponse.data.zipCodeCtu, - providerNumber: serviceZipValidationResponse.data.providerNumber, }; }, getTierOnePackagePrice(lineItems) { diff --git a/src/router/methods/helpers/initialize-from-querystrings.js b/src/router/methods/helpers/initialize-from-querystrings.js index 95cbad6fc..4d342cdc0 100644 --- a/src/router/methods/helpers/initialize-from-querystrings.js +++ b/src/router/methods/helpers/initialize-from-querystrings.js @@ -147,7 +147,6 @@ function resetStoreForExternalParameter() { state: null, zipCode: null, zipCodeCtu: null, - providerNumber: null, }); store.dispatch(storeActions.SAVE_EMAIL, null); store.dispatch(storeActions.RESET_DAMAGE_STATE_AND_DEPENDENCIES); diff --git a/src/router/methods/route-logic/vehicle.js b/src/router/methods/route-logic/vehicle.js index 7221ef275..e7ff41fc0 100644 --- a/src/router/methods/route-logic/vehicle.js +++ b/src/router/methods/route-logic/vehicle.js @@ -30,7 +30,6 @@ export async function vehicleBeforeEnter(to, from) { zipCode: newZipFromQuerystring, state: zipData.state, zipCodeCtu: zipData.zipCodeCtu, - providerNumber: zipData.providerNumber, }); } } diff --git a/src/store/index.js b/src/store/index.js index b397218f7..de95a5dda 100644 --- a/src/store/index.js +++ b/src/store/index.js @@ -432,7 +432,6 @@ export const mutations = { state.order.serviceLocation.state = serviceZipInfo.state; state.order.serviceLocation.zipCode = serviceZipInfo.zipCode; state.order.serviceLocation.zipCodeCtu = serviceZipInfo.zipCodeCtu; - state.order.serviceLocation.providerNumber = serviceZipInfo.providerNumber; }, updateServiceLocation(state, serviceLocationInfo) { state.order.serviceLocation.address = serviceLocationInfo.address; @@ -3404,8 +3403,7 @@ export const actions = { { payload: { parentAccountNumber = context.getters.order.payment.parentAccountNumber, - providerNumber = context.getters.order.serviceLocation.providerNumber || - context.getters.order.serviceLocation.zipCodeCtu, + providerNumber = context.getters.order.serviceLocation.zipCodeCtu, isItac = context.getters.order.policy.isItac, }, pageNameToLog, From 7f3376c131e2b8a0b5b6479cecfc28aa77915fc1 Mon Sep 17 00:00:00 2001 From: Minojhini Valaiyapathi Date: Tue, 5 May 2026 09:55:45 -0400 Subject: [PATCH 14/14] CASH-2576 - reverted back to v1 for ValidateZip --- src/constants/endpoints.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/constants/endpoints.js b/src/constants/endpoints.js index b2c7b4821..efb32ffc6 100644 --- a/src/constants/endpoints.js +++ b/src/constants/endpoints.js @@ -141,7 +141,7 @@ const endpoints = { method: "POST", }, ValidateZip: { - url: "/location/api/v2/location/zip", + url: "/location/api/v1/location/zip", method: "GET", }, PriceOrderItems: {