Merge branch 'develop' into feature/kroell/INSR-9538
This commit is contained in:
commit
9a73338d7b
4 changed files with 46 additions and 31 deletions
|
|
@ -7,7 +7,8 @@ import {
|
||||||
regenerateUserId,
|
regenerateUserId,
|
||||||
regenerateDeviceId,
|
regenerateDeviceId,
|
||||||
setSessionIdIfUnset,
|
setSessionIdIfUnset,
|
||||||
setSessionKeyIfUnset
|
setSessionKeyIfUnset,
|
||||||
|
updateSessionIdCookie
|
||||||
} from '@/helpers/cookie-helper';
|
} from '@/helpers/cookie-helper';
|
||||||
import applicationConfig from '@/constants/application-config';
|
import applicationConfig from '@/constants/application-config';
|
||||||
import queryStrings from '@/constants/query-strings';
|
import queryStrings from '@/constants/query-strings';
|
||||||
|
|
@ -52,12 +53,25 @@ export default {
|
||||||
}
|
}
|
||||||
return '';
|
return '';
|
||||||
},
|
},
|
||||||
logPageView(pageEvent) {
|
async validateSession() {
|
||||||
|
const emptySessionId = '00000000-0000-0000-0000-000000000000';
|
||||||
|
|
||||||
|
if (this.noSession()) {
|
||||||
|
await this.initSession();
|
||||||
|
}
|
||||||
|
|
||||||
|
const sessionId = getSessionIdValue();
|
||||||
|
if (sessionId && sessionId !== emptySessionId) {
|
||||||
|
updateSessionIdCookie();
|
||||||
|
}
|
||||||
|
},
|
||||||
|
async logPageView(pageEvent) {
|
||||||
const store = useMainStore();
|
const store = useMainStore();
|
||||||
const currentPageName = this.getPageNameByQueryString();
|
const currentPageName = this.getPageNameByQueryString();
|
||||||
|
//await this.validateSession();
|
||||||
|
|
||||||
const payload = {
|
const payload = {
|
||||||
userId: getDeviceIdValue(),
|
userId: getUserIdValue(),
|
||||||
sessionKey: getSessionKeyValue(),
|
sessionKey: getSessionKeyValue(),
|
||||||
pageName: currentPageName,
|
pageName: currentPageName,
|
||||||
referralSequenceNumber: store.order.referralSequenceNumber,
|
referralSequenceNumber: store.order.referralSequenceNumber,
|
||||||
|
|
@ -69,15 +83,16 @@ export default {
|
||||||
experimentsForUser: store.applicationUser.experiments
|
experimentsForUser: store.applicationUser.experiments
|
||||||
};
|
};
|
||||||
|
|
||||||
store.logPageView(payload);
|
await store.logPageView(payload);
|
||||||
},
|
},
|
||||||
|
|
||||||
logCustomEvent(category, action, label, value) {
|
async logCustomEvent(category, action, label, value) {
|
||||||
const store = useMainStore();
|
const store = useMainStore();
|
||||||
const currentPageName = this.getPageNameByQueryString();
|
const currentPageName = this.getPageNameByQueryString();
|
||||||
|
//await this.validateSession();
|
||||||
|
|
||||||
const payload = {
|
const payload = {
|
||||||
userId: getDeviceIdValue(),
|
userId: getUserIdValue(),
|
||||||
sessionKey: getSessionKeyValue(),
|
sessionKey: getSessionKeyValue(),
|
||||||
pageName: currentPageName,
|
pageName: currentPageName,
|
||||||
referralSequenceNumber: store.order.referralSequenceNumber,
|
referralSequenceNumber: store.order.referralSequenceNumber,
|
||||||
|
|
@ -91,9 +106,9 @@ export default {
|
||||||
experimentsForUser: store.applicationUser.experiments
|
experimentsForUser: store.applicationUser.experiments
|
||||||
};
|
};
|
||||||
|
|
||||||
store.logCustomEvent(payload);
|
await store.logCustomEvent(payload);
|
||||||
},
|
},
|
||||||
pushEventToGA(category, action, label, pushToLogApp = false, valueToLogType = null, value = undefined) {
|
async pushEventToGA(category, action, label, pushToLogApp = false, valueToLogType = null, value = undefined) {
|
||||||
const currentPageName = this.getPageNameByQueryString();
|
const currentPageName = this.getPageNameByQueryString();
|
||||||
const labelToLog = getValueToLog(label, valueToLogType);
|
const labelToLog = getValueToLog(label, valueToLogType);
|
||||||
|
|
||||||
|
|
@ -109,14 +124,14 @@ export default {
|
||||||
pushToDataLayerIfDefined(eventToBePushed);
|
pushToDataLayerIfDefined(eventToBePushed);
|
||||||
|
|
||||||
if (pushToLogApp) {
|
if (pushToLogApp) {
|
||||||
this.logCustomEvent(category, action, labelToLog, value);
|
await this.logCustomEvent(category, action, labelToLog, value);
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
pushGenericObjectToGA(object) {
|
pushGenericObjectToGA(object) {
|
||||||
pushToDataLayerIfDefined(object);
|
pushToDataLayerIfDefined(object);
|
||||||
},
|
},
|
||||||
|
|
||||||
pushPageViewToGA() {
|
async pushPageViewToGA() {
|
||||||
const currentPageName = this.getPageNameByQueryString();
|
const currentPageName = this.getPageNameByQueryString();
|
||||||
const pageViewEvent = {
|
const pageViewEvent = {
|
||||||
event: GaEvents.PAGE_VIEW_EVENT,
|
event: GaEvents.PAGE_VIEW_EVENT,
|
||||||
|
|
@ -126,7 +141,7 @@ export default {
|
||||||
|
|
||||||
pushToDataLayerIfDefined(pageViewEvent);
|
pushToDataLayerIfDefined(pageViewEvent);
|
||||||
|
|
||||||
this.logPageView(analyticsPageEvents.ENTRY);
|
await this.logPageView(analyticsPageEvents.ENTRY);
|
||||||
},
|
},
|
||||||
|
|
||||||
pushOrderToDataLayer() {
|
pushOrderToDataLayer() {
|
||||||
|
|
@ -533,6 +548,7 @@ export default {
|
||||||
},
|
},
|
||||||
|
|
||||||
async initSession() {
|
async initSession() {
|
||||||
|
|
||||||
regenerateDeviceId();
|
regenerateDeviceId();
|
||||||
regenerateUserId();
|
regenerateUserId();
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -8,29 +8,32 @@ import {
|
||||||
ValueToLogTypes
|
ValueToLogTypes
|
||||||
} from '@/constants/analytics';
|
} from '@/constants/analytics';
|
||||||
import { useMainStore } from '@/store';
|
import { useMainStore } from '@/store';
|
||||||
|
import crypto from 'crypto';
|
||||||
|
|
||||||
|
global.crypto = crypto;
|
||||||
|
|
||||||
describe('analyticsMixin.js', () => {
|
describe('analyticsMixin.js', () => {
|
||||||
test('logPageView: calls dispatch with type and payload', () => {
|
test('logPageView: calls dispatch with type and payload', async () => {
|
||||||
const payload = {};
|
const payload = {};
|
||||||
|
|
||||||
const testCookieValue = {
|
const testCookieValue = {
|
||||||
sid: '10000000-0000-0000-0000-000000000001'
|
sid: '10000000-0000-0000-0000-000000000001'
|
||||||
};
|
};
|
||||||
|
|
||||||
setupCookies({ funnelCookieValue: JSON.stringify(testCookieValue) });
|
setupCookies({ ISSCookieValue: JSON.stringify(testCookieValue) });
|
||||||
|
|
||||||
useMainStore().logPageView(payload);
|
await analyticsMixin.methods.logPageView(payload);
|
||||||
|
|
||||||
expect(useMainStore().logPageView).toBeCalled();
|
expect(useMainStore().logPageView).toBeCalled();
|
||||||
});
|
});
|
||||||
|
|
||||||
test('logCustomEvent: calls dispatch with type and payload', () => {
|
test('logCustomEvent: calls dispatch with type and payload', async () => {
|
||||||
useMainStore().logCustomEvent('someCat', 'someAction', 'someLabel', 'someVal');
|
await analyticsMixin.methods.logCustomEvent('someCat', 'someAction', 'someLabel', 'someVal');
|
||||||
|
|
||||||
expect(useMainStore().logCustomEvent).toBeCalled();
|
expect(useMainStore().logCustomEvent).toBeCalled();
|
||||||
});
|
});
|
||||||
|
|
||||||
test('pushEventToGA, should call dataLayer push and logCustomEvent too', () => {
|
test('pushEventToGA, should call dataLayer push and logCustomEvent too', async () => {
|
||||||
// Arrange
|
// Arrange
|
||||||
window.dataLayer = [];
|
window.dataLayer = [];
|
||||||
const mockDataLayer = [];
|
const mockDataLayer = [];
|
||||||
|
|
@ -44,13 +47,13 @@ describe('analyticsMixin.js', () => {
|
||||||
});
|
});
|
||||||
|
|
||||||
// Act
|
// Act
|
||||||
analyticsMixin.methods.pushEventToGA('category', 'action', 'label', true);
|
await analyticsMixin.methods.pushEventToGA('category', 'action', 'label', true);
|
||||||
|
|
||||||
// Assert
|
// Assert
|
||||||
expect(mockDataLayer).toEqual(expect.arrayContaining(window.dataLayer));
|
expect(mockDataLayer).toEqual(expect.arrayContaining(window.dataLayer));
|
||||||
});
|
});
|
||||||
|
|
||||||
test('pushEventToGA, should call dataLayer push and ValueToLogTypes.LAST_5 only logs last 5 of label', () => {
|
test('pushEventToGA, should call dataLayer push and ValueToLogTypes.LAST_5 only logs last 5 of label', async () => {
|
||||||
// Arrange
|
// Arrange
|
||||||
window.dataLayer = [];
|
window.dataLayer = [];
|
||||||
const expectedDataLayer = [];
|
const expectedDataLayer = [];
|
||||||
|
|
@ -64,7 +67,7 @@ describe('analyticsMixin.js', () => {
|
||||||
});
|
});
|
||||||
|
|
||||||
// Act
|
// Act
|
||||||
analyticsMixin.methods.pushEventToGA(
|
await analyticsMixin.methods.pushEventToGA(
|
||||||
'category',
|
'category',
|
||||||
'action',
|
'action',
|
||||||
'1111122222333333',
|
'1111122222333333',
|
||||||
|
|
@ -76,7 +79,7 @@ describe('analyticsMixin.js', () => {
|
||||||
expect(expectedDataLayer).toEqual(expect.arrayContaining(window.dataLayer));
|
expect(expectedDataLayer).toEqual(expect.arrayContaining(window.dataLayer));
|
||||||
});
|
});
|
||||||
|
|
||||||
test('pushEventToGA, should call dataLayer push and ValueToLogTypes.LAST_5 logs only the last 3 characters for a 3 character string', () => {
|
test('pushEventToGA, should call dataLayer push and ValueToLogTypes.LAST_5 logs only the last 3 characters for a 3 character string', async () => {
|
||||||
// Arrange
|
// Arrange
|
||||||
window.dataLayer = [];
|
window.dataLayer = [];
|
||||||
const expectedDataLayer = [];
|
const expectedDataLayer = [];
|
||||||
|
|
@ -90,7 +93,7 @@ describe('analyticsMixin.js', () => {
|
||||||
});
|
});
|
||||||
|
|
||||||
// Act
|
// Act
|
||||||
analyticsMixin.methods.pushEventToGA(
|
await analyticsMixin.methods.pushEventToGA(
|
||||||
'category',
|
'category',
|
||||||
'action',
|
'action',
|
||||||
'111',
|
'111',
|
||||||
|
|
|
||||||
|
|
@ -35,14 +35,10 @@ const routes = [
|
||||||
return await GoToAccessIsDenied(next);
|
return await GoToAccessIsDenied(next);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
await analyticsMixin.methods.validateSession();
|
||||||
|
|
||||||
// Do not run these for the main entry page - as it is not part of the user flow.
|
// Do not run these for the main entry page - as it is not part of the user flow.
|
||||||
if (issPageToUse !== issPageValues.ENTRY_PAGE) {
|
if (issPageToUse !== issPageValues.ENTRY_PAGE) {
|
||||||
if (analyticsMixin.methods.noSession()) {
|
|
||||||
await analyticsMixin.methods.initSession();
|
|
||||||
} else {
|
|
||||||
updateSessionIdCookie();
|
|
||||||
}
|
|
||||||
|
|
||||||
try {
|
try {
|
||||||
await runExperiments(issPageToUse);
|
await runExperiments(issPageToUse);
|
||||||
} catch (error) {
|
} catch (error) {
|
||||||
|
|
|
||||||
|
|
@ -2560,7 +2560,7 @@ export const useMainStore = defineStore({
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
logPageView({ userId, sessionKey, pageName, referralSequenceNumber, parentAccountNumber, sessionId, action, event, shouldUseSessionId, experimentsForUser }) {
|
async logPageView({ userId, sessionKey, pageName, referralSequenceNumber, parentAccountNumber, sessionId, action, event, shouldUseSessionId, experimentsForUser }) {
|
||||||
const payload = {
|
const payload = {
|
||||||
userId,
|
userId,
|
||||||
sessionKey,
|
sessionKey,
|
||||||
|
|
@ -2588,7 +2588,7 @@ export const useMainStore = defineStore({
|
||||||
}
|
}
|
||||||
);
|
);
|
||||||
},
|
},
|
||||||
logCustomEvent({ userId, sessionKey, pageName, sessionId, category, action, label, value, shouldUseSessionId, experimentsForUser }) {
|
async logCustomEvent({ userId, sessionKey, pageName, sessionId, category, action, label, value, shouldUseSessionId, experimentsForUser }) {
|
||||||
if (pageName == null || pageName.length === 0) { pageName = 'none'; }
|
if (pageName == null || pageName.length === 0) { pageName = 'none'; }
|
||||||
|
|
||||||
const payload = {
|
const payload = {
|
||||||
|
|
@ -2625,7 +2625,7 @@ export const useMainStore = defineStore({
|
||||||
this.logExperimentIfExists(issPage, experimentUniverses.ISS_FEATURETOGGLE_AREFEES_HIDDEN);
|
this.logExperimentIfExists(issPage, experimentUniverses.ISS_FEATURETOGGLE_AREFEES_HIDDEN);
|
||||||
this.logExperimentIfExists(issPage, experimentUniverses.ISS_FEATURETOGGLE_AREFEES_OVERRIDDEN);
|
this.logExperimentIfExists(issPage, experimentUniverses.ISS_FEATURETOGGLE_AREFEES_OVERRIDDEN);
|
||||||
},
|
},
|
||||||
initializeSession({ userId, sessionId, userAgent, referrer }) {
|
async initializeSession({ userId, sessionId, userAgent, referrer }) {
|
||||||
const payload = {
|
const payload = {
|
||||||
applicationName: applicationConfig.APPLICATION_NAME,
|
applicationName: applicationConfig.APPLICATION_NAME,
|
||||||
userId,
|
userId,
|
||||||
|
|
|
||||||
Loading…
Reference in a new issue