Merge pull request #1937 from Safelite/feature/Digital/CSR-1632

CSR-1632
This commit is contained in:
hiteshkumar87 2024-08-12 17:55:21 +05:30 committed by GitHub
commit 0d6152f9f2
No known key found for this signature in database
GPG key ID: B5690EEEBB952194
7 changed files with 73 additions and 2 deletions

View file

@ -30,6 +30,7 @@ const applicationConfig = {
OUTLOOK_CALENDAR:
"https://outlook.office.com/calendar/deeplink/compose?path=/calendar/action/compose&rru=addevent",
FRONTEND_LOGGER_PATH: "/analytics/api/v1/logging",
AFFILIATE_COOKIE_CONTAINING_NAME: "_Track",
};
export { applicationConfig };

View file

@ -111,6 +111,9 @@ const storeMutations = {
RESET_LEADGEN_SERVICEZIP_STATE: "resetLeadGenServiceZipState",
RESET_LEADGEN_QUOTE_STATE: "resetLeadGenQuoteState",
RESET_IS_LEADGEN: "resetIsLeadGen",
//Affiliate Cookies
UPDATE_AFFILIATE_COOKIES: "updateAffiliateCookies",
};
export { storeMutations };

View file

@ -210,6 +210,17 @@ export function refreshCookieExpiration(name, expirationTime) {
}
}
export function getAffiliateCookies() {
const affiliateCookies = [];
const cookieContainingName = applicationConfig.AFFILIATE_COOKIE_CONTAINING_NAME;
const affiliateCookiesAll = getCookiesContainingName(cookieContainingName);
affiliateCookiesAll?.forEach((cookieName) => {
const cookieValue = getCookieValueByName(cookieName);
affiliateCookies.push({ CookieName: cookieName, CookieValue: cookieValue });
});
return affiliateCookies;
}
/*
===========================
= PRIVATE FUNCTIONS =
@ -292,3 +303,15 @@ function getCookieValueByName(name) {
function isLocalhost() {
return location.hostname.includes("localhost");
}
function getCookiesContainingName(name) {
const allCookies = document.cookie.split(";");
const matchingCookies = [];
for (const cookie of allCookies) {
const [cookieName, cookieValue] = cookie.trim().split("=");
if (cookieName.includes(name)) {
matchingCookies.push(cookieName);
}
}
return matchingCookies;
}

View file

@ -11,9 +11,15 @@ import {
setSessionIdIfUnset,
isCookieSet,
refreshCookieExpiration,
getAffiliateCookies,
} from "@/helpers/heritage-integration/cookie-helper.js";
import { cookieNames } from "@/constants/cookie-names";
import { removeAllTestCookies, setupCookies, setupCrypto } from "@/helpers/unit-test-helper";
import {
removeAllTestCookies,
setupCookies,
setupCrypto,
setupAffiliateCookies,
} from "@/helpers/unit-test-helper";
import { deleteFunnelCookie } from "./cookie-helper";
const randomUUID = "68d89736-c277-46f1-8fee-c3dacdb23c08";
@ -431,3 +437,21 @@ describe("cookies", () => {
});
});
});
describe("getAffiliateCookies", () => {
it("should return an empty array if no affiliate cookies are found", () => {
setupAffiliateCookies({});
expect(getAffiliateCookies()).toEqual([]);
});
it("should return an array of affiliate cookies when they are present", () => {
setupAffiliateCookies({
CookieName: "affiliate_cookie1_Track",
CookieValue: "value_of_affiliate_cookie1",
});
const expectedCookies = [
{ CookieName: "affiliate_cookie1_Track", CookieValue: "value_of_affiliate_cookie1" },
];
expect(getAffiliateCookies()).toEqual(expectedCookies);
});
});

View file

@ -139,6 +139,10 @@ export function setupCookies({ funnelCookieValue = "", includeHeritageCookie = t
});
}
export function setupAffiliateCookies(cookie) {
setCookieProperties({ [cookie.CookieName]: cookie.CookieValue }, { isSecure: false });
}
export function setupCrypto(mockValue) {
global.crypto = {
randomUUID: jest.fn(),

View file

@ -18,6 +18,7 @@ import {
getFunnelCookie,
updateSessionIdCookie,
deleteFunnelCookie,
getAffiliateCookies,
} from "@/helpers/heritage-integration/cookie-helper";
import { loadSessionIfPresent, saveSession } from "@/helpers/heritage-integration/order-helper";
import {
@ -164,7 +165,11 @@ const routes = [
);
}
}
//Affiliate Cookies
const affiliateCookies = getAffiliateCookies();
if (affiliateCookies != null && affiliateCookies.length > 0) {
store.commit(storeMutations.UPDATE_AFFILIATE_COOKIES, affiliateCookies);
}
const loadSessionResponse = await loadSessionIfPresent(
to.query.isInsurance != null
? to.query.isInsurance == "true"

View file

@ -172,6 +172,7 @@ const getDefaultState = () => {
lastPageVisited: null,
experiments: [],
triggeredSiteEntry: false,
affiliateCookies: [],
},
};
};
@ -732,6 +733,9 @@ export const mutations = {
updateTriggeredSiteEntry(state, wasSiteEntryTriggered) {
state.applicationUser.triggeredSiteEntry = wasSiteEntryTriggered;
},
updateAffiliateCookies(state, affiliateCookies) {
state.applicationUser.affiliateCookies = affiliateCookies;
},
};
// Export Getters
@ -1809,6 +1813,8 @@ export const actions = {
// create a new array to avoid mutating state
const newGlassToReplace = convertGlassPieceNamingForApi(damage.glassToReplace);
//affiliate cookie save only when submitAfterSave
const affiliateCookies = submitAfterSave ? applicationUser.affiliateCookies : null;
return globalMethods.callHttpClient({
method: endpoints.SaveSession.method,
@ -1822,6 +1828,7 @@ export const actions = {
lastPage: applicationUser.lastPageVisited,
pageData: applicationUser.pageData,
savedSessionId: applicationUser.savedSessionId,
affiliateCookies: affiliateCookies,
},
order: {
vehicle: {
@ -2796,6 +2803,7 @@ export const actions = {
const submittedOrder = context.state.order;
const experiments = context.state.applicationUser.experiments;
const affiliateCookies = context.state.applicationUser.affiliateCookies;
// set to local storage
window.sessionStorage.setItem("submittedOrder", JSON.stringify(submittedOrder));
@ -2809,6 +2817,9 @@ export const actions = {
//restore user's experiments
context.commit(storeMutations.UPDATE_EXPERIMENTS, experiments);
//restore affiliate cookies
context.commit(storeMutations.UPDATE_AFFILIATE_COOKIES, affiliateCookies);
//clear leadGen session storage
window.sessionStorage.removeItem("leadGenState");
},