From e24f61e5f18df9d974a6c2dfbc750f8716c4b24a Mon Sep 17 00:00:00 2001 From: Katie Date: Wed, 30 Mar 2022 11:36:23 -0400 Subject: [PATCH 1/5] CSR-98 Use correct domain in cookie --- src/constants/application-config.js | 5 ++-- .../heritage-integration/cookie-helper.js | 26 +++++++++++++++---- .../heritage-integration/navigation-helper.js | 11 +++++--- .../heritage-integration/order-helper.spec.js | 9 ++++--- src/helpers/unit-test-helper.js | 24 ++++++++++++++--- vue.config.js | 1 - 6 files changed, 58 insertions(+), 18 deletions(-) diff --git a/src/constants/application-config.js b/src/constants/application-config.js index d427b1d72..f2e4c76ac 100644 --- a/src/constants/application-config.js +++ b/src/constants/application-config.js @@ -1,9 +1,10 @@ + const applicationConfig = { CONSUMER_APIGATEWAY_URL: process.env.VUE_APP_CONSUMER_API_GATEWAY, GOOGLE_PLACES_API_KEY: process.env.VUE_APP_GOOGLE_PLACES_API_KEY, - ANALYTICS_SESSION_TIMEOUT: 30, - SAVED_SESSION_TIMEOUT: 45 + ANALYTICS_SESSION_TIMEOUT: 30, SAVED_SESSION_TIMEOUT: 45, }; + export { applicationConfig }; diff --git a/src/helpers/heritage-integration/cookie-helper.js b/src/helpers/heritage-integration/cookie-helper.js index 9de5d5760..487c261b7 100644 --- a/src/helpers/heritage-integration/cookie-helper.js +++ b/src/helpers/heritage-integration/cookie-helper.js @@ -1,7 +1,6 @@ import { cookieNames } from "@/constants/cookie-names"; import store from "@/store"; - /* Will update the cookie if present, or create a new one if not. */ @@ -17,7 +16,7 @@ export function updateOrCreateConceptCookie() { }); // Create the cookie - document.cookie = `${cookieNames.CONCEPT_SESSION_INFO}={}; path=/`; + document.cookie = `${cookieNames.CONCEPT_SESSION_INFO}={}; domain=${getDomainWithoutSubdomain()}; path=/;`; // Set up cookie with all the props. setConceptCookieProperties({ @@ -37,11 +36,15 @@ export function updateOrCreateConceptCookie() { Returns null if cookie isn't valid JSON. */ export function getConceptCookie() { + console.log("getConceptCookie") + console.log(document.cookie) + console.log(location.hostname) + console.log(getDomainWithoutSubdomain()) const cookieJson = document.cookie ?.split("; ") ?.find(row => row.startsWith(`${cookieNames.CONCEPT_SESSION_INFO}=`)) ?.split("=")[1]; - + console.log(cookieJson) try { return JSON.parse(cookieJson); } catch (error) { @@ -53,7 +56,7 @@ export function getConceptCookie() { Removes concept cookie from browser. */ export function deleteConceptCookie() { - document.cookie = `${cookieNames.CONCEPT_SESSION_INFO}=; Max-Age=0; path=/; domain=${location.hostname}`; + document.cookie = `${cookieNames.CONCEPT_SESSION_INFO}=; Max-Age=0; domain=${getDomainWithoutSubdomain()}; path=/`; } /* @@ -71,8 +74,21 @@ function setConceptCookieProperties(properties) { const cookieValueJson = JSON.stringify(cookie); - document.cookie = `${cookieNames.CONCEPT_SESSION_INFO}=${cookieValueJson}; path=/`; + document.cookie = `${cookieNames.CONCEPT_SESSION_INFO}=${cookieValueJson}; domain=${getDomainWithoutSubdomain()}; path=/`; } } } +function getDomainWithoutSubdomain() { + let url = location.hostname; + if (url == "localhost") { + return "localhost"; + } + + const urlParts = url.split('.'); + + return `.${urlParts + .slice(0) + .slice(-(urlParts.length === 4 ? 3 : 2)) + .join('.')}`; +} diff --git a/src/helpers/heritage-integration/navigation-helper.js b/src/helpers/heritage-integration/navigation-helper.js index 20a4315bf..4b9da5572 100644 --- a/src/helpers/heritage-integration/navigation-helper.js +++ b/src/helpers/heritage-integration/navigation-helper.js @@ -1,7 +1,7 @@ import { queryStrings } from "@/constants/query-strings"; import { externalUrls } from "@/router/router-constants/externalUrl-values"; import { lazyLoadComponent } from "@/router/dynamic-routing/component-loader.js"; -import {saveOrder} from "@/helpers/heritage-integration/order-helper.js"; +import { saveOrder } from "@/helpers/heritage-integration/order-helper.js"; import store from "@/store"; import router from "@/router"; @@ -45,9 +45,11 @@ export async function getPageToRouteExistingOrderTo(toRoute = {}, existingHerita return 'vehicle-damage' } else { if (store.getters.vehicle.vin) { - return "vin-lookup"; + return "vehicle-damage"; + // return "vin-lookup"; } else { - return "estimate" + return "vehicle-damage"; + // return "estimate" } } @@ -67,6 +69,9 @@ export async function navigateToHeritageFunnel() { { corid: store.getters.order.referralCorrelationId, src: "concept-funnel", + // TODO CSR-28, remove this + cns: "all", + experiments: "RemoveServiceAreaPage=ServAreaRemoval_V7=ServAreaNoRemove_V7_TEST=true,ConceptFunnel=ConceptFunnel_V1=ConceptFunnel_TEST=true" } ); } \ No newline at end of file diff --git a/src/helpers/heritage-integration/order-helper.spec.js b/src/helpers/heritage-integration/order-helper.spec.js index 473e6c842..9d6b72f6e 100644 --- a/src/helpers/heritage-integration/order-helper.spec.js +++ b/src/helpers/heritage-integration/order-helper.spec.js @@ -19,7 +19,7 @@ describe("loadOrderIfPresent", () => { ShouldResetState: testShouldResetState } - document.cookie = `${cookieNames.ORDER_INFO}=${JSON.stringify(testCookieValue)}; path=/; domain=${location.hostname}`; + document.cookie = `${cookieNames.ORDER_INFO}=${JSON.stringify(testCookieValue)}; path=/; domain=.safelite.com`; // Act loadOrderIfPresent(); @@ -74,7 +74,6 @@ describe("loadOrderIfPresent", () => { }); describe("saveOrder", () => { - afterEach(() => { removeAllTestCookies(); }); @@ -113,7 +112,7 @@ describe("saveOrder", () => { }, false); }); - test("saveOrder => should update DidHeritageFunnelUpdateLast cookie value to false", async () => { + test.only("saveOrder => should update DidHeritageFunnelUpdateLast cookie value to false", async () => { // Arrange const testReferralNumber = 1566818; const testReferralDate = "2022-03-15T10:56:24.597"; @@ -139,8 +138,12 @@ describe("saveOrder", () => { DidHeritageFunnelUpdateLast: true } + console.log("A") + console.log(location.hostname) setupCookies({ conceptCookieValue: JSON.stringify(testCookieValue) }); + console.log(document.cookie) + // Act await saveOrder(); diff --git a/src/helpers/unit-test-helper.js b/src/helpers/unit-test-helper.js index 699c4f8e9..f95dc6f69 100644 --- a/src/helpers/unit-test-helper.js +++ b/src/helpers/unit-test-helper.js @@ -62,8 +62,8 @@ export const cookies = { export function removeAllTestCookies() { Object.keys(cookies).forEach(key => { - document.cookie = `${key}=;Max-Age=0;`; - document.cookie = `${key}=;Max-Age=0;path=/`; + document.cookie = `${key}=;Max-Age=0;domain=${getDomainWithoutSubdomain()};`; + document.cookie = `${key}=;Max-Age=0;domain=${getDomainWithoutSubdomain()};path=/`; }); } @@ -78,10 +78,11 @@ export function getMockOrderInfo(mockReferralNumber, mockCorrelationId, mockRefe export function setupCookies({ conceptCookieValue = "", includeHeritageCookie = true }) { Object.keys(cookies).forEach(key => { const cookieValue = key == cookieNames.CONCEPT_SESSION_INFO ? conceptCookieValue : cookies[key]; - if (includeHeritageCookie || key != cookieNames.CONCEPT_SESSION_INFO) - document.cookie = `${key}=${cookieValue}; path=/;`; + document.cookie = `${key}=${cookieValue}; domain=${getDomainWithoutSubdomain()}; path=/;`; }); + + console.log(document.cookie) } // Private methods @@ -100,4 +101,19 @@ function setupBaseMixinDispatchNonBlockingStoreAction(mockData) { } }); } +} + + +function getDomainWithoutSubdomain() { + let url = location.hostname; + if (url == "localhost") { + return "localhost"; + } + + const urlParts = url.split('.'); + + return `.${urlParts + .slice(0) + .slice(-(urlParts.length === 4 ? 3 : 2)) + .join('.')}`; } \ No newline at end of file diff --git a/vue.config.js b/vue.config.js index 7bca415e3..c3cf92368 100644 --- a/vue.config.js +++ b/vue.config.js @@ -2,7 +2,6 @@ process.env.VUE_APP_CONSUMER_API_GATEWAY = "https://consumerapidev.safelite.com"; process.env.VUE_APP_HERITAGE_FUNNEL = "http://localhost:38000/default.aspx"; - process.env.VUE_APP_GOOGLE_PLACES_API_KEY = "AIzaSyDptGCkOPgN2uWJOy4ou4M33phRD4MAoJo" From d6e935a2d851b1c5bb2ce8eb679087100308c386 Mon Sep 17 00:00:00 2001 From: Katie Date: Wed, 30 Mar 2022 11:40:32 -0400 Subject: [PATCH 2/5] CSR-98 Fix merge conflicts --- src/helpers/heritage-integration/cookie-helper.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/helpers/heritage-integration/cookie-helper.js b/src/helpers/heritage-integration/cookie-helper.js index daf51876b..d8cda8a67 100644 --- a/src/helpers/heritage-integration/cookie-helper.js +++ b/src/helpers/heritage-integration/cookie-helper.js @@ -45,7 +45,7 @@ export function getFunnelCookie() { /* Removes cookie from browser. */ -export function deleteConceptCookie() { +export function deleteFunnelCookie() { document.cookie = `${cookieNames.FUNNEL_SESSION_INFO}=; Max-Age=0; domain=${getDomainWithoutSubdomain()}; path=/`; } From 1e40e0e1f8e2582255d88e990d5a0c13a34e8347 Mon Sep 17 00:00:00 2001 From: Katie Date: Wed, 30 Mar 2022 13:11:42 -0400 Subject: [PATCH 3/5] CSR-98 Fix tests --- .../heritage-integration/cookie-helper.js | 10 +++++--- .../heritage-integration/order-helper.spec.js | 4 +--- src/helpers/unit-test-helper.js | 24 ++++--------------- 3 files changed, 12 insertions(+), 26 deletions(-) diff --git a/src/helpers/heritage-integration/cookie-helper.js b/src/helpers/heritage-integration/cookie-helper.js index d8cda8a67..18632fc51 100644 --- a/src/helpers/heritage-integration/cookie-helper.js +++ b/src/helpers/heritage-integration/cookie-helper.js @@ -6,7 +6,7 @@ import store from "@/store"; */ export function updateOrCreateFunnelCookie() { // Create the cookie - document.cookie = `${cookieNames.FUNNEL_SESSION_INFO}={}; domain=${getDomainWithoutSubdomain()}; path=/;`; + document.cookie = `${cookieNames.FUNNEL_SESSION_INFO}={}; path=/; ${getCookieDomainValue()};`; // Set up cookie with all the props. setFunnelCookieProperties({ @@ -46,7 +46,7 @@ export function getFunnelCookie() { Removes cookie from browser. */ export function deleteFunnelCookie() { - document.cookie = `${cookieNames.FUNNEL_SESSION_INFO}=; Max-Age=0; domain=${getDomainWithoutSubdomain()}; path=/`; + document.cookie = `${cookieNames.FUNNEL_SESSION_INFO}=; Max-Age=0; path=/; ${getCookieDomainValue()}`; } /* @@ -64,11 +64,15 @@ function setFunnelCookieProperties(properties) { const cookieValueJson = JSON.stringify(cookie); - document.cookie = `${cookieNames.FUNNEL_SESSION_INFO}=${cookieValueJson}; domain=${getDomainWithoutSubdomain()}; path=/`; + document.cookie = `${cookieNames.FUNNEL_SESSION_INFO}=${cookieValueJson}; path=/; ${getCookieDomainValue()}`; } } } +export function getCookieDomainValue() { + return location.hostname.includes("localhost") ? "" : `domain=${getDomainWithoutSubdomain()};`; +} + function getDomainWithoutSubdomain() { let url = location.hostname; if (url == "localhost") { diff --git a/src/helpers/heritage-integration/order-helper.spec.js b/src/helpers/heritage-integration/order-helper.spec.js index 5de25b6c0..382132bbe 100644 --- a/src/helpers/heritage-integration/order-helper.spec.js +++ b/src/helpers/heritage-integration/order-helper.spec.js @@ -132,7 +132,7 @@ describe("saveOrder", () => { }, false); }); - test.only("saveOrder => should update DidHeritageFunnelUpdateLast cookie value to false", async () => { + test("saveOrder => should update DidHeritageFunnelUpdateLast cookie value to false", async () => { // Arrange const testReferralNumber = 1566818; const testReferralDate = "2022-03-15T10:56:24.597"; @@ -160,8 +160,6 @@ describe("saveOrder", () => { setupCookies({ funnelCookieValue: JSON.stringify(testCookieValue) }); - console.log(document.cookie) - // Act await saveOrder(); diff --git a/src/helpers/unit-test-helper.js b/src/helpers/unit-test-helper.js index 13ef9d632..7b81cca00 100644 --- a/src/helpers/unit-test-helper.js +++ b/src/helpers/unit-test-helper.js @@ -5,6 +5,7 @@ import { vehicleCategories } from "@/constants/vehicle-categories.js"; import { fmgPageValues } from "@/router/router-constants/fmgPage-values"; import { cookieNames } from "@/constants/cookie-names"; import baseMixin from "@/mixins/base-mixin"; +import { getCookieDomainValue } from "@/helpers/heritage-integration/cookie-helper"; // Common methods export function getMountOptions(mockData) { @@ -62,8 +63,8 @@ export const cookies = { export function removeAllTestCookies() { Object.keys(cookies).forEach(key => { - document.cookie = `${key}=;Max-Age=0;domain=${getDomainWithoutSubdomain()};`; - document.cookie = `${key}=;Max-Age=0;domain=${getDomainWithoutSubdomain()};path=/`; + document.cookie = `${key}=;Max-Age=0;`; + document.cookie = `${key}=;Max-Age=0;path=/;${getCookieDomainValue()}`; }); } @@ -79,10 +80,8 @@ export function setupCookies({ funnelCookieValue = "", includeHeritageCookie = t Object.keys(cookies).forEach(key => { const cookieValue = key == cookieNames.FUNNEL_SESSION_INFO ? funnelCookieValue : cookies[key]; if (includeHeritageCookie || key != cookieNames.FUNNEL_SESSION_INFO) - document.cookie = `${key}=${cookieValue}; domain=${getDomainWithoutSubdomain()}; path=/;`; + document.cookie = `${key}=${cookieValue}; path=/; ${getCookieDomainValue()}`; }); - - console.log(document.cookie) } // Private methods @@ -101,19 +100,4 @@ function setupBaseMixinDispatchNonBlockingStoreAction(mockData) { } }); } -} - - -function getDomainWithoutSubdomain() { - let url = location.hostname; - if (url == "localhost") { - return "localhost"; - } - - const urlParts = url.split('.'); - - return `.${urlParts - .slice(0) - .slice(-(urlParts.length === 4 ? 3 : 2)) - .join('.')}`; } \ No newline at end of file From 5803b4dcbb7a0945830f1e0fce68adaff26562c4 Mon Sep 17 00:00:00 2001 From: Katie Date: Wed, 30 Mar 2022 13:15:51 -0400 Subject: [PATCH 4/5] CSR-98 Cleanup --- src/helpers/heritage-integration/cookie-helper.js | 8 ++------ src/helpers/heritage-integration/navigation-helper.js | 3 --- src/helpers/heritage-integration/order-helper.spec.js | 2 +- 3 files changed, 3 insertions(+), 10 deletions(-) diff --git a/src/helpers/heritage-integration/cookie-helper.js b/src/helpers/heritage-integration/cookie-helper.js index 18632fc51..f8cf05174 100644 --- a/src/helpers/heritage-integration/cookie-helper.js +++ b/src/helpers/heritage-integration/cookie-helper.js @@ -26,15 +26,11 @@ export function updateOrCreateFunnelCookie() { Returns null if cookie isn't valid JSON. */ export function getFunnelCookie() { - console.log("getConceptCookie") - console.log(document.cookie) - console.log(location.hostname) - console.log(getDomainWithoutSubdomain()) const cookieJson = document.cookie ?.split("; ") ?.find(row => row.startsWith(`${cookieNames.FUNNEL_SESSION_INFO}=`)) ?.split("=")[1]; - console.log(cookieJson) + try { return JSON.parse(cookieJson); } catch (error) { @@ -75,7 +71,7 @@ export function getCookieDomainValue() { function getDomainWithoutSubdomain() { let url = location.hostname; - if (url == "localhost") { + if (url.includes("localhost")) { return "localhost"; } diff --git a/src/helpers/heritage-integration/navigation-helper.js b/src/helpers/heritage-integration/navigation-helper.js index b6fd5a5b4..12207acf4 100644 --- a/src/helpers/heritage-integration/navigation-helper.js +++ b/src/helpers/heritage-integration/navigation-helper.js @@ -67,9 +67,6 @@ export async function navigateToHeritageFunnel() { { corid: store.getters.order.referralCorrelationId, src: "concept-funnel", - // TODO CSR-28, remove this - cns: "all", - experiments: "RemoveServiceAreaPage=ServAreaRemoval_V7=ServAreaNoRemove_V7_TEST=true,ConceptFunnel=ConceptFunnel_V1=ConceptFunnel_TEST=true" } ); } \ No newline at end of file diff --git a/src/helpers/heritage-integration/order-helper.spec.js b/src/helpers/heritage-integration/order-helper.spec.js index 382132bbe..d53afc232 100644 --- a/src/helpers/heritage-integration/order-helper.spec.js +++ b/src/helpers/heritage-integration/order-helper.spec.js @@ -19,7 +19,7 @@ describe("loadOrderIfPresent", () => { ShouldResetState: testShouldResetState } - document.cookie = `${cookieNames.ORDER_INFO}=${JSON.stringify(testCookieValue)}; path=/; domain=.safelite.com`; + document.cookie = `${cookieNames.ORDER_INFO}=${JSON.stringify(testCookieValue)}; path=/; ${cookieHelper.getCookieDomainValue()}`; // Act loadOrderIfPresent(); From b98ec44714ab5ae1f4aca80830fd4777f7d807b2 Mon Sep 17 00:00:00 2001 From: Katie Date: Wed, 30 Mar 2022 13:34:14 -0400 Subject: [PATCH 5/5] CSR-98 Fix tests --- src/helpers/heritage-integration/cookie-helper.js | 1 + src/helpers/heritage-integration/order-helper.js | 2 ++ src/helpers/heritage-integration/order-helper.spec.js | 7 +++++-- 3 files changed, 8 insertions(+), 2 deletions(-) diff --git a/src/helpers/heritage-integration/cookie-helper.js b/src/helpers/heritage-integration/cookie-helper.js index f8cf05174..cee400e0c 100644 --- a/src/helpers/heritage-integration/cookie-helper.js +++ b/src/helpers/heritage-integration/cookie-helper.js @@ -42,6 +42,7 @@ export function getFunnelCookie() { Removes cookie from browser. */ export function deleteFunnelCookie() { + console.log("hi there") document.cookie = `${cookieNames.FUNNEL_SESSION_INFO}=; Max-Age=0; path=/; ${getCookieDomainValue()}`; } diff --git a/src/helpers/heritage-integration/order-helper.js b/src/helpers/heritage-integration/order-helper.js index aaf0db740..8dddb5436 100644 --- a/src/helpers/heritage-integration/order-helper.js +++ b/src/helpers/heritage-integration/order-helper.js @@ -10,6 +10,7 @@ import baseMixin from "@/mixins/base-mixin"; */ export async function loadOrderIfPresent() { const funnelCookie = getFunnelCookie(); + console.log(funnelCookie) // Do nothing if there is no cookie or no correlation id. if (funnelCookie == null || funnelCookie.ReferralCorrelationId == null) { @@ -20,6 +21,7 @@ export async function loadOrderIfPresent() { if (funnelCookie.ShouldResetState) { baseMixin.methods.dispatchNonBlockingStoreAction(storeActions.RESET_STATE); deleteFunnelCookie(); + console.log("sup") return null; } diff --git a/src/helpers/heritage-integration/order-helper.spec.js b/src/helpers/heritage-integration/order-helper.spec.js index d53afc232..cbe54ba25 100644 --- a/src/helpers/heritage-integration/order-helper.spec.js +++ b/src/helpers/heritage-integration/order-helper.spec.js @@ -13,18 +13,21 @@ describe("loadOrderIfPresent", () => { test("ShouldResetState == true => funnel cookie is deleted", () => { // Arrange + cookieHelper.deleteFunnelCookie = jest.spyOn(cookieHelper, "deleteFunnelCookie"); const testShouldResetState = true; const testCookieValue = { - ShouldResetState: testShouldResetState + ShouldResetState: testShouldResetState, + ReferralCorrelationId: "xxx" } - document.cookie = `${cookieNames.ORDER_INFO}=${JSON.stringify(testCookieValue)}; path=/; ${cookieHelper.getCookieDomainValue()}`; + document.cookie = `${cookieNames.FUNNEL_SESSION_INFO}=${JSON.stringify(testCookieValue)}; path=/; ${cookieHelper.getCookieDomainValue()}`; // Act loadOrderIfPresent(); // Assert + expect(cookieHelper.deleteFunnelCookie).toHaveBeenCalled(); expect(document.cookie).toBe(""); });