Merge pull request #1295 from Safelite/rlsmerge/2026.07.16-to-develop

Rlsmerge/2026.07.16 to develop
This commit is contained in:
Jeremy-Z 2026-07-10 10:17:36 -04:00 committed by GitHub
commit 240b85310d
No known key found for this signature in database
GPG key ID: B5690EEEBB952194
3 changed files with 110 additions and 0 deletions

View file

@ -28,6 +28,7 @@ import coverageStatuses from '@/constants/coverage-statuses';
import coverageType from '@/constants/coverage-type';
import { AppointmentTypeStrings } from '@/constants/schedule-constants';
import { useMainStore } from '@/store';
import BailoutCode from '@/constants/bailoutCode';
function pushToDataLayerIfDefined(data) {
if (window.dataLayer !== undefined) {
@ -448,6 +449,19 @@ export default {
const issConfig = store.issConfig;
const applicationUser = store.applicationUser;
// Bailout info for analytics. We use combined string to send to analytics - BailoutCode_BailoutString - ex: 15_ApiError
const bailoutCode = store.bailoutCode;
let bailoutCombinedString = "";
try {
if (bailoutCode !== null && bailoutCode !== undefined) {
const bailoutString =
Object.keys(BailoutCode).find((key) => BailoutCode[key] === bailoutCode) ?? "";
bailoutCombinedString = bailoutString ? `${bailoutCode}_${bailoutString}` : `${bailoutCode}`;
}
} catch (error) {
// Do not let error here stop logging.
}
// Use parentaccount on order, use parentaccount on issconfig as fallback.
const parentAccountNumber = (order.parentAccountNumber ?? issConfig.parentAccountNumber).toString();
@ -563,6 +577,8 @@ export default {
sessionData.userAgent = navigator.userAgent;
sessionData.bailoutCodeValue = bailoutCombinedString;
store.logIssSessionData(sessionData);
},

View file

@ -105,6 +105,98 @@ describe('analyticsMixin.js', () => {
expect(expectedDataLayer).toEqual(expect.arrayContaining(window.dataLayer));
});
test('pushIssSessionData: logs session payload to store', () => {
// Arrange
const store = useMainStore();
const testCookieValue = {
sid: '10000000-0000-0000-0000-000000000001',
skey: '12345'
};
setupCookies({ ISSCookieValue: JSON.stringify(testCookieValue) });
store.bailoutCode = 15;
store.applicationUser.savedSessionId = 'saved-session-id';
store.applicationUser.pageData = {
quote: {
servicePackageSelected: 'BASIC_PACKAGE'
}
};
store.order.parentAccountNumber = 11111111;
store.order.vehicle = {
carId: 'CAR123',
year: '2020',
make: 'Toyota',
model: 'Camry',
style: 'SE',
vin: '1ABCDEFGH12345678'
};
store.order.damage = {
isRepair: false,
glassToReplace: [{ glassLocation: 'Windshield', glassName: 'Front' }]
};
store.order.lineItems = {
glassParts: [{ partNumber: 'GP1', partType: 'Glass', childParts: [] }],
supportingItems: [{ partNumber: 'SUP1', partType: 'Adas' }],
vaps: [{ partNumber: 'VAP1', partType: 'Vap' }]
};
store.order.schedule = { date: '2026-01-01', startTime: '09:00' };
store.order.serviceLocation = {
appointmentType: 'Mobile',
provider: {
address: {
zipCode: '43081',
zipCodeCtu: '43081'
}
},
zipCode: '43081',
zipCodeCtu: '43081'
};
store.order.contactInfo = {
notesForTechnician: 'note',
requestTextUpdates: true
};
store.order.payment = {
paymentMethod: 'Card',
nextGenSettledAmount: 100
};
store.order.insuranceCoverage = {
coverageStatus: 3,
coverageType: 1
};
store.order.eon = 'EON123';
store.order.referralNumber = 'R123';
store.order.referralSequenceNumber = '1';
store.order.referralDate = '2026-01-01';
store.order.workOrderNumber = 'WO123';
store.order.workOrderId = 'WOID123';
store.issConfig.parentAccountNumber = 99999999;
store.issConfig.billToAccountNumber = 'BILL123';
store.issConfig.clientName = 'Test Insurance';
store.currentDeductible = 250;
store.isVerified = true;
store.isNoComp = false;
store.isITAC = false;
const context = {
getPageNameByQueryString: jest.fn().mockReturnValue('duplicate-check')
};
// Act
analyticsMixin.methods.pushIssSessionData.call(context);
// Assert
expect(store.logIssSessionData).toHaveBeenCalledTimes(1);
expect(store.logIssSessionData).toHaveBeenCalledWith(expect.objectContaining({
currentPage: 'duplicate-check',
referralNumber: 'R123',
issSessionId: 'saved-session-id',
parentAccountNumber: '11111111',
hasVin: true,
damageType: 'Replace',
productType: expect.arrayContaining(['GP1-Glass', 'SUP1-Adas', 'VAP1-Vap', 'BASIC_PACKAGE'])
}));
});
test('Experiments, should push to dataLayer with default Google Custom Dimension Index', () => {
// Arrange
const store = useMainStore();

View file

@ -2819,6 +2819,7 @@ export const useMainStore = defineStore({
totalPrice,
userAgent,
cashPriceSubTotal,
bailoutCodeValue,
}
) {
var payload = {
@ -2870,6 +2871,7 @@ export const useMainStore = defineStore({
userAgent: userAgent,
cashPriceSubTotal: cashPriceSubTotal,
billToAccountNumber: billToAccountNumber,
bailoutCode: bailoutCodeValue,
};
return globalMethods.callHttpClient({