From 341cc02d7d097b6282cbe7c97e549601238cf568 Mon Sep 17 00:00:00 2001 From: CarlNation Date: Wed, 4 May 2022 09:07:59 -0400 Subject: [PATCH 1/2] CSR-18 activity log split into lagpageview and logcustomevent --- src/constants/endpoints.js | 8 +++++++ src/constants/store-actions.js | 3 ++- src/mixins/analytics-mixin.js | 30 +++++++++++++++++--------- src/mixins/analytics-mixin.spec.js | 24 +++++++++++++++++---- src/store/index.js | 34 ++++++++++++++++++++++-------- src/store/store.spec.js | 22 +++++++++++++++---- 6 files changed, 93 insertions(+), 28 deletions(-) diff --git a/src/constants/endpoints.js b/src/constants/endpoints.js index ca1555e7b..50efbda04 100644 --- a/src/constants/endpoints.js +++ b/src/constants/endpoints.js @@ -75,6 +75,14 @@ const endpoints = { url: "/analytics/api/v1/analytics/activity", method: "POST", }, + LogPageView:{ + url: "/analytics/api/v1/analytics/log-page-view", + method: "POST", + }, + LogCustomEvent:{ + url: "/analytics/api/v1/analytics/log-custom-event", + method: "POST", + }, GetExperimentsByUserForGa: { url: "/analytics/api/v1/analytics/get-experiments-for-GA", method: "GET", diff --git a/src/constants/store-actions.js b/src/constants/store-actions.js index 74dac5043..b6d3793f4 100644 --- a/src/constants/store-actions.js +++ b/src/constants/store-actions.js @@ -19,7 +19,8 @@ const storeActions = { SET_REFERRAL_INFORMATION: "setReferralInformation", VALIDATE_ZIP: "validateZip", LOG_EXPERIMENT_EXPOSURE: "logExperimentExposure", - LOG_ACTIVITY: "logActivity", + LOG_PAGE_VIEW: "logPageView", + LOG_CUSTOM_EVENT: "logCustomEvent", GET_EXPERIMENTS_BY_USER_FOR_GA: "getExperimentsByUserForGa", // DEPENDENCY MUTATIONS diff --git a/src/mixins/analytics-mixin.js b/src/mixins/analytics-mixin.js index 85402c8cb..df2d073c4 100644 --- a/src/mixins/analytics-mixin.js +++ b/src/mixins/analytics-mixin.js @@ -11,24 +11,34 @@ const currentPageName = getPageNameByQueryString(); export default { methods: { - logEvent(pageEvent, category, action, label, value) { + logPageView(pageEvent) { var payload = { userId: getDeviceIdValue(), sessionKey: getSessionKeyValue(), pageName: currentPageName, sessionId: getSessionIdValue(), + action: '', + event: pageEvent, shouldUseSessionId: true, }; - if (pageEvent) { - payload.pageEvent = { action: '', event: pageEvent }; - } + baseMixin.methods.dispatchStoreAction(storeActions.LOG_PAGE_VIEW, payload, false); + }, - if (category) { - payload.customEvent = { category: category, action: action, label: label, value: value }; - } + logCustomEvent(category, action, label, value) { + var payload = { + userId: getDeviceIdValue(), + sessionKey: getSessionKeyValue(), + pageName: currentPageName, + sessionId: getSessionIdValue(), + category: category, + action: action, + label: label, + value: value, + shouldUseSessionId: true, + }; - baseMixin.methods.dispatchStoreAction(storeActions.LOG_ACTIVITY, payload, false); + baseMixin.methods.dispatchStoreAction(storeActions.LOG_CUSTOM_EVENT, payload, false); }, pushEventToGA(category, action, label, pushToLogApp = false) { @@ -44,7 +54,7 @@ export default { pushToDataLayerIfDefined(eventToBePushed); if (pushToLogApp) { - this.logEvent(undefined, category, action, label, undefined); + this.logCustomEvent(category, action, label, undefined); } }, @@ -58,7 +68,7 @@ export default { pushToDataLayerIfDefined(pageViewEvent); - this.logEvent(currentPageName, analyticsPageEvents.ENTRY); + this.logPageView(analyticsPageEvents.ENTRY); }, pushExperimentsToDataLayer(experiments) { diff --git a/src/mixins/analytics-mixin.spec.js b/src/mixins/analytics-mixin.spec.js index ae1ba00a7..4158bdeff 100644 --- a/src/mixins/analytics-mixin.spec.js +++ b/src/mixins/analytics-mixin.spec.js @@ -3,18 +3,34 @@ import { setupMocksForJsFiles } from "@/helpers/unit-test-helper.js"; import { storeActions } from "@/constants/store-actions"; describe("analyticsMixin.js", () => { - test("logEvent: calls dispatch with type and payload", () => { + test("logPageView: calls dispatch with type and payload", () => { const type = ""; const payload = {}; const mockData = { actionList: [{ - actionName: storeActions.LOG_ACTIVITY + actionName: storeActions.LOG_PAGE_VIEW }], } const mocks = setupMocksForJsFiles(mockData); - analyticsMixin.methods.logEvent(type, payload); + analyticsMixin.methods.logPageView(type, payload); + + expect(mocks.baseMixin.methods.dispatchStoreAction).toBeCalled(); + }); + + test("logCustomEvent: calls dispatch with type and payload", () => { + const type = ""; + const payload = {}; + + const mockData = { + actionList: [{ + actionName: storeActions.LOG_CUSTOM_EVENT + }], + } + const mocks = setupMocksForJsFiles(mockData); + + analyticsMixin.methods.logCustomEvent(type, payload); expect(mocks.baseMixin.methods.dispatchStoreAction).toBeCalled(); }); @@ -23,7 +39,7 @@ describe("analyticsMixin.js", () => { // Arrange const mockData = { actionList: [{ - actionName: storeActions.LOG_ACTIVITY + actionName: storeActions.LOG_CUSTOM_EVENT }], } const mocks = setupMocksForJsFiles(mockData); diff --git a/src/store/index.js b/src/store/index.js index dfeb4fdf2..9e7f2f459 100644 --- a/src/store/index.js +++ b/src/store/index.js @@ -433,27 +433,43 @@ export const actions = { }); }, - logActivity(context, { userId, sessionKey, pageName, sessionId, pageEvent, customEvent, shouldUseSessionId }) { + logPageView(context, { userId, sessionKey, pageName, sessionId, action, event, shouldUseSessionId }) { var payload = { userId: userId, sessionKey: sessionKey, sessionId: sessionId, pageName: pageName, applicationName: 'SafeliteDotCom', + action: action, + event: event, shouldUseSessionId: shouldUseSessionId }; - if (typeof pageEvent !== 'undefined') { - payload.pageEvent = { action: pageEvent.action, event: pageEvent.event}; - } + return globalMethods.callHttpClient({ + method: endpoints.LogPageView.method, + endpoint: endpoints.LogPageView.url, + payload: payload, + logApiCall: false + }); + }, - if (typeof customEvent !== 'undefined') { - payload.customEvents = [{category: customEvent.category, action: customEvent.action, label: customEvent.label, value: customEvent.value}]; - } + logCustomEvent(context, { userId, sessionKey, pageName, sessionId, category, action, label, value, shouldUseSessionId }) { + var payload = { + userId: userId, + sessionKey: sessionKey, + sessionId: sessionId, + pageName: pageName, + applicationName: 'SafeliteDotCom', + category: category, + action: action, + label: label, + value: value, + shouldUseSessionId: shouldUseSessionId + }; return globalMethods.callHttpClient({ - method: endpoints.LogActivity.method, - endpoint: endpoints.LogActivity.url, + method: endpoints.LogCustomEvent.method, + endpoint: endpoints.LogCustomEvent.url, payload: payload, logApiCall: false }); diff --git a/src/store/store.spec.js b/src/store/store.spec.js index e27569a6f..b1667eb4c 100644 --- a/src/store/store.spec.js +++ b/src/store/store.spec.js @@ -617,7 +617,7 @@ describe("Actions", () => { expect(commit).toBeCalledWith(storeMutations.UPDATE_REFERRAL_CORRELATION_ID, "xxx-xxx-xxx"); }); - it("logActivity action, should return nothing", async () => { + it("logPageView action, should return nothing", async () => { // Arrange const context = state; @@ -626,12 +626,26 @@ describe("Actions", () => { event: "ENTRY", } - var customEvent = [{ + // Act + globalMethods.callHttpClient.mockImplementation(() => { + return Promise.resolve({ }); + }); + + // Assert + const response = await actions.logPageView(context, { userId: "userId", sessionKey: "sessionKey", pageName: "pageName", sessionId: "sessionId", pageEvent: pageEvent, shouldUseSessionId: true }); + expect(response).toEqual({}); + }); + + it("logCustomEvent action, should return nothing", async () => { + + // Arrange + const context = state; + var customEvent = { category: "tstCat", action: "click", label: "damage", value: "psych" - }]; + }; // Act globalMethods.callHttpClient.mockImplementation(() => { @@ -639,7 +653,7 @@ describe("Actions", () => { }); // Assert - const response = await actions.logActivity(context, { userId: "userId", sessionKey: "sessionKey", pageName: "pageName", sessionId: "sessionId", pageEvent: pageEvent, customEvent: customEvent, shouldUseSessionId: true }); + const response = await actions.logCustomEvent(context, { userId: "userId", sessionKey: "sessionKey", pageName: "pageName", sessionId: "sessionId", customEvent: customEvent, shouldUseSessionId: true }); expect(response).toEqual({}); }); From a385e2a8bc353e7bed854c6c469939c06949d2c4 Mon Sep 17 00:00:00 2001 From: CarlNation Date: Wed, 4 May 2022 09:15:22 -0400 Subject: [PATCH 2/2] CSR-18 remove endpoint --- src/constants/endpoints.js | 4 ---- 1 file changed, 4 deletions(-) diff --git a/src/constants/endpoints.js b/src/constants/endpoints.js index 3860ad97d..059693773 100644 --- a/src/constants/endpoints.js +++ b/src/constants/endpoints.js @@ -71,10 +71,6 @@ const endpoints = { url: "/analytics/api/v1/analytics/log-experiment-exposure", method: "POST", }, - LogActivity:{ - url: "/analytics/api/v1/analytics/activity", - method: "POST", - }, LogPageView:{ url: "/analytics/api/v1/analytics/log-page-view", method: "POST",