From e964fc4009b1d6137de3f64462dafdf40b9aa780 Mon Sep 17 00:00:00 2001 From: Matt Sykes Date: Mon, 13 Apr 2026 15:51:33 -0400 Subject: [PATCH 1/5] Undoing this change as based on local behavior Unsure if this change should have been made so backing it out. Doing this made local 2.0 to fixmyglassdev work right but those two domains wouldn't share cookies and Mark thought the behavior to say null in the query string could have been intentional at one time. Best case this is part of why the fix didn't work in an actual environment although the logic to stop infinite redirect loops works, so that's a positive! Could end up its necessary to put back but there's no justification for it at this time, so better not to make it. --- src/helpers/heritage-integration/navigation-helper.js | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/helpers/heritage-integration/navigation-helper.js b/src/helpers/heritage-integration/navigation-helper.js index cfd06af2c..539d36648 100644 --- a/src/helpers/heritage-integration/navigation-helper.js +++ b/src/helpers/heritage-integration/navigation-helper.js @@ -25,9 +25,9 @@ export async function navigateToHeritageFunnel({ shouldSaveSession, pageNameToLo } var heritageParms = { - corid: store.getters.order.referralCorrelationId ?? "", + corid: store.getters.order.referralCorrelationId, src: "concept-funnel", - conceptsqid: store.getters.applicationUser.savedSessionId ?? "", + conceptsqid: store.getters.applicationUser.savedSessionId, isInsurance: store.getters.payment.isInsurance, }; From b5e5e92af24165fa2258d1ee544363e2757ed3f7 Mon Sep 17 00:00:00 2001 From: Minojhini Valaiyapathi Date: Wed, 15 Apr 2026 09:46:01 -0400 Subject: [PATCH 2/5] CASH-2510 - pointed get-supporting items endpoint to v2 parts api and passed in providernumber and facilitytype as they are mandatory --- src/constants/endpoints.js | 2 +- src/store/index.js | 4 ++++ 2 files changed, 5 insertions(+), 1 deletion(-) diff --git a/src/constants/endpoints.js b/src/constants/endpoints.js index bc5acba98..ec8ab4c86 100644 --- a/src/constants/endpoints.js +++ b/src/constants/endpoints.js @@ -81,7 +81,7 @@ const endpoints = { method: "GET", }, GetSupportingItems: { - url: "/parts/api/v1/parts/supporting-items", + url: "/parts/api/v2/parts/supporting-items", method: "POST", }, GetRecalPart: { diff --git a/src/store/index.js b/src/store/index.js index cce36cf8a..da45f3a61 100644 --- a/src/store/index.js +++ b/src/store/index.js @@ -2124,6 +2124,7 @@ export const actions = { const carId = context.getters.vehicle.carId; const isRepair = context.getters.damage.isRepair; const numberOfChips = context.getters.damage.numberOfChips; + const apptType = context.getters.order?.serviceLocation?.appointmentType; return globalMethods.callHttpClient({ method: endpoints.GetSupportingItems.method, @@ -2134,6 +2135,9 @@ export const actions = { parentAccountNumber: applicationConfig.CASH_PARENT_ACCOUNT_NUMBER, parts: glassPartsArray, numberOfRepairChips: isRepair ? numberOfChips : 0, + providerNumber: context.getters.order.serviceLocation.zipCodeCtu, + facilityType: + apptType && apptType.trim() !== "" ? apptType : AppointmentTypeStrings.IN_SHOP, }, logApiCall: true, pageNameToLog: pageNameToLog, From 7da3cc2cd0178556c73d0a80aa508dc310ba91ca Mon Sep 17 00:00:00 2001 From: Matt Sykes Date: Wed, 15 Apr 2026 17:14:25 -0400 Subject: [PATCH 3/5] Set conceptsqid to empty string as Heritage has no checks on that Heritage is trying to convert any non-null non-empty value to a guid and this causes a failure if "null" is sent as the value as its setting to the string "null". --- src/helpers/heritage-integration/navigation-helper.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/helpers/heritage-integration/navigation-helper.js b/src/helpers/heritage-integration/navigation-helper.js index 539d36648..a2b4452d5 100644 --- a/src/helpers/heritage-integration/navigation-helper.js +++ b/src/helpers/heritage-integration/navigation-helper.js @@ -27,7 +27,7 @@ export async function navigateToHeritageFunnel({ shouldSaveSession, pageNameToLo var heritageParms = { corid: store.getters.order.referralCorrelationId, src: "concept-funnel", - conceptsqid: store.getters.applicationUser.savedSessionId, + conceptsqid: store.getters.applicationUser.savedSessionId ?? "", isInsurance: store.getters.payment.isInsurance, }; From 780556bbda626e07b586d04be7bb11834873ee4a Mon Sep 17 00:00:00 2001 From: Matt Sykes Date: Thu, 16 Apr 2026 18:03:33 -0400 Subject: [PATCH 4/5] Handle exception on splitAddress and added unit tests Split address was not handling an address without any spaces in it and would throw a JS exception in a promise, which is a scenario we identified this release as not logging today (fix for 4/23). Chloe should review to see if we want to be even smarter with the parsing and actually split out cases like "123Test" to "123" "Test" but the fixes keep approximately the same logic as before except " 123 Test" now becomes "123" "Test". --- .../payment-adyen/payment-adyen.spec.js | 115 ++++++++++++++++++ src/layouts/payment-adyen/payment-adyen.vue | 13 +- 2 files changed, 121 insertions(+), 7 deletions(-) diff --git a/src/layouts/payment-adyen/payment-adyen.spec.js b/src/layouts/payment-adyen/payment-adyen.spec.js index 26d3a6aec..e45c27fa5 100644 --- a/src/layouts/payment-adyen/payment-adyen.spec.js +++ b/src/layouts/payment-adyen/payment-adyen.spec.js @@ -187,6 +187,121 @@ describe("payment-adyen.vue", () => { expect(result).toBe(true); }); }); + + describe("splitStreetAddress", () => { + const setInShopStreet = (streetAddress) => { + store.getters.order.serviceLocation.appointmentType = + AppointmentTypeStrings.IN_SHOP; + store.getters.order.serviceLocation.provider.address.streetAddress = + streetAddress; + }; + + test("splits typical address into first token as number and remainder as street", () => { + setInShopStreet("123 West Elm St"); + const wrapper = setupMocks({}); + + expect(wrapper.vm.splitStreetAddress).toEqual({ + number: "123", + street: "West Elm St", + }); + }); + + test("two tokens: number and single-word street", () => { + setInShopStreet("456 Oak"); + const wrapper = setupMocks({}); + + expect(wrapper.vm.splitStreetAddress).toEqual({ + number: "456", + street: "Oak", + }); + }); + + test("single token with no spaces: full string in number, empty street", () => { + setInShopStreet("123OakStreet"); + const wrapper = setupMocks({}); + + expect(wrapper.vm.splitStreetAddress).toEqual({ + number: "123OakStreet", + street: "", + }); + }); + + test("collapses multiple spaces between words", () => { + setInShopStreet("123 West Elm St"); + const wrapper = setupMocks({}); + + expect(wrapper.vm.splitStreetAddress).toEqual({ + number: "123", + street: "West Elm St", + }); + }); + + test("trims leading and trailing whitespace on full address", () => { + setInShopStreet(" 99 Maple Ave "); + const wrapper = setupMocks({}); + + expect(wrapper.vm.splitStreetAddress).toEqual({ + number: "99", + street: "Maple Ave", + }); + }); + + test("empty string yields empty number and street", () => { + setInShopStreet(""); + const wrapper = setupMocks({}); + + expect(wrapper.vm.splitStreetAddress).toEqual({ + number: "", + street: "", + }); + }); + + test("whitespace-only address yields empty number and street", () => { + setInShopStreet(" \t "); + const wrapper = setupMocks({}); + + expect(wrapper.vm.splitStreetAddress).toEqual({ + number: "", + street: "", + }); + }); + + test("null address yields empty number and street", () => { + setInShopStreet(null); + const wrapper = setupMocks({}); + + expect(wrapper.vm.splitStreetAddress).toEqual({ + number: "", + street: "", + }); + }); + + test("uses mobile service address when appointment is mobile", () => { + store.getters.order.serviceLocation.appointmentType = + AppointmentTypeStrings.MOBILE; + store.getters.order.serviceLocation.address = "700 Broadway Blvd"; + store.getters.order.serviceLocation.city = "Columbus"; + store.getters.order.serviceLocation.state = "OH"; + store.getters.order.serviceLocation.zipCode = "43235"; + + const wrapper = setupMocks({}); + + expect(wrapper.vm.splitStreetAddress).toEqual({ + number: "700", + street: "Broadway Blvd", + }); + }); + + test("splits on tabs and other whitespace runs", () => { + setInShopStreet("10\tPine\tLane"); + const wrapper = setupMocks({}); + + expect(wrapper.vm.splitStreetAddress).toEqual({ + number: "10", + street: "Pine Lane", + }); + }); + }); }); function setupMocks({ customMountOptions } = {}) { diff --git a/src/layouts/payment-adyen/payment-adyen.vue b/src/layouts/payment-adyen/payment-adyen.vue index bcb827623..aa75487da 100644 --- a/src/layouts/payment-adyen/payment-adyen.vue +++ b/src/layouts/payment-adyen/payment-adyen.vue @@ -516,15 +516,14 @@ export default { }, splitStreetAddress() { - const address = this.locationInfo.address; - const tokens = address.split(" ") ?? [""]; - const number = tokens[0]; - - const street = tokens.slice(1).reduce((prev, next) => `${prev} ${next}`); + const address = (this.locationInfo?.address ?? "").trim(); + const tokens = address.length ? address.split(/\s+/) : [""]; + const number = tokens[0] ?? ""; + const street = tokens.length > 1 ? tokens.slice(1).join(" ") : ""; return { - number: number ?? "", - street: street ?? "", + number, + street, }; }, From 591b2ef0895dbf300eb71757066648bcaf6a4ca1 Mon Sep 17 00:00:00 2001 From: Matt Sykes Date: Fri, 17 Apr 2026 09:02:50 -0400 Subject: [PATCH 5/5] Prettier formatting --- src/layouts/payment-adyen/payment-adyen.spec.js | 9 +++------ 1 file changed, 3 insertions(+), 6 deletions(-) diff --git a/src/layouts/payment-adyen/payment-adyen.spec.js b/src/layouts/payment-adyen/payment-adyen.spec.js index e45c27fa5..1a506b860 100644 --- a/src/layouts/payment-adyen/payment-adyen.spec.js +++ b/src/layouts/payment-adyen/payment-adyen.spec.js @@ -190,10 +190,8 @@ describe("payment-adyen.vue", () => { describe("splitStreetAddress", () => { const setInShopStreet = (streetAddress) => { - store.getters.order.serviceLocation.appointmentType = - AppointmentTypeStrings.IN_SHOP; - store.getters.order.serviceLocation.provider.address.streetAddress = - streetAddress; + store.getters.order.serviceLocation.appointmentType = AppointmentTypeStrings.IN_SHOP; + store.getters.order.serviceLocation.provider.address.streetAddress = streetAddress; }; test("splits typical address into first token as number and remainder as street", () => { @@ -277,8 +275,7 @@ describe("payment-adyen.vue", () => { }); test("uses mobile service address when appointment is mobile", () => { - store.getters.order.serviceLocation.appointmentType = - AppointmentTypeStrings.MOBILE; + store.getters.order.serviceLocation.appointmentType = AppointmentTypeStrings.MOBILE; store.getters.order.serviceLocation.address = "700 Broadway Blvd"; store.getters.order.serviceLocation.city = "Columbus"; store.getters.order.serviceLocation.state = "OH";