Merge pull request #391 from Safelite/feature/CSR-18

Feature/csr 18
This commit is contained in:
CarlNation 2022-05-04 09:27:04 -04:00 committed by GitHub
commit 0ca1f1ac05
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
6 changed files with 91 additions and 30 deletions

View file

@ -71,8 +71,12 @@ const endpoints = {
url: "/analytics/api/v1/analytics/log-experiment-exposure", url: "/analytics/api/v1/analytics/log-experiment-exposure",
method: "POST", method: "POST",
}, },
LogActivity:{ LogPageView:{
url: "/analytics/api/v1/analytics/activity", url: "/analytics/api/v1/analytics/log-page-view",
method: "POST",
},
LogCustomEvent:{
url: "/analytics/api/v1/analytics/log-custom-event",
method: "POST", method: "POST",
}, },
GetExperimentsByUser: { GetExperimentsByUser: {

View file

@ -19,7 +19,8 @@ const storeActions = {
SET_REFERRAL_INFORMATION: "setReferralInformation", SET_REFERRAL_INFORMATION: "setReferralInformation",
VALIDATE_ZIP: "validateZip", VALIDATE_ZIP: "validateZip",
LOG_EXPERIMENT_EXPOSURE: "logExperimentExposure", LOG_EXPERIMENT_EXPOSURE: "logExperimentExposure",
LOG_ACTIVITY: "logActivity", LOG_PAGE_VIEW: "logPageView",
LOG_CUSTOM_EVENT: "logCustomEvent",
GET_EXPERIMENTS_BY_USER: "GetExperimentsByUser", GET_EXPERIMENTS_BY_USER: "GetExperimentsByUser",
// DEPENDENCY MUTATIONS // DEPENDENCY MUTATIONS

View file

@ -11,24 +11,34 @@ const currentPageName = getPageNameByQueryString();
export default { export default {
methods: { methods: {
logEvent(pageEvent, category, action, label, value) { logPageView(pageEvent) {
var payload = { var payload = {
userId: getDeviceIdValue(), userId: getDeviceIdValue(),
sessionKey: getSessionKeyValue(), sessionKey: getSessionKeyValue(),
pageName: currentPageName, pageName: currentPageName,
sessionId: getSessionIdValue(), sessionId: getSessionIdValue(),
action: '',
event: pageEvent,
shouldUseSessionId: true, shouldUseSessionId: true,
}; };
if (pageEvent) { baseMixin.methods.dispatchStoreAction(storeActions.LOG_PAGE_VIEW, payload, false);
payload.pageEvent = { action: '', event: pageEvent }; },
}
if (category) { logCustomEvent(category, action, label, value) {
payload.customEvent = { category: category, action: action, label: label, value: 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) { pushEventToGA(category, action, label, pushToLogApp = false) {
@ -44,7 +54,7 @@ export default {
pushToDataLayerIfDefined(eventToBePushed); pushToDataLayerIfDefined(eventToBePushed);
if (pushToLogApp) { if (pushToLogApp) {
this.logEvent(undefined, category, action, label, undefined); this.logCustomEvent(category, action, label, undefined);
} }
}, },
@ -58,7 +68,7 @@ export default {
pushToDataLayerIfDefined(pageViewEvent); pushToDataLayerIfDefined(pageViewEvent);
this.logEvent(currentPageName, analyticsPageEvents.ENTRY); this.logPageView(analyticsPageEvents.ENTRY);
}, },
pushExperimentsToDataLayer(experiments) { pushExperimentsToDataLayer(experiments) {

View file

@ -3,18 +3,34 @@ import { setupMocksForJsFiles } from "@/helpers/unit-test-helper.js";
import { storeActions } from "@/constants/store-actions"; import { storeActions } from "@/constants/store-actions";
describe("analyticsMixin.js", () => { describe("analyticsMixin.js", () => {
test("logEvent: calls dispatch with type and payload", () => { test("logPageView: calls dispatch with type and payload", () => {
const type = ""; const type = "";
const payload = {}; const payload = {};
const mockData = { const mockData = {
actionList: [{ actionList: [{
actionName: storeActions.LOG_ACTIVITY actionName: storeActions.LOG_PAGE_VIEW
}], }],
} }
const mocks = setupMocksForJsFiles(mockData); 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(); expect(mocks.baseMixin.methods.dispatchStoreAction).toBeCalled();
}); });
@ -23,7 +39,7 @@ describe("analyticsMixin.js", () => {
// Arrange // Arrange
const mockData = { const mockData = {
actionList: [{ actionList: [{
actionName: storeActions.LOG_ACTIVITY actionName: storeActions.LOG_CUSTOM_EVENT
}], }],
} }
const mocks = setupMocksForJsFiles(mockData); const mocks = setupMocksForJsFiles(mockData);

View file

@ -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 = { var payload = {
userId: userId, userId: userId,
sessionKey: sessionKey, sessionKey: sessionKey,
sessionId: sessionId, sessionId: sessionId,
pageName: pageName, pageName: pageName,
applicationName: 'SafeliteDotCom', applicationName: 'SafeliteDotCom',
action: action,
event: event,
shouldUseSessionId: shouldUseSessionId shouldUseSessionId: shouldUseSessionId
}; };
if (typeof pageEvent !== 'undefined') { return globalMethods.callHttpClient({
payload.pageEvent = { action: pageEvent.action, event: pageEvent.event}; method: endpoints.LogPageView.method,
} endpoint: endpoints.LogPageView.url,
payload: payload,
logApiCall: false
});
},
if (typeof customEvent !== 'undefined') { logCustomEvent(context, { userId, sessionKey, pageName, sessionId, category, action, label, value, shouldUseSessionId }) {
payload.customEvents = [{category: customEvent.category, action: customEvent.action, label: customEvent.label, value: customEvent.value}]; 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({ return globalMethods.callHttpClient({
method: endpoints.LogActivity.method, method: endpoints.LogCustomEvent.method,
endpoint: endpoints.LogActivity.url, endpoint: endpoints.LogCustomEvent.url,
payload: payload, payload: payload,
logApiCall: false logApiCall: false
}); });

View file

@ -617,7 +617,7 @@ describe("Actions", () => {
expect(commit).toBeCalledWith(storeMutations.UPDATE_REFERRAL_CORRELATION_ID, "xxx-xxx-xxx"); 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 // Arrange
const context = state; const context = state;
@ -626,12 +626,26 @@ describe("Actions", () => {
event: "ENTRY", 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", category: "tstCat",
action: "click", action: "click",
label: "damage", label: "damage",
value: "psych" value: "psych"
}]; };
// Act // Act
globalMethods.callHttpClient.mockImplementation(() => { globalMethods.callHttpClient.mockImplementation(() => {
@ -639,7 +653,7 @@ describe("Actions", () => {
}); });
// Assert // 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({}); expect(response).toEqual({});
}); });