diff --git a/src/anonymousUserTracking/anonymousUserEventManager.ts b/src/anonymousUserTracking/anonymousUserEventManager.ts index 497f9684..64219aa8 100644 --- a/src/anonymousUserTracking/anonymousUserEventManager.ts +++ b/src/anonymousUserTracking/anonymousUserEventManager.ts @@ -2,7 +2,8 @@ import { v4 as uuidv4 } from 'uuid'; import { UpdateCartRequestParams, - TrackPurchaseRequestParams + TrackPurchaseRequestParams, + CommerceItem } from '../commerce/types'; import { @@ -26,7 +27,8 @@ import { KEY_PREFER_USERID, ENDPOINTS, DEFAULT_EVENT_THRESHOLD_LIMIT, - SHARED_PREF_ANON_USAGE_TRACKED + SHARED_PREF_ANON_USAGE_TRACKED, + SHARED_PREFS_USER_UPDATE_OBJECT_KEY } from '../constants'; import { baseIterableRequest } from '../request'; import { IterableResponse } from '../types'; @@ -42,6 +44,39 @@ import { updateUserSchema } from '../users/users.schema'; import { InAppTrackRequestParams } from '../events'; import config from '../utils/config'; +// Type definitions for anonymous event data objects +type AnonTrackEventData = { + eventName: string; + createdAt: number; + dataFields?: Record; + createNewFields: boolean; + eventType: string; +}; + +type AnonTrackPurchaseData = { + items: CommerceItem[]; + createdAt: number; + dataFields?: Record; + total: number; + eventType: string; +}; + +type AnonUpdateCartData = { + items: CommerceItem[]; + eventType: string; + preferUserId: boolean; + createdAt: number; +}; + +type AnonUserUpdateData = Record & { + eventType: string; +}; + +type AnonEventData = + | AnonTrackEventData + | AnonTrackPurchaseData + | AnonUpdateCartData; + type AnonUserFunction = (userId: string) => void; let anonUserIdSetter: AnonUserFunction | null = null; @@ -136,7 +171,7 @@ export class AnonymousUserEventManager { [KEY_CREATE_NEW_FIELDS]: true, [SHARED_PREFS_EVENT_TYPE]: TRACK_EVENT }; - this.storeEventListToLocalStorage(newDataObject, false); + this.storeEventListToLocalStorage(newDataObject); } async trackAnonUpdateUser(payload: UpdateUserParams) { @@ -144,7 +179,7 @@ export class AnonymousUserEventManager { ...payload.dataFields, [SHARED_PREFS_EVENT_TYPE]: UPDATE_USER }; - this.storeEventListToLocalStorage(newDataObject, true); + this.storeUserUpdateToLocalStorage(newDataObject); } async trackAnonPurchaseEvent(payload: TrackPurchaseRequestParams) { @@ -155,7 +190,7 @@ export class AnonymousUserEventManager { [KEY_TOTAL]: payload.total, [SHARED_PREFS_EVENT_TYPE]: TRACK_PURCHASE }; - this.storeEventListToLocalStorage(newDataObject, false); + this.storeEventListToLocalStorage(newDataObject); } async trackAnonUpdateCart(payload: UpdateCartRequestParams) { @@ -165,7 +200,7 @@ export class AnonymousUserEventManager { [KEY_PREFER_USERID]: true, [KEY_CREATED_AT]: this.getCurrentTime() }; - this.storeEventListToLocalStorage(newDataObject, false); + this.storeEventListToLocalStorage(newDataObject); } private checkCriteriaCompletion(): string | null { @@ -173,9 +208,15 @@ export class AnonymousUserEventManager { const localStoredEventList = localStorage.getItem( SHARED_PREFS_EVENT_LIST_KEY ); + const localStoredUserUpdate = localStorage.getItem( + SHARED_PREFS_USER_UPDATE_OBJECT_KEY + ); try { if (criteriaData && localStoredEventList) { - const checker = new CriteriaCompletionChecker(localStoredEventList); + const checker = new CriteriaCompletionChecker( + localStoredEventList, + localStoredUserUpdate + ); return checker.getMatchedCriteria(criteriaData); } } catch (error) { @@ -191,14 +232,11 @@ export class AnonymousUserEventManager { if (!anonymousUsageTracked) return; const userData = localStorage.getItem(SHARED_PREFS_ANON_SESSIONS); - const eventList = localStorage.getItem(SHARED_PREFS_EVENT_LIST_KEY); - const events = eventList ? JSON.parse(eventList) : []; + const strUserUpdate = localStorage.getItem( + SHARED_PREFS_USER_UPDATE_OBJECT_KEY + ); + const dataFields = strUserUpdate ? JSON.parse(strUserUpdate) : {}; - const dataFields = { - ...events.find( - (event: any) => event[SHARED_PREFS_EVENT_TYPE] === UPDATE_USER - ) - }; delete dataFields[SHARED_PREFS_EVENT_TYPE]; const userId = uuidv4(); @@ -238,15 +276,7 @@ export class AnonymousUserEventManager { } }); if (response?.status === 200) { - // Update local storage, remove updateUser from local storage - localStorage.setItem( - SHARED_PREFS_EVENT_LIST_KEY, - JSON.stringify( - events.filter( - (event: any) => event[SHARED_PREFS_EVENT_TYPE] !== UPDATE_USER - ) - ) - ); + localStorage.removeItem(SHARED_PREFS_USER_UPDATE_OBJECT_KEY); const onAnonUserCreated = config.getConfig('onAnonUserCreated'); @@ -267,6 +297,11 @@ export class AnonymousUserEventManager { ? JSON.parse(strTrackEventList) : []; + const strUserUpdate = localStorage.getItem( + SHARED_PREFS_USER_UPDATE_OBJECT_KEY + ); + const userUpdateObject = strUserUpdate ? JSON.parse(strUserUpdate) : {}; + if (trackEventList.length) { trackEventList.forEach( ( @@ -288,10 +323,6 @@ export class AnonymousUserEventManager { this.updateCart(event); break; } - case UPDATE_USER: { - this.updateUser({ dataFields: event }); - break; - } default: break; } @@ -299,20 +330,21 @@ export class AnonymousUserEventManager { } ); } + + if (Object.keys(userUpdateObject).length) { + // eslint-disable-next-line no-param-reassign + delete userUpdateObject[SHARED_PREFS_EVENT_TYPE]; + this.updateUser(userUpdateObject); + } } removeAnonSessionCriteriaData() { localStorage.removeItem(SHARED_PREFS_ANON_SESSIONS); localStorage.removeItem(SHARED_PREFS_EVENT_LIST_KEY); + localStorage.removeItem(SHARED_PREFS_USER_UPDATE_OBJECT_KEY); } - private async storeEventListToLocalStorage( - newDataObject: Record< - any /* eslint-disable-line @typescript-eslint/no-explicit-any */, - any /* eslint-disable-line @typescript-eslint/no-explicit-any */ - >, - shouldOverWrite: boolean - ) { + private async storeEventListToLocalStorage(newDataObject: AnonEventData) { const anonymousUsageTracked = isAnonymousUsageTracked(); if (!anonymousUsageTracked) return; @@ -324,24 +356,7 @@ export class AnonymousUserEventManager { previousDataArray = JSON.parse(strTrackEventList); } - if (shouldOverWrite) { - const trackingType = newDataObject[SHARED_PREFS_EVENT_TYPE]; - const indexToUpdate = previousDataArray.findIndex( - (obj: any) => obj[SHARED_PREFS_EVENT_TYPE] === trackingType - ); - if (indexToUpdate !== -1) { - const dataToUpdate = previousDataArray[indexToUpdate]; - - previousDataArray[indexToUpdate] = { - ...dataToUpdate, - ...newDataObject - }; - } else { - previousDataArray.push(newDataObject); - } - } else { - previousDataArray.push(newDataObject); - } + previousDataArray.push(newDataObject); // - The code below limits the number of events stored in local storage. // - The event list acts as a queue, with the oldest events being deleted @@ -366,6 +381,37 @@ export class AnonymousUserEventManager { } } + private async storeUserUpdateToLocalStorage( + newDataObject: AnonUserUpdateData + ) { + const anonymousUsageTracked = isAnonymousUsageTracked(); + + if (!anonymousUsageTracked) return; + + const strUserUpdate = localStorage.getItem( + SHARED_PREFS_USER_UPDATE_OBJECT_KEY + ); + let userUpdateObject = {}; + + if (strUserUpdate) { + userUpdateObject = JSON.parse(strUserUpdate); + } + + userUpdateObject = { + ...userUpdateObject, + ...newDataObject + }; + + localStorage.setItem( + SHARED_PREFS_USER_UPDATE_OBJECT_KEY, + JSON.stringify(userUpdateObject) + ); + const criteriaId = this.checkCriteriaCompletion(); + if (criteriaId !== null) { + this.createAnonymousUser(criteriaId); + } + } + private getCurrentTime = () => { const dateInMillis = new Date().getTime(); const dateInSeconds = Math.floor(dateInMillis / 1000); diff --git a/src/anonymousUserTracking/complexCriteria.test.ts b/src/anonymousUserTracking/complexCriteria.test.ts index 8d8eb7cd..95483ee2 100644 --- a/src/anonymousUserTracking/complexCriteria.test.ts +++ b/src/anonymousUserTracking/complexCriteria.test.ts @@ -1,4 +1,7 @@ -import { SHARED_PREFS_EVENT_LIST_KEY } from '../constants'; +import { + SHARED_PREFS_EVENT_LIST_KEY, + SHARED_PREFS_USER_UPDATE_OBJECT_KEY +} from '../constants'; import CriteriaCompletionChecker from './criteriaCompletionChecker'; const localStorageMock = { @@ -28,16 +31,18 @@ describe('complexCriteria', () => { ], total: 50, eventType: 'purchase' - }, - { - dataFields: { - preferred_car_models: 'Honda', - country: 'Japan' - }, - eventType: 'user' } ]); } + if (key === SHARED_PREFS_USER_UPDATE_OBJECT_KEY) { + return JSON.stringify({ + dataFields: { + preferred_car_models: 'Honda', + country: 'Japan' + }, + eventType: 'user' + }); + } return null; }); @@ -45,8 +50,13 @@ describe('complexCriteria', () => { SHARED_PREFS_EVENT_LIST_KEY ); + const localStoredUserUpdate = localStorage.getItem( + SHARED_PREFS_USER_UPDATE_OBJECT_KEY + ); + const checker = new CriteriaCompletionChecker( - localStoredEventList === null ? '' : localStoredEventList + localStoredEventList === null ? '' : localStoredEventList, + localStoredUserUpdate === null ? '' : localStoredUserUpdate ); const result = checker.getMatchedCriteria( JSON.stringify({ @@ -193,15 +203,17 @@ describe('complexCriteria', () => { ], total: 50, eventType: 'purchase' - }, - { - dataFields: { - preferred_car_models: 'Honda' - }, - eventType: 'user' } ]); } + if (key === SHARED_PREFS_USER_UPDATE_OBJECT_KEY) { + return JSON.stringify({ + dataFields: { + preferred_car_models: 'Honda' + }, + eventType: 'user' + }); + } return null; }); @@ -209,8 +221,12 @@ describe('complexCriteria', () => { SHARED_PREFS_EVENT_LIST_KEY ); + const localStoredUserUpdate = localStorage.getItem( + SHARED_PREFS_USER_UPDATE_OBJECT_KEY + ); const checker = new CriteriaCompletionChecker( - localStoredEventList === null ? '' : localStoredEventList + localStoredEventList === null ? '' : localStoredEventList, + localStoredUserUpdate === null ? '' : localStoredUserUpdate ); const result = checker.getMatchedCriteria( JSON.stringify({ @@ -355,16 +371,19 @@ describe('complexCriteria', () => { items: [{ id: '12', name: 'Mocha', price: 90, quantity: 50 }], total: 50, eventType: 'cartUpdate' - }, - { - dataFields: { - preferred_car_models: 'Subaru', - country: 'USA' - }, - eventType: 'user' } ]); } + + if (key === SHARED_PREFS_USER_UPDATE_OBJECT_KEY) { + return JSON.stringify({ + dataFields: { + preferred_car_models: 'Subaru', + country: 'USA' + }, + eventType: 'user' + }); + } return null; }); @@ -372,8 +391,13 @@ describe('complexCriteria', () => { SHARED_PREFS_EVENT_LIST_KEY ); + const localStoredUserUpdate = localStorage.getItem( + SHARED_PREFS_USER_UPDATE_OBJECT_KEY + ); + const checker = new CriteriaCompletionChecker( - localStoredEventList === null ? '' : localStoredEventList + localStoredEventList === null ? '' : localStoredEventList, + localStoredUserUpdate === null ? '' : localStoredUserUpdate ); const result = checker.getMatchedCriteria( JSON.stringify({ @@ -516,16 +540,19 @@ describe('complexCriteria', () => { items: [{ id: '12', name: 'Mocha', price: 90, quantity: 50 }], total: 50, eventType: 'cartUpdate' - }, - { - dataFields: { - preferred_car_models: 'Subaru', - country: 'USA' - }, - eventType: 'user' } ]); } + + if (key === SHARED_PREFS_USER_UPDATE_OBJECT_KEY) { + return JSON.stringify({ + dataFields: { + preferred_car_models: 'Subaru', + country: 'USA' + }, + eventType: 'user' + }); + } return null; }); @@ -533,8 +560,13 @@ describe('complexCriteria', () => { SHARED_PREFS_EVENT_LIST_KEY ); + const localStoredUserUpdate = localStorage.getItem( + SHARED_PREFS_USER_UPDATE_OBJECT_KEY + ); + const checker = new CriteriaCompletionChecker( - localStoredEventList === null ? '' : localStoredEventList + localStoredEventList === null ? '' : localStoredEventList, + localStoredUserUpdate === null ? '' : localStoredUserUpdate ); const result = checker.getMatchedCriteria( JSON.stringify({ @@ -683,14 +715,6 @@ describe('complexCriteria', () => { total: 50, eventType: 'cartUpdate' }, - - { - dataFields: { - preferred_car_models: 'Subaru', - country: 'USA' - }, - eventType: 'user' - }, { eventName: 'button-clicked', dataFields: { @@ -712,6 +736,15 @@ describe('complexCriteria', () => { } ]); } + if (key === SHARED_PREFS_USER_UPDATE_OBJECT_KEY) { + return JSON.stringify({ + dataFields: { + preferred_car_models: 'Subaru', + country: 'USA' + }, + eventType: 'user' + }); + } return null; }); @@ -719,8 +752,13 @@ describe('complexCriteria', () => { SHARED_PREFS_EVENT_LIST_KEY ); + const localStoredUserUpdate = localStorage.getItem( + SHARED_PREFS_USER_UPDATE_OBJECT_KEY + ); + const checker = new CriteriaCompletionChecker( - localStoredEventList === null ? '' : localStoredEventList + localStoredEventList === null ? '' : localStoredEventList, + localStoredUserUpdate === null ? '' : localStoredUserUpdate ); const result = checker.getMatchedCriteria( JSON.stringify({ @@ -863,14 +901,6 @@ describe('complexCriteria', () => { total: 50, eventType: 'cartUpdate' }, - - { - dataFields: { - preferred_car_models: 'Subaru', - country: 'USA' - }, - eventType: 'user' - }, { eventName: 'button-clicked', dataFields: { @@ -880,6 +910,15 @@ describe('complexCriteria', () => { } ]); } + if (key === SHARED_PREFS_USER_UPDATE_OBJECT_KEY) { + return JSON.stringify({ + dataFields: { + preferred_car_models: 'Subaru', + country: 'USA' + }, + eventType: 'user' + }); + } return null; }); @@ -887,8 +926,13 @@ describe('complexCriteria', () => { SHARED_PREFS_EVENT_LIST_KEY ); + const localStoredUserUpdate = localStorage.getItem( + SHARED_PREFS_USER_UPDATE_OBJECT_KEY + ); + const checker = new CriteriaCompletionChecker( - localStoredEventList === null ? '' : localStoredEventList + localStoredEventList === null ? '' : localStoredEventList, + localStoredUserUpdate === null ? '' : localStoredUserUpdate ); const result = checker.getMatchedCriteria( JSON.stringify({ @@ -1123,7 +1167,7 @@ describe('complexCriteria', () => { { items: [ { id: '12', name: 'sneakers', price: 10, quantity: 2 }, - { id: '13', name: 'slippers', price: 10, quantity: 3 } + { id: '13', name: 'slippers', price: 10, quantity: 2 } ], total: 2, eventType: 'purchase' diff --git a/src/anonymousUserTracking/criteriaCompletionChecker.ts b/src/anonymousUserTracking/criteriaCompletionChecker.ts index 82ba844c..8c4866c7 100644 --- a/src/anonymousUserTracking/criteriaCompletionChecker.ts +++ b/src/anonymousUserTracking/criteriaCompletionChecker.ts @@ -6,11 +6,11 @@ import { TRACK_UPDATE_CART, TRACK_EVENT, UPDATE_CART, - UPDATE_USER, KEY_EVENT_NAME, UPDATECART_ITEM_PREFIX, PURCHASE_ITEM_PREFIX, - PURCHASE_ITEM + PURCHASE_ITEM, + UPDATE_USER } from '../constants'; interface SearchQuery { @@ -38,8 +38,19 @@ interface Criteria { class CriteriaCompletionChecker { private localStoredEventList: any[]; - constructor(localStoredEventList: string) { - this.localStoredEventList = JSON.parse(localStoredEventList); + private localStoredUserUpdate: any; + + constructor( + localStoredEventList: string, + localStoredUserUpdate?: string | null + ) { + this.localStoredEventList = + (localStoredEventList !== '' && JSON.parse(localStoredEventList)) || []; + this.localStoredUserUpdate = + (localStoredUserUpdate && + localStoredUserUpdate !== '' && + JSON.parse(localStoredUserUpdate)) || + {}; } public getMatchedCriteria(criteriaData: string): string | null { @@ -169,8 +180,8 @@ class CriteriaCompletionChecker { this.localStoredEventList.forEach((localEventData) => { if ( localEventData[SHARED_PREFS_EVENT_TYPE] && - (localEventData[SHARED_PREFS_EVENT_TYPE] === UPDATE_USER || - localEventData[SHARED_PREFS_EVENT_TYPE] === TRACK_EVENT) + (localEventData[SHARED_PREFS_EVENT_TYPE] === TRACK_EVENT || + localEventData[SHARED_PREFS_EVENT_TYPE] === UPDATE_USER) ) { const updatedItem: any = localEventData; if (localEventData.dataFields) { @@ -183,6 +194,19 @@ class CriteriaCompletionChecker { nonPurchaseEvents.push(updatedItem); } }); + + if (Object.keys(this.localStoredUserUpdate).length) { + const localEventData = { ...this.localStoredUserUpdate }; + if (localEventData.dataFields) { + Object.keys(localEventData.dataFields).forEach((key) => { + localEventData[key] = localEventData.dataFields[key]; + }); + // eslint-disable-next-line no-param-reassign + delete localEventData.dataFields; + } + nonPurchaseEvents.push(localEventData); + } + return nonPurchaseEvents; } @@ -412,15 +436,22 @@ class CriteriaCompletionChecker { private getFieldValue(data: any, field: string): any { const fields: string[] = field.split('.'); + let startingData = data; + if (data?.eventType === TRACK_EVENT && data?.eventName === fields[0]) { fields.shift(); + // After stripping the event name, look for the remaining path in dataFields if it exists + if (data.dataFields) { + startingData = data.dataFields; + } } + return fields.reduce( (value, currentField) => value && value[currentField] !== undefined ? value[currentField] : undefined, - data + startingData ); } diff --git a/src/anonymousUserTracking/tests/combinationLogicCriteria.test.ts b/src/anonymousUserTracking/tests/combinationLogicCriteria.test.ts index 17d339bb..b4a8e9d1 100644 --- a/src/anonymousUserTracking/tests/combinationLogicCriteria.test.ts +++ b/src/anonymousUserTracking/tests/combinationLogicCriteria.test.ts @@ -1,4 +1,7 @@ -import { SHARED_PREFS_EVENT_LIST_KEY } from '../../constants'; +import { + SHARED_PREFS_EVENT_LIST_KEY, + SHARED_PREFS_USER_UPDATE_OBJECT_KEY +} from '../../constants'; import CriteriaCompletionChecker from '../criteriaCompletionChecker'; const localStorageMock = { @@ -19,13 +22,15 @@ describe('CombinationLogicCriteria', () => { { dataFields: { total: 10 }, eventType: 'customEvent' - }, - { - dataFields: { firstName: 'David' }, - eventType: 'user' } ]); } + if (key === SHARED_PREFS_USER_UPDATE_OBJECT_KEY) { + return JSON.stringify({ + dataFields: { firstName: 'David' }, + eventType: 'user' + }); + } return null; }); @@ -33,8 +38,13 @@ describe('CombinationLogicCriteria', () => { SHARED_PREFS_EVENT_LIST_KEY ); + const localStoredUserUpdate = localStorage.getItem( + SHARED_PREFS_USER_UPDATE_OBJECT_KEY + ); + const checker = new CriteriaCompletionChecker( - localStoredEventList === null ? '' : localStoredEventList + localStoredEventList === null ? '' : localStoredEventList, + localStoredUserUpdate === null ? '' : localStoredUserUpdate ); const result = checker.getMatchedCriteria( JSON.stringify({ @@ -101,13 +111,15 @@ describe('CombinationLogicCriteria', () => { { dataFields: { total: 10 }, eventType: 'customEvent' - }, - { - dataFields: { firstName: 'Davidson' }, - eventType: 'user' } ]); } + if (key === SHARED_PREFS_USER_UPDATE_OBJECT_KEY) { + return JSON.stringify({ + dataFields: { firstName: 'Davidson' }, + eventType: 'user' + }); + } return null; }); @@ -115,8 +127,13 @@ describe('CombinationLogicCriteria', () => { SHARED_PREFS_EVENT_LIST_KEY ); + const localStoredUserUpdate = localStorage.getItem( + SHARED_PREFS_USER_UPDATE_OBJECT_KEY + ); + const checker = new CriteriaCompletionChecker( - localStoredEventList === null ? '' : localStoredEventList + localStoredEventList === null ? '' : localStoredEventList, + localStoredUserUpdate === null ? '' : localStoredUserUpdate ); const result = checker.getMatchedCriteria( JSON.stringify({ @@ -183,13 +200,15 @@ describe('CombinationLogicCriteria', () => { { dataFields: { total: 10 }, eventType: 'customEvent' - }, - { - dataFields: { firstName: 'David' }, - eventType: 'user' } ]); } + if (key === SHARED_PREFS_USER_UPDATE_OBJECT_KEY) { + return JSON.stringify({ + dataFields: { firstName: 'David' }, + eventType: 'user' + }); + } return null; }); @@ -197,8 +216,13 @@ describe('CombinationLogicCriteria', () => { SHARED_PREFS_EVENT_LIST_KEY ); + const localStoredUserUpdate = localStorage.getItem( + SHARED_PREFS_USER_UPDATE_OBJECT_KEY + ); + const checker = new CriteriaCompletionChecker( - localStoredEventList === null ? '' : localStoredEventList + localStoredEventList === null ? '' : localStoredEventList, + localStoredUserUpdate === null ? '' : localStoredUserUpdate ); const result = checker.getMatchedCriteria( JSON.stringify({ @@ -265,13 +289,15 @@ describe('CombinationLogicCriteria', () => { { dataFields: { total: 101 }, eventType: 'customEvent' - }, - { - dataFields: { firstName: 'Davidson' }, - eventType: 'user' } ]); } + if (key === SHARED_PREFS_USER_UPDATE_OBJECT_KEY) { + return JSON.stringify({ + dataFields: { firstName: 'Davidson' }, + eventType: 'user' + }); + } return null; }); @@ -279,8 +305,13 @@ describe('CombinationLogicCriteria', () => { SHARED_PREFS_EVENT_LIST_KEY ); + const localStoredUserUpdate = localStorage.getItem( + SHARED_PREFS_USER_UPDATE_OBJECT_KEY + ); + const checker = new CriteriaCompletionChecker( - localStoredEventList === null ? '' : localStoredEventList + localStoredEventList === null ? '' : localStoredEventList, + localStoredUserUpdate === null ? '' : localStoredUserUpdate ); const result = checker.getMatchedCriteria( JSON.stringify({ @@ -350,13 +381,15 @@ describe('CombinationLogicCriteria', () => { total: 10 }, eventType: 'customEvent' - }, - { - dataFields: { firstName: 'Davidson' }, - eventType: 'user' } ]); } + if (key === SHARED_PREFS_USER_UPDATE_OBJECT_KEY) { + return JSON.stringify({ + dataFields: { firstName: 'Davidson' }, + eventType: 'user' + }); + } return null; }); @@ -364,8 +397,13 @@ describe('CombinationLogicCriteria', () => { SHARED_PREFS_EVENT_LIST_KEY ); + const localStoredUserUpdate = localStorage.getItem( + SHARED_PREFS_USER_UPDATE_OBJECT_KEY + ); + const checker = new CriteriaCompletionChecker( - localStoredEventList === null ? '' : localStoredEventList + localStoredEventList === null ? '' : localStoredEventList, + localStoredUserUpdate === null ? '' : localStoredUserUpdate ); const result = checker.getMatchedCriteria( JSON.stringify({ @@ -432,13 +470,15 @@ describe('CombinationLogicCriteria', () => { { dataFields: { total: 1 }, eventType: 'customEvent' - }, - { - dataFields: { firstName: 'David' }, - eventType: 'user' } ]); } + if (key === SHARED_PREFS_USER_UPDATE_OBJECT_KEY) { + return JSON.stringify({ + dataFields: { firstName: 'David' }, + eventType: 'user' + }); + } return null; }); @@ -446,8 +486,13 @@ describe('CombinationLogicCriteria', () => { SHARED_PREFS_EVENT_LIST_KEY ); + const localStoredUserUpdate = localStorage.getItem( + SHARED_PREFS_USER_UPDATE_OBJECT_KEY + ); + const checker = new CriteriaCompletionChecker( - localStoredEventList === null ? '' : localStoredEventList + localStoredEventList === null ? '' : localStoredEventList, + localStoredUserUpdate === null ? '' : localStoredUserUpdate ); const result = checker.getMatchedCriteria( JSON.stringify({ @@ -514,13 +559,15 @@ describe('CombinationLogicCriteria', () => { { items: [{ name: 'fried', id: 'fried', price: 10, quantity: 2 }], eventType: 'cartUpdate' - }, - { - dataFields: { firstName: 'David' }, - eventType: 'user' } ]); } + if (key === SHARED_PREFS_USER_UPDATE_OBJECT_KEY) { + return JSON.stringify({ + dataFields: { firstName: 'David' }, + eventType: 'user' + }); + } return null; }); @@ -528,8 +575,13 @@ describe('CombinationLogicCriteria', () => { SHARED_PREFS_EVENT_LIST_KEY ); + const localStoredUserUpdate = localStorage.getItem( + SHARED_PREFS_USER_UPDATE_OBJECT_KEY + ); + const checker = new CriteriaCompletionChecker( - localStoredEventList === null ? '' : localStoredEventList + localStoredEventList === null ? '' : localStoredEventList, + localStoredUserUpdate === null ? '' : localStoredUserUpdate ); const result = checker.getMatchedCriteria( JSON.stringify({ @@ -596,13 +648,15 @@ describe('CombinationLogicCriteria', () => { { items: [{ name: 'chicken', id: 'chicken', price: 10, quantity: 2 }], eventType: 'cartUpdate' - }, - { - dataFields: { firstName: 'Davidson' }, - eventType: 'user' } ]); } + if (key === SHARED_PREFS_USER_UPDATE_OBJECT_KEY) { + return JSON.stringify({ + dataFields: { firstName: 'Davidson' }, + eventType: 'user' + }); + } return null; }); @@ -610,8 +664,13 @@ describe('CombinationLogicCriteria', () => { SHARED_PREFS_EVENT_LIST_KEY ); + const localStoredUserUpdate = localStorage.getItem( + SHARED_PREFS_USER_UPDATE_OBJECT_KEY + ); + const checker = new CriteriaCompletionChecker( - localStoredEventList === null ? '' : localStoredEventList + localStoredEventList === null ? '' : localStoredEventList, + localStoredUserUpdate === null ? '' : localStoredUserUpdate ); const result = checker.getMatchedCriteria( JSON.stringify({ @@ -678,13 +737,15 @@ describe('CombinationLogicCriteria', () => { { items: [{ name: 'fried', id: 'fried', price: 10, quantity: 2 }], eventType: 'cartUpdate' - }, - { - dataFields: { firstName: 'David' }, - eventType: 'user' } ]); } + if (key === SHARED_PREFS_USER_UPDATE_OBJECT_KEY) { + return JSON.stringify({ + dataFields: { firstName: 'David' }, + eventType: 'user' + }); + } return null; }); @@ -692,8 +753,13 @@ describe('CombinationLogicCriteria', () => { SHARED_PREFS_EVENT_LIST_KEY ); + const localStoredUserUpdate = localStorage.getItem( + SHARED_PREFS_USER_UPDATE_OBJECT_KEY + ); + const checker = new CriteriaCompletionChecker( - localStoredEventList === null ? '' : localStoredEventList + localStoredEventList === null ? '' : localStoredEventList, + localStoredUserUpdate === null ? '' : localStoredUserUpdate ); const result = checker.getMatchedCriteria( JSON.stringify({ @@ -760,13 +826,15 @@ describe('CombinationLogicCriteria', () => { { items: [{ name: 'chicken', id: 'chicken', price: 10, quantity: 2 }], eventType: 'cartUpdate' - }, - { - dataFields: { firstName: 'Davidson' }, - eventType: 'user' } ]); } + if (key === SHARED_PREFS_USER_UPDATE_OBJECT_KEY) { + return JSON.stringify({ + dataFields: { firstName: 'Davidson' }, + eventType: 'user' + }); + } return null; }); @@ -774,8 +842,13 @@ describe('CombinationLogicCriteria', () => { SHARED_PREFS_EVENT_LIST_KEY ); + const localStoredUserUpdate = localStorage.getItem( + SHARED_PREFS_USER_UPDATE_OBJECT_KEY + ); + const checker = new CriteriaCompletionChecker( - localStoredEventList === null ? '' : localStoredEventList + localStoredEventList === null ? '' : localStoredEventList, + localStoredUserUpdate === null ? '' : localStoredUserUpdate ); const result = checker.getMatchedCriteria( JSON.stringify({ @@ -842,13 +915,15 @@ describe('CombinationLogicCriteria', () => { { items: [{ name: 'boiled', id: 'boiled', price: 10, quantity: 2 }], eventType: 'cartUpdate' - }, - { - dataFields: { firstName: 'Davidson' }, - eventType: 'user' } ]); } + if (key === SHARED_PREFS_USER_UPDATE_OBJECT_KEY) { + return JSON.stringify({ + dataFields: { firstName: 'Davidson' }, + eventType: 'user' + }); + } return null; }); @@ -856,8 +931,13 @@ describe('CombinationLogicCriteria', () => { SHARED_PREFS_EVENT_LIST_KEY ); + const localStoredUserUpdate = localStorage.getItem( + SHARED_PREFS_USER_UPDATE_OBJECT_KEY + ); + const checker = new CriteriaCompletionChecker( - localStoredEventList === null ? '' : localStoredEventList + localStoredEventList === null ? '' : localStoredEventList, + localStoredUserUpdate === null ? '' : localStoredUserUpdate ); const result = checker.getMatchedCriteria( JSON.stringify({ @@ -924,13 +1004,15 @@ describe('CombinationLogicCriteria', () => { { items: [{ name: 'fried', id: 'fried', price: 10, quantity: 2 }], eventType: 'cartUpdate' - }, - { - dataFields: { firstName: 'David' }, - eventType: 'user' } ]); } + if (key === SHARED_PREFS_USER_UPDATE_OBJECT_KEY) { + return JSON.stringify({ + dataFields: { firstName: 'David' }, + eventType: 'user' + }); + } return null; }); @@ -938,8 +1020,13 @@ describe('CombinationLogicCriteria', () => { SHARED_PREFS_EVENT_LIST_KEY ); + const localStoredUserUpdate = localStorage.getItem( + SHARED_PREFS_USER_UPDATE_OBJECT_KEY + ); + const checker = new CriteriaCompletionChecker( - localStoredEventList === null ? '' : localStoredEventList + localStoredEventList === null ? '' : localStoredEventList, + localStoredUserUpdate === null ? '' : localStoredUserUpdate ); const result = checker.getMatchedCriteria( JSON.stringify({ diff --git a/src/anonymousUserTracking/tests/compareArrayDataTypes.test.ts b/src/anonymousUserTracking/tests/compareArrayDataTypes.test.ts index 9ee0bfc2..7d7a2582 100644 --- a/src/anonymousUserTracking/tests/compareArrayDataTypes.test.ts +++ b/src/anonymousUserTracking/tests/compareArrayDataTypes.test.ts @@ -1,4 +1,7 @@ -import { SHARED_PREFS_EVENT_LIST_KEY } from '../../constants'; +import { + SHARED_PREFS_EVENT_LIST_KEY, + SHARED_PREFS_USER_UPDATE_OBJECT_KEY +} from '../../constants'; import CriteriaCompletionChecker from '../criteriaCompletionChecker'; import { IS_NOT_ONE_OF_CRITERIA, @@ -31,17 +34,6 @@ describe('compareArrayDataTypes', () => { (localStorage.getItem as jest.Mock).mockImplementation((key) => { if (key === SHARED_PREFS_EVENT_LIST_KEY) { return JSON.stringify([ - { - dataFields: { - milestoneYears: [1996, 1997, 2002, 2020, 2024], - score: [10.5, 11.5, 12.5, 13.5, 14.5], - timestamp: [ - 1722497422151, 1722500235276, 1722500215276, 1722500225276, - 1722500245276 - ] - }, - eventType: 'user' - }, { eventName: 'button-clicked', dataFields: { @@ -51,6 +43,19 @@ describe('compareArrayDataTypes', () => { } ]); } + if (key === SHARED_PREFS_USER_UPDATE_OBJECT_KEY) { + return JSON.stringify({ + dataFields: { + milestoneYears: [1996, 1997, 2002, 2020, 2024], + score: [10.5, 11.5, 12.5, 13.5, 14.5], + timestamp: [ + 1722497422151, 1722500235276, 1722500215276, 1722500225276, + 1722500245276 + ] + }, + eventType: 'user' + }); + } return null; }); @@ -58,8 +63,13 @@ describe('compareArrayDataTypes', () => { SHARED_PREFS_EVENT_LIST_KEY ); + const localStoredUserUpdate = localStorage.getItem( + SHARED_PREFS_USER_UPDATE_OBJECT_KEY + ); + const checker = new CriteriaCompletionChecker( - localStoredEventList === null ? '' : localStoredEventList + localStoredEventList === null ? '' : localStoredEventList, + localStoredUserUpdate === null ? '' : localStoredUserUpdate ); const result = checker.getMatchedCriteria( JSON.stringify(ARRAY_EQUAL_CRITERIA) @@ -71,16 +81,6 @@ describe('compareArrayDataTypes', () => { (localStorage.getItem as jest.Mock).mockImplementation((key) => { if (key === SHARED_PREFS_EVENT_LIST_KEY) { return JSON.stringify([ - { - dataFields: { - milestoneYears: [1996, 1998, 2002, 2020, 2024], - score: [12.5, 13.5, 14.5], - timestamp: [ - 1722497422151, 1722500235276, 1722500225276, 1722500245276 - ] - }, - eventType: 'user' - }, { eventName: 'button-clicked', dataFields: { @@ -90,6 +90,18 @@ describe('compareArrayDataTypes', () => { } ]); } + if (key === SHARED_PREFS_USER_UPDATE_OBJECT_KEY) { + return JSON.stringify({ + dataFields: { + milestoneYears: [1996, 1998, 2002, 2020, 2024], + score: [12.5, 13.5, 14.5], + timestamp: [ + 1722497422151, 1722500235276, 1722500225276, 1722500245276 + ] + }, + eventType: 'user' + }); + } return null; }); @@ -97,8 +109,13 @@ describe('compareArrayDataTypes', () => { SHARED_PREFS_EVENT_LIST_KEY ); + const localStoredUserUpdate = localStorage.getItem( + SHARED_PREFS_USER_UPDATE_OBJECT_KEY + ); + const checker = new CriteriaCompletionChecker( - localStoredEventList === null ? '' : localStoredEventList + localStoredEventList === null ? '' : localStoredEventList, + localStoredUserUpdate === null ? '' : localStoredUserUpdate ); const result = checker.getMatchedCriteria( JSON.stringify(ARRAY_EQUAL_CRITERIA) @@ -111,16 +128,6 @@ describe('compareArrayDataTypes', () => { (localStorage.getItem as jest.Mock).mockImplementation((key) => { if (key === SHARED_PREFS_EVENT_LIST_KEY) { return JSON.stringify([ - { - dataFields: { - milestoneYears: [1996, 1998, 2002, 2020, 2024], - score: [12.5, 13.5, 14.5], - timestamp: [ - 1722497422151, 1722500235276, 1722500225276, 1722500245276 - ] - }, - eventType: 'user' - }, { eventName: 'button-clicked', dataFields: { @@ -130,6 +137,18 @@ describe('compareArrayDataTypes', () => { } ]); } + if (key === SHARED_PREFS_USER_UPDATE_OBJECT_KEY) { + return JSON.stringify({ + dataFields: { + milestoneYears: [1996, 1998, 2002, 2020, 2024], + score: [12.5, 13.5, 14.5], + timestamp: [ + 1722497422151, 1722500235276, 1722500225276, 1722500245276 + ] + }, + eventType: 'user' + }); + } return null; }); @@ -137,8 +156,13 @@ describe('compareArrayDataTypes', () => { SHARED_PREFS_EVENT_LIST_KEY ); + const localStoredUserUpdate = localStorage.getItem( + SHARED_PREFS_USER_UPDATE_OBJECT_KEY + ); + const checker = new CriteriaCompletionChecker( - localStoredEventList === null ? '' : localStoredEventList + localStoredEventList === null ? '' : localStoredEventList, + localStoredUserUpdate === null ? '' : localStoredUserUpdate ); const result = checker.getMatchedCriteria( JSON.stringify(ARRAY_DOES_NOT_EQUAL_CRITERIA) @@ -150,17 +174,6 @@ describe('compareArrayDataTypes', () => { (localStorage.getItem as jest.Mock).mockImplementation((key) => { if (key === SHARED_PREFS_EVENT_LIST_KEY) { return JSON.stringify([ - { - dataFields: { - milestoneYears: [1996, 1997, 2002, 2020, 2024], - score: [10.5, 11.5, 12.5, 13.5, 14.5], - timestamp: [ - 1722497422151, 1722500235276, 1722500215276, 1722500225276, - 1722500245276 - ] - }, - eventType: 'user' - }, { eventName: 'button-clicked', dataFields: { @@ -170,6 +183,19 @@ describe('compareArrayDataTypes', () => { } ]); } + if (key === SHARED_PREFS_USER_UPDATE_OBJECT_KEY) { + return JSON.stringify({ + dataFields: { + milestoneYears: [1996, 1997, 2002, 2020, 2024], + score: [10.5, 11.5, 12.5, 13.5, 14.5], + timestamp: [ + 1722497422151, 1722500235276, 1722500215276, 1722500225276, + 1722500245276 + ] + }, + eventType: 'user' + }); + } return null; }); @@ -177,8 +203,13 @@ describe('compareArrayDataTypes', () => { SHARED_PREFS_EVENT_LIST_KEY ); + const localStoredUserUpdate = localStorage.getItem( + SHARED_PREFS_USER_UPDATE_OBJECT_KEY + ); + const checker = new CriteriaCompletionChecker( - localStoredEventList === null ? '' : localStoredEventList + localStoredEventList === null ? '' : localStoredEventList, + localStoredUserUpdate === null ? '' : localStoredUserUpdate ); const result = checker.getMatchedCriteria( JSON.stringify(ARRAY_DOES_NOT_EQUAL_CRITERIA) @@ -189,25 +220,24 @@ describe('compareArrayDataTypes', () => { // MARK: GreaterThan it('should return criteriaId 285 (compare array GreaterThan)', () => { (localStorage.getItem as jest.Mock).mockImplementation((key) => { - if (key === SHARED_PREFS_EVENT_LIST_KEY) { - return JSON.stringify([ - { - dataFields: { - milestoneYears: [1996, 1998, 2002, 2020, 2024] - }, - eventType: 'user' - } - ]); + if (key === SHARED_PREFS_USER_UPDATE_OBJECT_KEY) { + return JSON.stringify({ + dataFields: { + milestoneYears: [1996, 1998, 2002, 2020, 2024] + }, + eventType: 'user' + }); } return null; }); - const localStoredEventList = localStorage.getItem( - SHARED_PREFS_EVENT_LIST_KEY + const localStoredUserUpdate = localStorage.getItem( + SHARED_PREFS_USER_UPDATE_OBJECT_KEY ); const checker = new CriteriaCompletionChecker( - localStoredEventList === null ? '' : localStoredEventList + '', + localStoredUserUpdate === null ? '' : localStoredUserUpdate ); const result = checker.getMatchedCriteria( JSON.stringify(ARRAY_GREATER_THAN_CRITERIA) @@ -217,25 +247,24 @@ describe('compareArrayDataTypes', () => { it('should return criteriaId null (compare array GreaterThan - No match)', () => { (localStorage.getItem as jest.Mock).mockImplementation((key) => { - if (key === SHARED_PREFS_EVENT_LIST_KEY) { - return JSON.stringify([ - { - dataFields: { - milestoneYears: [1990, 1992, 1994, 1997] - }, - eventType: 'user' - } - ]); + if (key === SHARED_PREFS_USER_UPDATE_OBJECT_KEY) { + return JSON.stringify({ + dataFields: { + milestoneYears: [1990, 1992, 1994, 1997] + }, + eventType: 'user' + }); } return null; }); - const localStoredEventList = localStorage.getItem( - SHARED_PREFS_EVENT_LIST_KEY + const localStoredUserUpdate = localStorage.getItem( + SHARED_PREFS_USER_UPDATE_OBJECT_KEY ); const checker = new CriteriaCompletionChecker( - localStoredEventList === null ? '' : localStoredEventList + '', + localStoredUserUpdate === null ? '' : localStoredUserUpdate ); const result = checker.getMatchedCriteria( JSON.stringify(ARRAY_GREATER_THAN_CRITERIA) @@ -246,25 +275,24 @@ describe('compareArrayDataTypes', () => { // MARK: LessThan it('should return criteriaId 285 (compare array LessThan)', () => { (localStorage.getItem as jest.Mock).mockImplementation((key) => { - if (key === SHARED_PREFS_EVENT_LIST_KEY) { - return JSON.stringify([ - { - dataFields: { - milestoneYears: [1990, 1992, 1994, 1996, 1998] - }, - eventType: 'user' - } - ]); + if (key === SHARED_PREFS_USER_UPDATE_OBJECT_KEY) { + return JSON.stringify({ + dataFields: { + milestoneYears: [1990, 1992, 1994, 1996, 1998] + }, + eventType: 'user' + }); } return null; }); - const localStoredEventList = localStorage.getItem( - SHARED_PREFS_EVENT_LIST_KEY + const localStoredUserUpdate = localStorage.getItem( + SHARED_PREFS_USER_UPDATE_OBJECT_KEY ); const checker = new CriteriaCompletionChecker( - localStoredEventList === null ? '' : localStoredEventList + '', + localStoredUserUpdate === null ? '' : localStoredUserUpdate ); const result = checker.getMatchedCriteria( JSON.stringify(ARRAY_LESS_THAN_CRITERIA) @@ -274,25 +302,24 @@ describe('compareArrayDataTypes', () => { it('should return criteriaId null (compare array LessThan - No match)', () => { (localStorage.getItem as jest.Mock).mockImplementation((key) => { - if (key === SHARED_PREFS_EVENT_LIST_KEY) { - return JSON.stringify([ - { - dataFields: { - milestoneYears: [1997, 1999, 2002, 2004] - }, - eventType: 'user' - } - ]); + if (key === SHARED_PREFS_USER_UPDATE_OBJECT_KEY) { + return JSON.stringify({ + dataFields: { + milestoneYears: [1997, 1999, 2002, 2004] + }, + eventType: 'user' + }); } return null; }); - const localStoredEventList = localStorage.getItem( - SHARED_PREFS_EVENT_LIST_KEY + const localStoredUserUpdate = localStorage.getItem( + SHARED_PREFS_USER_UPDATE_OBJECT_KEY ); const checker = new CriteriaCompletionChecker( - localStoredEventList === null ? '' : localStoredEventList + '', + localStoredUserUpdate === null ? '' : localStoredUserUpdate ); const result = checker.getMatchedCriteria( JSON.stringify(ARRAY_LESS_THAN_CRITERIA) @@ -303,25 +330,24 @@ describe('compareArrayDataTypes', () => { // MARK: GreaterThanOrEqualTo it('should return criteriaId 285 (compare array GreaterThanOrEqualTo)', () => { (localStorage.getItem as jest.Mock).mockImplementation((key) => { - if (key === SHARED_PREFS_EVENT_LIST_KEY) { - return JSON.stringify([ - { - dataFields: { - milestoneYears: [1997, 1998, 2002, 2020, 2024] - }, - eventType: 'user' - } - ]); + if (key === SHARED_PREFS_USER_UPDATE_OBJECT_KEY) { + return JSON.stringify({ + dataFields: { + milestoneYears: [1997, 1998, 2002, 2020, 2024] + }, + eventType: 'user' + }); } return null; }); - const localStoredEventList = localStorage.getItem( - SHARED_PREFS_EVENT_LIST_KEY + const localStoredUserUpdate = localStorage.getItem( + SHARED_PREFS_USER_UPDATE_OBJECT_KEY ); const checker = new CriteriaCompletionChecker( - localStoredEventList === null ? '' : localStoredEventList + '', + localStoredUserUpdate === null ? '' : localStoredUserUpdate ); const result = checker.getMatchedCriteria( JSON.stringify(ARRAY_GREATER_THAN_EQUAL_TO_CRITERIA) @@ -331,25 +357,24 @@ describe('compareArrayDataTypes', () => { it('should return criteriaId null (compare array GreaterThanOrEqualTo - No match)', () => { (localStorage.getItem as jest.Mock).mockImplementation((key) => { - if (key === SHARED_PREFS_EVENT_LIST_KEY) { - return JSON.stringify([ - { - dataFields: { - milestoneYears: [1990, 1992, 1994, 1996] - }, - eventType: 'user' - } - ]); + if (key === SHARED_PREFS_USER_UPDATE_OBJECT_KEY) { + return JSON.stringify({ + dataFields: { + milestoneYears: [1990, 1992, 1994, 1996] + }, + eventType: 'user' + }); } return null; }); - const localStoredEventList = localStorage.getItem( - SHARED_PREFS_EVENT_LIST_KEY + const localStoredUserUpdate = localStorage.getItem( + SHARED_PREFS_USER_UPDATE_OBJECT_KEY ); const checker = new CriteriaCompletionChecker( - localStoredEventList === null ? '' : localStoredEventList + '', + localStoredUserUpdate === null ? '' : localStoredUserUpdate ); const result = checker.getMatchedCriteria( JSON.stringify(ARRAY_GREATER_THAN_EQUAL_TO_CRITERIA) @@ -360,25 +385,24 @@ describe('compareArrayDataTypes', () => { // MARK: LessThanOrEqualTo it('should return criteriaId 285 (compare array LessThanOrEqualTo)', () => { (localStorage.getItem as jest.Mock).mockImplementation((key) => { - if (key === SHARED_PREFS_EVENT_LIST_KEY) { - return JSON.stringify([ - { - dataFields: { - milestoneYears: [1990, 1992, 1994, 1996, 1998] - }, - eventType: 'user' - } - ]); + if (key === SHARED_PREFS_USER_UPDATE_OBJECT_KEY) { + return JSON.stringify({ + dataFields: { + milestoneYears: [1990, 1992, 1994, 1996, 1998] + }, + eventType: 'user' + }); } return null; }); - const localStoredEventList = localStorage.getItem( - SHARED_PREFS_EVENT_LIST_KEY + const localStoredUserUpdate = localStorage.getItem( + SHARED_PREFS_USER_UPDATE_OBJECT_KEY ); const checker = new CriteriaCompletionChecker( - localStoredEventList === null ? '' : localStoredEventList + '', + localStoredUserUpdate === null ? '' : localStoredUserUpdate ); const result = checker.getMatchedCriteria( JSON.stringify(ARRAY_LESS_THAN_EQUAL_TO_CRITERIA) @@ -388,25 +412,24 @@ describe('compareArrayDataTypes', () => { it('should return criteriaId null (compare array LessThanOrEqualTo - No match)', () => { (localStorage.getItem as jest.Mock).mockImplementation((key) => { - if (key === SHARED_PREFS_EVENT_LIST_KEY) { - return JSON.stringify([ - { - dataFields: { - milestoneYears: [1998, 1999, 2002, 2004] - }, - eventType: 'user' - } - ]); + if (key === SHARED_PREFS_USER_UPDATE_OBJECT_KEY) { + return JSON.stringify({ + dataFields: { + milestoneYears: [1998, 1999, 2002, 2004] + }, + eventType: 'user' + }); } return null; }); - const localStoredEventList = localStorage.getItem( - SHARED_PREFS_EVENT_LIST_KEY + const localStoredUserUpdate = localStorage.getItem( + SHARED_PREFS_USER_UPDATE_OBJECT_KEY ); const checker = new CriteriaCompletionChecker( - localStoredEventList === null ? '' : localStoredEventList + '', + localStoredUserUpdate === null ? '' : localStoredUserUpdate ); const result = checker.getMatchedCriteria( JSON.stringify(ARRAY_LESS_THAN_EQUAL_TO_CRITERIA) @@ -417,33 +440,32 @@ describe('compareArrayDataTypes', () => { // MARK: Contains it('should return criteriaId 285 (compare array Contains)', () => { (localStorage.getItem as jest.Mock).mockImplementation((key) => { - if (key === SHARED_PREFS_EVENT_LIST_KEY) { - return JSON.stringify([ - { - dataFields: { - addresses: [ - 'New York, US', - 'San Francisco, US', - 'San Diego, US', - 'Los Angeles, US', - 'Tokyo, JP', - 'Berlin, DE', - 'London, GB' - ] - }, - eventType: 'user' - } - ]); + if (key === SHARED_PREFS_USER_UPDATE_OBJECT_KEY) { + return JSON.stringify({ + dataFields: { + addresses: [ + 'New York, US', + 'San Francisco, US', + 'San Diego, US', + 'Los Angeles, US', + 'Tokyo, JP', + 'Berlin, DE', + 'London, GB' + ] + }, + eventType: 'user' + }); } return null; }); - const localStoredEventList = localStorage.getItem( - SHARED_PREFS_EVENT_LIST_KEY + const localStoredUserUpdate = localStorage.getItem( + SHARED_PREFS_USER_UPDATE_OBJECT_KEY ); const checker = new CriteriaCompletionChecker( - localStoredEventList === null ? '' : localStoredEventList + '', + localStoredUserUpdate === null ? '' : localStoredUserUpdate ); const result = checker.getMatchedCriteria( JSON.stringify(ARRAY_CONTAINS_CRITERIA) @@ -453,25 +475,24 @@ describe('compareArrayDataTypes', () => { it('should return criteriaId null (compare array Contains - No match)', () => { (localStorage.getItem as jest.Mock).mockImplementation((key) => { - if (key === SHARED_PREFS_EVENT_LIST_KEY) { - return JSON.stringify([ - { - dataFields: { - addresses: ['Tokyo, JP', 'Berlin, DE', 'London, GB'] - }, - eventType: 'user' - } - ]); + if (key === SHARED_PREFS_USER_UPDATE_OBJECT_KEY) { + return JSON.stringify({ + dataFields: { + addresses: ['Tokyo, JP', 'Berlin, DE', 'London, GB'] + }, + eventType: 'user' + }); } return null; }); - const localStoredEventList = localStorage.getItem( - SHARED_PREFS_EVENT_LIST_KEY + const localStoredUserUpdate = localStorage.getItem( + SHARED_PREFS_USER_UPDATE_OBJECT_KEY ); const checker = new CriteriaCompletionChecker( - localStoredEventList === null ? '' : localStoredEventList + '', + localStoredUserUpdate === null ? '' : localStoredUserUpdate ); const result = checker.getMatchedCriteria( JSON.stringify(ARRAY_CONTAINS_CRITERIA) @@ -482,33 +503,32 @@ describe('compareArrayDataTypes', () => { // MARK: StartsWith it('should return criteriaId 285 (compare array StartsWith)', () => { (localStorage.getItem as jest.Mock).mockImplementation((key) => { - if (key === SHARED_PREFS_EVENT_LIST_KEY) { - return JSON.stringify([ - { - dataFields: { - addresses: [ - 'US, New York', - 'US, San Francisco', - 'US, San Diego', - 'US, Los Angeles', - 'JP, Tokyo', - 'DE, Berlin', - 'GB, London' - ] - }, - eventType: 'user' - } - ]); + if (key === SHARED_PREFS_USER_UPDATE_OBJECT_KEY) { + return JSON.stringify({ + dataFields: { + addresses: [ + 'US, New York', + 'US, San Francisco', + 'US, San Diego', + 'US, Los Angeles', + 'JP, Tokyo', + 'DE, Berlin', + 'GB, London' + ] + }, + eventType: 'user' + }); } return null; }); - const localStoredEventList = localStorage.getItem( - SHARED_PREFS_EVENT_LIST_KEY + const localStoredUserUpdate = localStorage.getItem( + SHARED_PREFS_USER_UPDATE_OBJECT_KEY ); const checker = new CriteriaCompletionChecker( - localStoredEventList === null ? '' : localStoredEventList + '', + localStoredUserUpdate === null ? '' : localStoredUserUpdate ); const result = checker.getMatchedCriteria( JSON.stringify(ARRAY_STARTSWITH_CRITERIA) @@ -518,25 +538,24 @@ describe('compareArrayDataTypes', () => { it('should return criteriaId null (compare array StartsWith - No match)', () => { (localStorage.getItem as jest.Mock).mockImplementation((key) => { - if (key === SHARED_PREFS_EVENT_LIST_KEY) { - return JSON.stringify([ - { - dataFields: { - addresses: ['JP, Tokyo', 'DE, Berlin', 'GB, London'] - }, - eventType: 'user' - } - ]); + if (key === SHARED_PREFS_USER_UPDATE_OBJECT_KEY) { + return JSON.stringify({ + dataFields: { + addresses: ['JP, Tokyo', 'DE, Berlin', 'GB, London'] + }, + eventType: 'user' + }); } return null; }); - const localStoredEventList = localStorage.getItem( - SHARED_PREFS_EVENT_LIST_KEY + const localStoredUserUpdate = localStorage.getItem( + SHARED_PREFS_USER_UPDATE_OBJECT_KEY ); const checker = new CriteriaCompletionChecker( - localStoredEventList === null ? '' : localStoredEventList + '', + localStoredUserUpdate === null ? '' : localStoredUserUpdate ); const result = checker.getMatchedCriteria( JSON.stringify(ARRAY_STARTSWITH_CRITERIA) @@ -547,33 +566,32 @@ describe('compareArrayDataTypes', () => { // MARK: MatchesRegex it('should return criteriaId 285 (compare array MatchesRegex)', () => { (localStorage.getItem as jest.Mock).mockImplementation((key) => { - if (key === SHARED_PREFS_EVENT_LIST_KEY) { - return JSON.stringify([ - { - dataFields: { - addresses: [ - 'US, New York', - 'US, San Francisco', - 'US, San Diego', - 'US, Los Angeles', - 'JP, Tokyo', - 'DE, Berlin', - 'GB, London' - ] - }, - eventType: 'user' - } - ]); + if (key === SHARED_PREFS_USER_UPDATE_OBJECT_KEY) { + return JSON.stringify({ + dataFields: { + addresses: [ + 'US, New York', + 'US, San Francisco', + 'US, San Diego', + 'US, Los Angeles', + 'JP, Tokyo', + 'DE, Berlin', + 'GB, London' + ] + }, + eventType: 'user' + }); } return null; }); - const localStoredEventList = localStorage.getItem( - SHARED_PREFS_EVENT_LIST_KEY + const localStoredUserUpdate = localStorage.getItem( + SHARED_PREFS_USER_UPDATE_OBJECT_KEY ); const checker = new CriteriaCompletionChecker( - localStoredEventList === null ? '' : localStoredEventList + '', + localStoredUserUpdate === null ? '' : localStoredUserUpdate ); const result = checker.getMatchedCriteria( @@ -584,30 +602,28 @@ describe('compareArrayDataTypes', () => { it('should return criteriaId null (compare array MatchesRegex - No match)', () => { (localStorage.getItem as jest.Mock).mockImplementation((key) => { - if (key === SHARED_PREFS_EVENT_LIST_KEY) { - return JSON.stringify([ - { - dataFields: { - addresses: [ - 'US, New York', - 'US, San Francisco', - 'US, San Diego', - 'US, Los Angeles' - ] - }, - eventType: 'user' - } - ]); + if (key === SHARED_PREFS_USER_UPDATE_OBJECT_KEY) { + return JSON.stringify({ + dataFields: { + addresses: [ + 'US, New York', + 'US, San Francisco', + 'US, San Diego', + 'US, Los Angeles' + ] + }, + eventType: 'user' + }); } return null; }); - const localStoredEventList = localStorage.getItem( - SHARED_PREFS_EVENT_LIST_KEY + const localStoredUserUpdate = localStorage.getItem( + SHARED_PREFS_USER_UPDATE_OBJECT_KEY ); const checker = new CriteriaCompletionChecker( - localStoredEventList === null ? '' : localStoredEventList + localStoredUserUpdate === null ? '' : localStoredUserUpdate ); const result = checker.getMatchedCriteria( @@ -619,26 +635,25 @@ describe('compareArrayDataTypes', () => { // MARK: IsOneOf it('should return criteriaId 299 (compare array IsOneOf)', () => { (localStorage.getItem as jest.Mock).mockImplementation((key) => { - if (key === SHARED_PREFS_EVENT_LIST_KEY) { - return JSON.stringify([ - { - dataFields: { - country: 'China', - addresses: ['US', 'UK', 'JP', 'DE', 'GB'] - }, - eventType: 'user' - } - ]); + if (key === SHARED_PREFS_USER_UPDATE_OBJECT_KEY) { + return JSON.stringify({ + dataFields: { + country: 'China', + addresses: ['US', 'UK', 'JP', 'DE', 'GB'] + }, + eventType: 'user' + }); } return null; }); - const localStoredEventList = localStorage.getItem( - SHARED_PREFS_EVENT_LIST_KEY + const localStoredUserUpdate = localStorage.getItem( + SHARED_PREFS_USER_UPDATE_OBJECT_KEY ); const checker = new CriteriaCompletionChecker( - localStoredEventList === null ? '' : localStoredEventList + '', + localStoredUserUpdate === null ? '' : localStoredUserUpdate ); const result = checker.getMatchedCriteria( @@ -649,26 +664,25 @@ describe('compareArrayDataTypes', () => { it('should return criteriaId null (compare array IsOneOf - No match)', () => { (localStorage.getItem as jest.Mock).mockImplementation((key) => { - if (key === SHARED_PREFS_EVENT_LIST_KEY) { - return JSON.stringify([ - { - dataFields: { - country: 'Korea', - addresses: ['US', 'UK'] - }, - eventType: 'user' - } - ]); + if (key === SHARED_PREFS_USER_UPDATE_OBJECT_KEY) { + return JSON.stringify({ + dataFields: { + country: 'Korea', + addresses: ['US', 'UK'] + }, + eventType: 'user' + }); } return null; }); - const localStoredEventList = localStorage.getItem( - SHARED_PREFS_EVENT_LIST_KEY + const localStoredUserUpdate = localStorage.getItem( + SHARED_PREFS_USER_UPDATE_OBJECT_KEY ); const checker = new CriteriaCompletionChecker( - localStoredEventList === null ? '' : localStoredEventList + '', + localStoredUserUpdate === null ? '' : localStoredUserUpdate ); const result = checker.getMatchedCriteria( @@ -680,26 +694,25 @@ describe('compareArrayDataTypes', () => { // MARK: IsNotOneOf it('should return criteriaId 299 (compare array IsNotOneOf)', () => { (localStorage.getItem as jest.Mock).mockImplementation((key) => { - if (key === SHARED_PREFS_EVENT_LIST_KEY) { - return JSON.stringify([ - { - dataFields: { - country: 'Korea', - addresses: ['US', 'UK'] - }, - eventType: 'user' - } - ]); + if (key === SHARED_PREFS_USER_UPDATE_OBJECT_KEY) { + return JSON.stringify({ + dataFields: { + country: 'Korea', + addresses: ['US', 'UK'] + }, + eventType: 'user' + }); } return null; }); - const localStoredEventList = localStorage.getItem( - SHARED_PREFS_EVENT_LIST_KEY + const localStoredUserUpdate = localStorage.getItem( + SHARED_PREFS_USER_UPDATE_OBJECT_KEY ); const checker = new CriteriaCompletionChecker( - localStoredEventList === null ? '' : localStoredEventList + '', + localStoredUserUpdate === null ? '' : localStoredUserUpdate ); const result = checker.getMatchedCriteria( @@ -710,26 +723,25 @@ describe('compareArrayDataTypes', () => { it('should return criteriaId null (compare array IsNotOneOf - No match)', () => { (localStorage.getItem as jest.Mock).mockImplementation((key) => { - if (key === SHARED_PREFS_EVENT_LIST_KEY) { - return JSON.stringify([ - { - dataFields: { - country: 'China', - addresses: ['US', 'UK', 'JP', 'DE', 'GB'] - }, - eventType: 'user' - } - ]); + if (key === SHARED_PREFS_USER_UPDATE_OBJECT_KEY) { + return JSON.stringify({ + dataFields: { + country: 'China', + addresses: ['US', 'UK', 'JP', 'DE', 'GB'] + }, + eventType: 'user' + }); } return null; }); - const localStoredEventList = localStorage.getItem( - SHARED_PREFS_EVENT_LIST_KEY + const localStoredUserUpdate = localStorage.getItem( + SHARED_PREFS_USER_UPDATE_OBJECT_KEY ); const checker = new CriteriaCompletionChecker( - localStoredEventList === null ? '' : localStoredEventList + '', + localStoredUserUpdate === null ? '' : localStoredUserUpdate ); const result = checker.getMatchedCriteria( diff --git a/src/anonymousUserTracking/tests/complexCriteria.test.ts b/src/anonymousUserTracking/tests/complexCriteria.test.ts index 973262eb..85a84222 100644 --- a/src/anonymousUserTracking/tests/complexCriteria.test.ts +++ b/src/anonymousUserTracking/tests/complexCriteria.test.ts @@ -1,4 +1,7 @@ -import { SHARED_PREFS_EVENT_LIST_KEY } from '../../constants'; +import { + SHARED_PREFS_EVENT_LIST_KEY, + SHARED_PREFS_USER_UPDATE_OBJECT_KEY +} from '../../constants'; import CriteriaCompletionChecker from '../criteriaCompletionChecker'; import { COMPLEX_CRITERIA_1, @@ -33,16 +36,19 @@ describe('complexCriteria', () => { ], total: 50, eventType: 'purchase' - }, - { - dataFields: { - preferred_car_models: 'Honda', - country: 'Japan' - }, - eventType: 'user' } ]); } + + if (key === SHARED_PREFS_USER_UPDATE_OBJECT_KEY) { + return JSON.stringify({ + dataFields: { + preferred_car_models: 'Honda', + country: 'Japan' + }, + eventType: 'user' + }); + } return null; }); @@ -50,8 +56,13 @@ describe('complexCriteria', () => { SHARED_PREFS_EVENT_LIST_KEY ); + const localStoredUserUpdate = localStorage.getItem( + SHARED_PREFS_USER_UPDATE_OBJECT_KEY + ); + const checker = new CriteriaCompletionChecker( - localStoredEventList === null ? '' : localStoredEventList + localStoredEventList === null ? '' : localStoredEventList, + localStoredUserUpdate === null ? '' : localStoredUserUpdate ); const result = checker.getMatchedCriteria( JSON.stringify({ @@ -198,15 +209,18 @@ describe('complexCriteria', () => { ], total: 50, eventType: 'purchase' - }, - { - dataFields: { - preferred_car_models: 'Honda' - }, - eventType: 'user' } ]); } + + if (key === SHARED_PREFS_USER_UPDATE_OBJECT_KEY) { + return JSON.stringify({ + dataFields: { + preferred_car_models: 'Honda' + }, + eventType: 'user' + }); + } return null; }); @@ -214,8 +228,13 @@ describe('complexCriteria', () => { SHARED_PREFS_EVENT_LIST_KEY ); + const localStoredUserUpdate = localStorage.getItem( + SHARED_PREFS_USER_UPDATE_OBJECT_KEY + ); + const checker = new CriteriaCompletionChecker( - localStoredEventList === null ? '' : localStoredEventList + localStoredEventList === null ? '' : localStoredEventList, + localStoredUserUpdate === null ? '' : localStoredUserUpdate ); const result = checker.getMatchedCriteria( JSON.stringify({ @@ -360,16 +379,18 @@ describe('complexCriteria', () => { items: [{ id: '12', name: 'Mocha', price: 90, quantity: 50 }], total: 50, eventType: 'cartUpdate' - }, - { - dataFields: { - preferred_car_models: 'Subaru', - country: 'USA' - }, - eventType: 'user' } ]); } + if (key === SHARED_PREFS_USER_UPDATE_OBJECT_KEY) { + return JSON.stringify({ + dataFields: { + preferred_car_models: 'Subaru', + country: 'USA' + }, + eventType: 'user' + }); + } return null; }); @@ -377,8 +398,13 @@ describe('complexCriteria', () => { SHARED_PREFS_EVENT_LIST_KEY ); + const localStoredUserUpdate = localStorage.getItem( + SHARED_PREFS_USER_UPDATE_OBJECT_KEY + ); + const checker = new CriteriaCompletionChecker( - localStoredEventList === null ? '' : localStoredEventList + localStoredEventList === null ? '' : localStoredEventList, + localStoredUserUpdate === null ? '' : localStoredUserUpdate ); const result = checker.getMatchedCriteria( JSON.stringify({ @@ -521,16 +547,18 @@ describe('complexCriteria', () => { items: [{ id: '12', name: 'Mocha', price: 90, quantity: 50 }], total: 50, eventType: 'cartUpdate' - }, - { - dataFields: { - preferred_car_models: 'Subaru', - country: 'USA' - }, - eventType: 'user' } ]); } + if (key === SHARED_PREFS_USER_UPDATE_OBJECT_KEY) { + return JSON.stringify({ + dataFields: { + preferred_car_models: 'Subaru', + country: 'USA' + }, + eventType: 'user' + }); + } return null; }); @@ -538,8 +566,13 @@ describe('complexCriteria', () => { SHARED_PREFS_EVENT_LIST_KEY ); + const localStoredUserUpdate = localStorage.getItem( + SHARED_PREFS_USER_UPDATE_OBJECT_KEY + ); + const checker = new CriteriaCompletionChecker( - localStoredEventList === null ? '' : localStoredEventList + localStoredEventList === null ? '' : localStoredEventList, + localStoredUserUpdate === null ? '' : localStoredUserUpdate ); const result = checker.getMatchedCriteria( JSON.stringify({ @@ -688,14 +721,6 @@ describe('complexCriteria', () => { total: 50, eventType: 'cartUpdate' }, - - { - dataFields: { - preferred_car_models: 'Subaru', - country: 'USA' - }, - eventType: 'user' - }, { eventName: 'button-clicked', dataFields: { @@ -717,6 +742,15 @@ describe('complexCriteria', () => { } ]); } + if (key === SHARED_PREFS_USER_UPDATE_OBJECT_KEY) { + return JSON.stringify({ + dataFields: { + preferred_car_models: 'Subaru', + country: 'USA' + }, + eventType: 'user' + }); + } return null; }); @@ -724,8 +758,13 @@ describe('complexCriteria', () => { SHARED_PREFS_EVENT_LIST_KEY ); + const localStoredUserUpdate = localStorage.getItem( + SHARED_PREFS_USER_UPDATE_OBJECT_KEY + ); + const checker = new CriteriaCompletionChecker( - localStoredEventList === null ? '' : localStoredEventList + localStoredEventList === null ? '' : localStoredEventList, + localStoredUserUpdate === null ? '' : localStoredUserUpdate ); const result = checker.getMatchedCriteria( JSON.stringify({ @@ -868,14 +907,6 @@ describe('complexCriteria', () => { total: 50, eventType: 'cartUpdate' }, - - { - dataFields: { - preferred_car_models: 'Subaru', - country: 'USA' - }, - eventType: 'user' - }, { eventName: 'button-clicked', dataFields: { @@ -885,6 +916,15 @@ describe('complexCriteria', () => { } ]); } + if (key === SHARED_PREFS_USER_UPDATE_OBJECT_KEY) { + return JSON.stringify({ + dataFields: { + preferred_car_models: 'Subaru', + country: 'USA' + }, + eventType: 'user' + }); + } return null; }); @@ -892,8 +932,13 @@ describe('complexCriteria', () => { SHARED_PREFS_EVENT_LIST_KEY ); + const localStoredUserUpdate = localStorage.getItem( + SHARED_PREFS_USER_UPDATE_OBJECT_KEY + ); + const checker = new CriteriaCompletionChecker( - localStoredEventList === null ? '' : localStoredEventList + localStoredEventList === null ? '' : localStoredEventList, + localStoredUserUpdate === null ? '' : localStoredUserUpdate ); const result = checker.getMatchedCriteria( JSON.stringify({ @@ -1128,7 +1173,7 @@ describe('complexCriteria', () => { { items: [ { id: '12', name: 'sneakers', price: 10, quantity: 2 }, - { id: '13', name: 'slippers', price: 10, quantity: 3 } + { id: '13', name: 'slippers', price: 10, quantity: 2 } ], total: 2, eventType: 'purchase' @@ -1231,15 +1276,17 @@ describe('complexCriteria', () => { { items: [{ id: '12', name: 'Mocha', price: 50.0, quantity: 50 }], eventType: 'cartUpdate' - }, - { - dataFields: { - preferred_car_models: 'Honda' - }, - eventType: 'user' } ]); } + if (key === SHARED_PREFS_USER_UPDATE_OBJECT_KEY) { + return JSON.stringify({ + dataFields: { + preferred_car_models: 'Honda' + }, + eventType: 'user' + }); + } return null; }); @@ -1247,8 +1294,13 @@ describe('complexCriteria', () => { SHARED_PREFS_EVENT_LIST_KEY ); + const localStoredUserUpdate = localStorage.getItem( + SHARED_PREFS_USER_UPDATE_OBJECT_KEY + ); + const checker = new CriteriaCompletionChecker( - localStoredEventList === null ? '' : localStoredEventList + localStoredEventList === null ? '' : localStoredEventList, + localStoredUserUpdate === null ? '' : localStoredUserUpdate ); const result = checker.getMatchedCriteria( JSON.stringify({ @@ -1620,13 +1672,17 @@ describe('complexCriteria', () => { { dataFields: { reason: 'testing', total: 30 }, eventType: 'purchase' - }, - { - dataFields: { firstName: 'Adam' }, - eventType: 'user' } ]); } + if (key === SHARED_PREFS_USER_UPDATE_OBJECT_KEY) { + return JSON.stringify({ + dataFields: { + firstName: 'Adam' + }, + eventType: 'user' + }); + } return null; }); @@ -1634,8 +1690,13 @@ describe('complexCriteria', () => { SHARED_PREFS_EVENT_LIST_KEY ); + const localStoredUserUpdate = localStorage.getItem( + SHARED_PREFS_USER_UPDATE_OBJECT_KEY + ); + const checker = new CriteriaCompletionChecker( - localStoredEventList === null ? '' : localStoredEventList + localStoredEventList === null ? '' : localStoredEventList, + localStoredUserUpdate === null ? '' : localStoredUserUpdate ); const result = checker.getMatchedCriteria( JSON.stringify(COMPLEX_CRITERIA_1) @@ -1647,12 +1708,6 @@ describe('complexCriteria', () => { (localStorage.getItem as jest.Mock).mockImplementation((key) => { if (key === SHARED_PREFS_EVENT_LIST_KEY) { return JSON.stringify([ - { - eventType: 'user', - dataFields: { - firstName: 'Alex' - } - }, { eventType: 'customEvent', eventName: 'saved_cars', @@ -1676,6 +1731,14 @@ describe('complexCriteria', () => { } ]); } + if (key === SHARED_PREFS_USER_UPDATE_OBJECT_KEY) { + return JSON.stringify({ + eventType: 'user', + dataFields: { + firstName: 'Alex' + } + }); + } return null; }); @@ -1683,8 +1746,13 @@ describe('complexCriteria', () => { SHARED_PREFS_EVENT_LIST_KEY ); + const localStoredUserUpdate = localStorage.getItem( + SHARED_PREFS_USER_UPDATE_OBJECT_KEY + ); + const checker = new CriteriaCompletionChecker( - localStoredEventList === null ? '' : localStoredEventList + localStoredEventList === null ? '' : localStoredEventList, + localStoredUserUpdate === null ? '' : localStoredUserUpdate ); const result = checker.getMatchedCriteria( JSON.stringify(COMPLEX_CRITERIA_1) @@ -1697,12 +1765,6 @@ describe('complexCriteria', () => { (localStorage.getItem as jest.Mock).mockImplementation((key) => { if (key === SHARED_PREFS_EVENT_LIST_KEY) { return JSON.stringify([ - { - eventType: 'user', - dataFields: { - firstName: 'xcode' - } - }, { eventType: 'customEvent', eventName: 'saved_cars', @@ -1726,6 +1788,14 @@ describe('complexCriteria', () => { } ]); } + if (key === SHARED_PREFS_USER_UPDATE_OBJECT_KEY) { + return JSON.stringify({ + eventType: 'user', + dataFields: { + firstName: 'xcode' + } + }); + } return null; }); @@ -1733,8 +1803,13 @@ describe('complexCriteria', () => { SHARED_PREFS_EVENT_LIST_KEY ); + const localStoredUserUpdate = localStorage.getItem( + SHARED_PREFS_USER_UPDATE_OBJECT_KEY + ); + const checker = new CriteriaCompletionChecker( - localStoredEventList === null ? '' : localStoredEventList + localStoredEventList === null ? '' : localStoredEventList, + localStoredUserUpdate === null ? '' : localStoredUserUpdate ); const result = checker.getMatchedCriteria( JSON.stringify(COMPLEX_CRITERIA_2) @@ -1746,12 +1821,6 @@ describe('complexCriteria', () => { (localStorage.getItem as jest.Mock).mockImplementation((key) => { if (key === SHARED_PREFS_EVENT_LIST_KEY) { return JSON.stringify([ - { - eventType: 'user', - dataFields: { - firstName: 'Alex' - } - }, { eventType: 'purchase', dataFields: { @@ -1761,6 +1830,14 @@ describe('complexCriteria', () => { } ]); } + if (key === SHARED_PREFS_USER_UPDATE_OBJECT_KEY) { + return JSON.stringify({ + dataFields: { + firstName: 'Alex' + }, + eventType: 'user' + }); + } return null; }); @@ -1768,8 +1845,13 @@ describe('complexCriteria', () => { SHARED_PREFS_EVENT_LIST_KEY ); + const localStoredUserUpdate = localStorage.getItem( + SHARED_PREFS_USER_UPDATE_OBJECT_KEY + ); + const checker = new CriteriaCompletionChecker( - localStoredEventList === null ? '' : localStoredEventList + localStoredEventList === null ? '' : localStoredEventList, + localStoredUserUpdate === null ? '' : localStoredUserUpdate ); const result = checker.getMatchedCriteria( JSON.stringify(COMPLEX_CRITERIA_2) @@ -1819,13 +1901,6 @@ describe('complexCriteria', () => { (localStorage.getItem as jest.Mock).mockImplementation((key) => { if (key === SHARED_PREFS_EVENT_LIST_KEY) { return JSON.stringify([ - { - eventType: 'user', - dataFields: { - firstName: 'Alex', - lastName: 'Aris' - } - }, { eventType: 'customEvent', eventName: 'animal-found', @@ -1836,6 +1911,15 @@ describe('complexCriteria', () => { } ]); } + if (key === SHARED_PREFS_USER_UPDATE_OBJECT_KEY) { + return JSON.stringify({ + eventType: 'user', + dataFields: { + firstName: 'Alex', + lastName: 'Aris' + } + }); + } return null; }); @@ -1843,8 +1927,13 @@ describe('complexCriteria', () => { SHARED_PREFS_EVENT_LIST_KEY ); + const localStoredUserUpdate = localStorage.getItem( + SHARED_PREFS_USER_UPDATE_OBJECT_KEY + ); + const checker = new CriteriaCompletionChecker( - localStoredEventList === null ? '' : localStoredEventList + localStoredEventList === null ? '' : localStoredEventList, + localStoredUserUpdate === null ? '' : localStoredUserUpdate ); const result = checker.getMatchedCriteria( JSON.stringify(COMPLEX_CRITERIA_3) diff --git a/src/anonymousUserTracking/tests/criteriaCompletionChecker.test.ts b/src/anonymousUserTracking/tests/criteriaCompletionChecker.test.ts index 931a188c..73bfe3c2 100644 --- a/src/anonymousUserTracking/tests/criteriaCompletionChecker.test.ts +++ b/src/anonymousUserTracking/tests/criteriaCompletionChecker.test.ts @@ -1,4 +1,7 @@ -import { SHARED_PREFS_EVENT_LIST_KEY } from '../../constants'; +import { + SHARED_PREFS_EVENT_LIST_KEY, + SHARED_PREFS_USER_UPDATE_OBJECT_KEY +} from '../../constants'; import CriteriaCompletionChecker from '../criteriaCompletionChecker'; const localStorageMock = { @@ -732,28 +735,27 @@ describe('CriteriaCompletionChecker', () => { // isSet criteria it('should return criteriaId 97 if isset user criteria is matched', () => { (localStorage.getItem as jest.Mock).mockImplementation((key) => { - if (key === SHARED_PREFS_EVENT_LIST_KEY) { - return JSON.stringify([ - { - dataFields: { - country: 'UK', - eventTimeStamp: 10, - phoneNumberDetails: '99999999', - 'shoppingCartItems.price': 50.5 - }, - eventType: 'user' - } - ]); + if (key === SHARED_PREFS_USER_UPDATE_OBJECT_KEY) { + return JSON.stringify({ + dataFields: { + country: 'UK', + eventTimeStamp: 10, + phoneNumberDetails: '99999999', + 'shoppingCartItems.price': 50.5 + }, + eventType: 'user' + }); } return null; }); - const localStoredEventList = localStorage.getItem( - SHARED_PREFS_EVENT_LIST_KEY + const localStoredUserUpdate = localStorage.getItem( + SHARED_PREFS_USER_UPDATE_OBJECT_KEY ); const checker = new CriteriaCompletionChecker( - localStoredEventList === null ? '' : localStoredEventList + '', + localStoredUserUpdate === null ? '' : localStoredUserUpdate ); const result = checker.getMatchedCriteria( JSON.stringify({ @@ -824,27 +826,26 @@ describe('CriteriaCompletionChecker', () => { it('should return null (isset user criteria fail)', () => { (localStorage.getItem as jest.Mock).mockImplementation((key) => { - if (key === SHARED_PREFS_EVENT_LIST_KEY) { - return JSON.stringify([ - { - dataFields: { - eventTimeStamp: 10, - phoneNumberDetails: '99999999', - 'shoppingCartItems.price': 50.5 - }, - eventType: 'user' - } - ]); + if (key === SHARED_PREFS_USER_UPDATE_OBJECT_KEY) { + return JSON.stringify({ + dataFields: { + eventTimeStamp: 10, + phoneNumberDetails: '99999999', + 'shoppingCartItems.price': 50.5 + }, + eventType: 'user' + }); } return null; }); - const localStoredEventList = localStorage.getItem( - SHARED_PREFS_EVENT_LIST_KEY + const localStoredUserUpdate = localStorage.getItem( + SHARED_PREFS_USER_UPDATE_OBJECT_KEY ); const checker = new CriteriaCompletionChecker( - localStoredEventList === null ? '' : localStoredEventList + '', + localStoredUserUpdate === null ? '' : localStoredUserUpdate ); const result = checker.getMatchedCriteria( JSON.stringify({ @@ -1453,26 +1454,25 @@ describe('CriteriaCompletionChecker', () => { it('should return criteriaId 100 (boolean test)', () => { (localStorage.getItem as jest.Mock).mockImplementation((key) => { - if (key === SHARED_PREFS_EVENT_LIST_KEY) { - return JSON.stringify([ - { - dataFields: { - subscribed: true, - phoneNumber: '99999999' - }, - eventType: 'user' - } - ]); + if (key === SHARED_PREFS_USER_UPDATE_OBJECT_KEY) { + return JSON.stringify({ + dataFields: { + subscribed: true, + phoneNumber: '99999999' + }, + eventType: 'user' + }); } return null; }); - const localStoredEventList = localStorage.getItem( - SHARED_PREFS_EVENT_LIST_KEY + const localStoredUserUpdate = localStorage.getItem( + SHARED_PREFS_USER_UPDATE_OBJECT_KEY ); const checker = new CriteriaCompletionChecker( - localStoredEventList === null ? '' : localStoredEventList + '', + localStoredUserUpdate === null ? '' : localStoredUserUpdate ); const result = checker.getMatchedCriteria( JSON.stringify({ @@ -1526,26 +1526,25 @@ describe('CriteriaCompletionChecker', () => { it('should return criteriaId 194 if Contact: Phone Number != 57688559', () => { (localStorage.getItem as jest.Mock).mockImplementation((key) => { - if (key === SHARED_PREFS_EVENT_LIST_KEY) { - return JSON.stringify([ - { - dataFields: { - subscribed: true, - phoneNumber: '123685748641' - }, - eventType: 'user' - } - ]); + if (key === SHARED_PREFS_USER_UPDATE_OBJECT_KEY) { + return JSON.stringify({ + dataFields: { + subscribed: true, + phoneNumber: '123685748641' + }, + eventType: 'user' + }); } return null; }); - const localStoredEventList = localStorage.getItem( - SHARED_PREFS_EVENT_LIST_KEY + const localStoredUserUpdate = localStorage.getItem( + SHARED_PREFS_USER_UPDATE_OBJECT_KEY ); const checker = new CriteriaCompletionChecker( - localStoredEventList === null ? '' : localStoredEventList + '', + localStoredUserUpdate === null ? '' : localStoredUserUpdate ); const result = checker.getMatchedCriteria( JSON.stringify({ @@ -1590,26 +1589,25 @@ describe('CriteriaCompletionChecker', () => { it('should return criteriaId 293 if Contact: subscribed != false', () => { (localStorage.getItem as jest.Mock).mockImplementation((key) => { - if (key === SHARED_PREFS_EVENT_LIST_KEY) { - return JSON.stringify([ - { - dataFields: { - subscribed: true, - phoneNumber: '123685748641' - }, - eventType: 'user' - } - ]); + if (key === SHARED_PREFS_USER_UPDATE_OBJECT_KEY) { + return JSON.stringify({ + dataFields: { + subscribed: true, + phoneNumber: '123685748641' + }, + eventType: 'user' + }); } return null; }); - const localStoredEventList = localStorage.getItem( - SHARED_PREFS_EVENT_LIST_KEY + const localStoredUserUpdate = localStorage.getItem( + SHARED_PREFS_USER_UPDATE_OBJECT_KEY ); const checker = new CriteriaCompletionChecker( - localStoredEventList === null ? '' : localStoredEventList + '', + localStoredUserUpdate === null ? '' : localStoredUserUpdate ); const result = checker.getMatchedCriteria( JSON.stringify({ diff --git a/src/anonymousUserTracking/tests/dataTypeComparatorSearchQueryCriteria.test.ts b/src/anonymousUserTracking/tests/dataTypeComparatorSearchQueryCriteria.test.ts index e75cf9f4..24c286a0 100644 --- a/src/anonymousUserTracking/tests/dataTypeComparatorSearchQueryCriteria.test.ts +++ b/src/anonymousUserTracking/tests/dataTypeComparatorSearchQueryCriteria.test.ts @@ -1,4 +1,4 @@ -import { SHARED_PREFS_EVENT_LIST_KEY } from '../../constants'; +import { SHARED_PREFS_USER_UPDATE_OBJECT_KEY } from '../../constants'; import CriteriaCompletionChecker from '../criteriaCompletionChecker'; import { DATA_TYPE_COMPARATOR_DOES_NOT_EQUAL, @@ -23,28 +23,27 @@ describe('dataTypeComparatorSearchQueryCriteria', () => { it('should return criteriaId 285 (Comparator test For Equal)', () => { (localStorage.getItem as jest.Mock).mockImplementation((key) => { - if (key === SHARED_PREFS_EVENT_LIST_KEY) { - return JSON.stringify([ - { - dataFields: { - savings: 19.99, - likes_boba: true, - country: 'Chaina', - eventTimeStamp: 3 - }, - eventType: 'user' - } - ]); + if (key === SHARED_PREFS_USER_UPDATE_OBJECT_KEY) { + return JSON.stringify({ + dataFields: { + savings: 19.99, + likes_boba: true, + country: 'Chaina', + eventTimeStamp: 3 + }, + eventType: 'user' + }); } return null; }); - const localStoredEventList = localStorage.getItem( - SHARED_PREFS_EVENT_LIST_KEY + const localStoredUserUpdate = localStorage.getItem( + SHARED_PREFS_USER_UPDATE_OBJECT_KEY ); const checker = new CriteriaCompletionChecker( - localStoredEventList === null ? '' : localStoredEventList + '', + localStoredUserUpdate === null ? '' : localStoredUserUpdate ); const result = checker.getMatchedCriteria( JSON.stringify(DATA_TYPE_COMPARATOR_EQUALS) @@ -54,28 +53,27 @@ describe('dataTypeComparatorSearchQueryCriteria', () => { it('should return null (Comparator test For Equal - No Match)', () => { (localStorage.getItem as jest.Mock).mockImplementation((key) => { - if (key === SHARED_PREFS_EVENT_LIST_KEY) { - return JSON.stringify([ - { - dataFields: { - savings: 10.99, - eventTimeStamp: 30, - likes_boba: false, - country: 'Taiwan' - }, - eventType: 'user' - } - ]); + if (key === SHARED_PREFS_USER_UPDATE_OBJECT_KEY) { + return JSON.stringify({ + dataFields: { + savings: 10.99, + eventTimeStamp: 30, + likes_boba: false, + country: 'Taiwan' + }, + eventType: 'user' + }); } return null; }); - const localStoredEventList = localStorage.getItem( - SHARED_PREFS_EVENT_LIST_KEY + const localStoredUserUpdate = localStorage.getItem( + SHARED_PREFS_USER_UPDATE_OBJECT_KEY ); const checker = new CriteriaCompletionChecker( - localStoredEventList === null ? '' : localStoredEventList + '', + localStoredUserUpdate === null ? '' : localStoredUserUpdate ); const result = checker.getMatchedCriteria( JSON.stringify(DATA_TYPE_COMPARATOR_EQUALS) @@ -85,27 +83,26 @@ describe('dataTypeComparatorSearchQueryCriteria', () => { it('should return criteriaId 285 (Comparator test For DoesNotEqual)', () => { (localStorage.getItem as jest.Mock).mockImplementation((key) => { - if (key === SHARED_PREFS_EVENT_LIST_KEY) { - return JSON.stringify([ - { - dataFields: { - savings: 11.2, - eventTimeStamp: 30, - likes_boba: false - }, - eventType: 'user' - } - ]); + if (key === SHARED_PREFS_USER_UPDATE_OBJECT_KEY) { + return JSON.stringify({ + dataFields: { + savings: 11.2, + eventTimeStamp: 30, + likes_boba: false + }, + eventType: 'user' + }); } return null; }); - const localStoredEventList = localStorage.getItem( - SHARED_PREFS_EVENT_LIST_KEY + const localStoredUserUpdate = localStorage.getItem( + SHARED_PREFS_USER_UPDATE_OBJECT_KEY ); const checker = new CriteriaCompletionChecker( - localStoredEventList === null ? '' : localStoredEventList + '', + localStoredUserUpdate === null ? '' : localStoredUserUpdate ); const result = checker.getMatchedCriteria( JSON.stringify(DATA_TYPE_COMPARATOR_DOES_NOT_EQUAL) @@ -115,27 +112,26 @@ describe('dataTypeComparatorSearchQueryCriteria', () => { it('should return null (Comparator test For DoesNotEqual - No Match)', () => { (localStorage.getItem as jest.Mock).mockImplementation((key) => { - if (key === SHARED_PREFS_EVENT_LIST_KEY) { - return JSON.stringify([ - { - dataFields: { - savings: 10.99, - eventTimeStamp: 30, - likes_boba: true - }, - eventType: 'user' - } - ]); + if (key === SHARED_PREFS_USER_UPDATE_OBJECT_KEY) { + return JSON.stringify({ + dataFields: { + savings: 10.99, + eventTimeStamp: 30, + likes_boba: true + }, + eventType: 'user' + }); } return null; }); - const localStoredEventList = localStorage.getItem( - SHARED_PREFS_EVENT_LIST_KEY + const localStoredUserUpdate = localStorage.getItem( + SHARED_PREFS_USER_UPDATE_OBJECT_KEY ); const checker = new CriteriaCompletionChecker( - localStoredEventList === null ? '' : localStoredEventList + '', + localStoredUserUpdate === null ? '' : localStoredUserUpdate ); const result = checker.getMatchedCriteria( JSON.stringify(DATA_TYPE_COMPARATOR_DOES_NOT_EQUAL) @@ -145,26 +141,25 @@ describe('dataTypeComparatorSearchQueryCriteria', () => { it('should return criteriaId 289 (Comparator test For LessThan)', () => { (localStorage.getItem as jest.Mock).mockImplementation((key) => { - if (key === SHARED_PREFS_EVENT_LIST_KEY) { - return JSON.stringify([ - { - dataFields: { - savings: 10, - eventTimeStamp: 14 - }, - eventType: 'user' - } - ]); + if (key === SHARED_PREFS_USER_UPDATE_OBJECT_KEY) { + return JSON.stringify({ + dataFields: { + savings: 10, + eventTimeStamp: 14 + }, + eventType: 'user' + }); } return null; }); - const localStoredEventList = localStorage.getItem( - SHARED_PREFS_EVENT_LIST_KEY + const localStoredUserUpdate = localStorage.getItem( + SHARED_PREFS_USER_UPDATE_OBJECT_KEY ); const checker = new CriteriaCompletionChecker( - localStoredEventList === null ? '' : localStoredEventList + '', + localStoredUserUpdate === null ? '' : localStoredUserUpdate ); const result = checker.getMatchedCriteria( JSON.stringify(DATA_TYPE_COMPARATOR_LESS_THAN) @@ -174,26 +169,25 @@ describe('dataTypeComparatorSearchQueryCriteria', () => { it('should return null (Comparator test For LessThan - No Match)', () => { (localStorage.getItem as jest.Mock).mockImplementation((key) => { - if (key === SHARED_PREFS_EVENT_LIST_KEY) { - return JSON.stringify([ - { - dataFields: { - savings: 10, - eventTimeStamp: 18 - }, - eventType: 'user' - } - ]); + if (key === SHARED_PREFS_USER_UPDATE_OBJECT_KEY) { + return JSON.stringify({ + dataFields: { + savings: 10, + eventTimeStamp: 18 + }, + eventType: 'user' + }); } return null; }); - const localStoredEventList = localStorage.getItem( - SHARED_PREFS_EVENT_LIST_KEY + const localStoredUserUpdate = localStorage.getItem( + SHARED_PREFS_USER_UPDATE_OBJECT_KEY ); const checker = new CriteriaCompletionChecker( - localStoredEventList === null ? '' : localStoredEventList + '', + localStoredUserUpdate === null ? '' : localStoredUserUpdate ); const result = checker.getMatchedCriteria( JSON.stringify(DATA_TYPE_COMPARATOR_LESS_THAN) @@ -203,26 +197,25 @@ describe('dataTypeComparatorSearchQueryCriteria', () => { it('should return criteriaId 290 (Comparator test For LessThanOrEqualTo)', () => { (localStorage.getItem as jest.Mock).mockImplementation((key) => { - if (key === SHARED_PREFS_EVENT_LIST_KEY) { - return JSON.stringify([ - { - dataFields: { - savings: 17, - eventTimeStamp: 14 - }, - eventType: 'user' - } - ]); + if (key === SHARED_PREFS_USER_UPDATE_OBJECT_KEY) { + return JSON.stringify({ + dataFields: { + savings: 17, + eventTimeStamp: 14 + }, + eventType: 'user' + }); } return null; }); - const localStoredEventList = localStorage.getItem( - SHARED_PREFS_EVENT_LIST_KEY + const localStoredUserUpdate = localStorage.getItem( + SHARED_PREFS_USER_UPDATE_OBJECT_KEY ); const checker = new CriteriaCompletionChecker( - localStoredEventList === null ? '' : localStoredEventList + '', + localStoredUserUpdate === null ? '' : localStoredUserUpdate ); const result = checker.getMatchedCriteria( JSON.stringify(DATA_TYPE_COMPARATOR_LESS_THAN_OR_EQUAL_TO) @@ -232,26 +225,25 @@ describe('dataTypeComparatorSearchQueryCriteria', () => { it('should return null (Comparator test For LessThanOrEqualTo - No Match)', () => { (localStorage.getItem as jest.Mock).mockImplementation((key) => { - if (key === SHARED_PREFS_EVENT_LIST_KEY) { - return JSON.stringify([ - { - dataFields: { - savings: 18, - eventTimeStamp: 12 - }, - eventType: 'user' - } - ]); + if (key === SHARED_PREFS_USER_UPDATE_OBJECT_KEY) { + return JSON.stringify({ + dataFields: { + savings: 18, + eventTimeStamp: 12 + }, + eventType: 'user' + }); } return null; }); - const localStoredEventList = localStorage.getItem( - SHARED_PREFS_EVENT_LIST_KEY + const localStoredUserUpdate = localStorage.getItem( + SHARED_PREFS_USER_UPDATE_OBJECT_KEY ); const checker = new CriteriaCompletionChecker( - localStoredEventList === null ? '' : localStoredEventList + '', + localStoredUserUpdate === null ? '' : localStoredUserUpdate ); const result = checker.getMatchedCriteria( JSON.stringify(DATA_TYPE_COMPARATOR_LESS_THAN_OR_EQUAL_TO) @@ -261,26 +253,25 @@ describe('dataTypeComparatorSearchQueryCriteria', () => { it('should return criteriaId 290 (Comparator test For GreaterThan)', () => { (localStorage.getItem as jest.Mock).mockImplementation((key) => { - if (key === SHARED_PREFS_EVENT_LIST_KEY) { - return JSON.stringify([ - { - dataFields: { - savings: 56, - eventTimeStamp: 51 - }, - eventType: 'user' - } - ]); + if (key === SHARED_PREFS_USER_UPDATE_OBJECT_KEY) { + return JSON.stringify({ + dataFields: { + savings: 56, + eventTimeStamp: 51 + }, + eventType: 'user' + }); } return null; }); - const localStoredEventList = localStorage.getItem( - SHARED_PREFS_EVENT_LIST_KEY + const localStoredUserUpdate = localStorage.getItem( + SHARED_PREFS_USER_UPDATE_OBJECT_KEY ); const checker = new CriteriaCompletionChecker( - localStoredEventList === null ? '' : localStoredEventList + '', + localStoredUserUpdate === null ? '' : localStoredUserUpdate ); const result = checker.getMatchedCriteria( JSON.stringify(DATA_TYPE_COMPARATOR_GREATER_THAN) @@ -290,26 +281,25 @@ describe('dataTypeComparatorSearchQueryCriteria', () => { it('should return null (Comparator test For GreaterThan - No Match)', () => { (localStorage.getItem as jest.Mock).mockImplementation((key) => { - if (key === SHARED_PREFS_EVENT_LIST_KEY) { - return JSON.stringify([ - { - dataFields: { - savings: 5, - eventTimeStamp: 3 - }, - eventType: 'user' - } - ]); + if (key === SHARED_PREFS_USER_UPDATE_OBJECT_KEY) { + return JSON.stringify({ + dataFields: { + savings: 5, + eventTimeStamp: 3 + }, + eventType: 'user' + }); } return null; }); - const localStoredEventList = localStorage.getItem( - SHARED_PREFS_EVENT_LIST_KEY + const localStoredUserUpdate = localStorage.getItem( + SHARED_PREFS_USER_UPDATE_OBJECT_KEY ); const checker = new CriteriaCompletionChecker( - localStoredEventList === null ? '' : localStoredEventList + '', + localStoredUserUpdate === null ? '' : localStoredUserUpdate ); const result = checker.getMatchedCriteria( JSON.stringify(DATA_TYPE_COMPARATOR_GREATER_THAN) @@ -319,26 +309,25 @@ describe('dataTypeComparatorSearchQueryCriteria', () => { it('should return criteriaId 291 (Comparator test For GreaterThanOrEqualTo)', () => { (localStorage.getItem as jest.Mock).mockImplementation((key) => { - if (key === SHARED_PREFS_EVENT_LIST_KEY) { - return JSON.stringify([ - { - dataFields: { - savings: 20, - eventTimeStamp: 30 - }, - eventType: 'user' - } - ]); + if (key === SHARED_PREFS_USER_UPDATE_OBJECT_KEY) { + return JSON.stringify({ + dataFields: { + savings: 20, + eventTimeStamp: 30 + }, + eventType: 'user' + }); } return null; }); - const localStoredEventList = localStorage.getItem( - SHARED_PREFS_EVENT_LIST_KEY + const localStoredUserUpdate = localStorage.getItem( + SHARED_PREFS_USER_UPDATE_OBJECT_KEY ); const checker = new CriteriaCompletionChecker( - localStoredEventList === null ? '' : localStoredEventList + '', + localStoredUserUpdate === null ? '' : localStoredUserUpdate ); const result = checker.getMatchedCriteria( JSON.stringify(DATA_TYPE_COMPARATOR_GREATER_THAN_OR_EQUAL_TO) @@ -348,26 +337,25 @@ describe('dataTypeComparatorSearchQueryCriteria', () => { it('should return null (Comparator test For GreaterThanOrEqualTo - No Match)', () => { (localStorage.getItem as jest.Mock).mockImplementation((key) => { - if (key === SHARED_PREFS_EVENT_LIST_KEY) { - return JSON.stringify([ - { - dataFields: { - savings: 18, - eventTimeStamp: 16 - }, - eventType: 'user' - } - ]); + if (key === SHARED_PREFS_USER_UPDATE_OBJECT_KEY) { + return JSON.stringify({ + dataFields: { + savings: 18, + eventTimeStamp: 16 + }, + eventType: 'user' + }); } return null; }); - const localStoredEventList = localStorage.getItem( - SHARED_PREFS_EVENT_LIST_KEY + const localStoredUserUpdate = localStorage.getItem( + SHARED_PREFS_USER_UPDATE_OBJECT_KEY ); const checker = new CriteriaCompletionChecker( - localStoredEventList === null ? '' : localStoredEventList + '', + localStoredUserUpdate === null ? '' : localStoredUserUpdate ); const result = checker.getMatchedCriteria( JSON.stringify(DATA_TYPE_COMPARATOR_GREATER_THAN_OR_EQUAL_TO) @@ -377,28 +365,27 @@ describe('dataTypeComparatorSearchQueryCriteria', () => { it('should return criteriaId 285 (Comparator test For IsSet)', () => { (localStorage.getItem as jest.Mock).mockImplementation((key) => { - if (key === SHARED_PREFS_EVENT_LIST_KEY) { - return JSON.stringify([ - { - dataFields: { - savings: 10, - eventTimeStamp: 20, - saved_cars: '10', - country: 'Taiwan' - }, - eventType: 'user' - } - ]); + if (key === SHARED_PREFS_USER_UPDATE_OBJECT_KEY) { + return JSON.stringify({ + dataFields: { + savings: 10, + eventTimeStamp: 20, + saved_cars: '10', + country: 'Taiwan' + }, + eventType: 'user' + }); } return null; }); - const localStoredEventList = localStorage.getItem( - SHARED_PREFS_EVENT_LIST_KEY + const localStoredUserUpdate = localStorage.getItem( + SHARED_PREFS_USER_UPDATE_OBJECT_KEY ); const checker = new CriteriaCompletionChecker( - localStoredEventList === null ? '' : localStoredEventList + '', + localStoredUserUpdate === null ? '' : localStoredUserUpdate ); const result = checker.getMatchedCriteria( JSON.stringify(DATA_TYPE_COMPARATOR_IS_SET) @@ -408,28 +395,27 @@ describe('dataTypeComparatorSearchQueryCriteria', () => { it('should return criteriaId 285 (Comparator test For IsSet - No Match)', () => { (localStorage.getItem as jest.Mock).mockImplementation((key) => { - if (key === SHARED_PREFS_EVENT_LIST_KEY) { - return JSON.stringify([ - { - dataFields: { - savings: '', - eventTimeStamp: '', - saved_cars: 'd', - country: '' - }, - eventType: 'user' - } - ]); + if (key === SHARED_PREFS_USER_UPDATE_OBJECT_KEY) { + return JSON.stringify({ + dataFields: { + savings: '', + eventTimeStamp: '', + saved_cars: 'd', + country: '' + }, + eventType: 'user' + }); } return null; }); - const localStoredEventList = localStorage.getItem( - SHARED_PREFS_EVENT_LIST_KEY + const localStoredUserUpdate = localStorage.getItem( + SHARED_PREFS_USER_UPDATE_OBJECT_KEY ); const checker = new CriteriaCompletionChecker( - localStoredEventList === null ? '' : localStoredEventList + '', + localStoredUserUpdate === null ? '' : localStoredUserUpdate ); const result = checker.getMatchedCriteria( JSON.stringify(DATA_TYPE_COMPARATOR_IS_SET) diff --git a/src/anonymousUserTracking/tests/nestedTesting.test.ts b/src/anonymousUserTracking/tests/nestedTesting.test.ts index 207c9328..2ac9e068 100644 --- a/src/anonymousUserTracking/tests/nestedTesting.test.ts +++ b/src/anonymousUserTracking/tests/nestedTesting.test.ts @@ -1,4 +1,7 @@ -import { SHARED_PREFS_EVENT_LIST_KEY } from '../../constants'; +import { + SHARED_PREFS_EVENT_LIST_KEY, + SHARED_PREFS_USER_UPDATE_OBJECT_KEY +} from '../../constants'; import CriteriaCompletionChecker from '../criteriaCompletionChecker'; import { NESTED_CRITERIA, @@ -21,39 +24,38 @@ describe('nestedTesting', () => { it('should return criteriaId 168 (nested field)', () => { (localStorage.getItem as jest.Mock).mockImplementation((key) => { - if (key === SHARED_PREFS_EVENT_LIST_KEY) { - return JSON.stringify([ - { - dataFields: { - email: 'user@example.com', - furniture: [ - { - furnitureType: 'Sofa', - furnitureColor: 'White', - lengthInches: 40, - widthInches: 60 - }, - { - furnitureType: 'table', - furnitureColor: 'Gray', - lengthInches: 20, - widthInches: 30 - } - ] - }, - eventType: 'user' - } - ]); + if (key === SHARED_PREFS_USER_UPDATE_OBJECT_KEY) { + return JSON.stringify({ + dataFields: { + email: 'user@example.com', + furniture: [ + { + furnitureType: 'Sofa', + furnitureColor: 'White', + lengthInches: 40, + widthInches: 60 + }, + { + furnitureType: 'table', + furnitureColor: 'Gray', + lengthInches: 20, + widthInches: 30 + } + ] + }, + eventType: 'user' + }); } return null; }); - const localStoredEventList = localStorage.getItem( - SHARED_PREFS_EVENT_LIST_KEY + const localStoredUserUpdate = localStorage.getItem( + SHARED_PREFS_USER_UPDATE_OBJECT_KEY ); const checker = new CriteriaCompletionChecker( - localStoredEventList === null ? '' : localStoredEventList + '', + localStoredUserUpdate === null ? '' : localStoredUserUpdate ); const result = checker.getMatchedCriteria(JSON.stringify(NESTED_CRITERIA)); expect(result).toEqual('168'); @@ -61,39 +63,38 @@ describe('nestedTesting', () => { it('should return criteriaId null (nested field - No match)', () => { (localStorage.getItem as jest.Mock).mockImplementation((key) => { - if (key === SHARED_PREFS_EVENT_LIST_KEY) { - return JSON.stringify([ - { - dataFields: { - email: 'user@example.com', - furniture: [ - { - furnitureType: 'Sofa', - furnitureColor: 'Gray', - lengthInches: 40, - widthInches: 60 - }, - { - furnitureType: 'table', - furnitureColor: 'White', - lengthInches: 20, - widthInches: 30 - } - ] - }, - eventType: 'user' - } - ]); + if (key === SHARED_PREFS_USER_UPDATE_OBJECT_KEY) { + return JSON.stringify({ + dataFields: { + email: 'user@example.com', + furniture: [ + { + furnitureType: 'Sofa', + furnitureColor: 'Gray', + lengthInches: 40, + widthInches: 60 + }, + { + furnitureType: 'table', + furnitureColor: 'White', + lengthInches: 20, + widthInches: 30 + } + ] + }, + eventType: 'user' + }); } return null; }); - const localStoredEventList = localStorage.getItem( - SHARED_PREFS_EVENT_LIST_KEY + const localStoredUserUpdate = localStorage.getItem( + SHARED_PREFS_USER_UPDATE_OBJECT_KEY ); const checker = new CriteriaCompletionChecker( - localStoredEventList === null ? '' : localStoredEventList + '', + localStoredUserUpdate === null ? '' : localStoredUserUpdate ); const result = checker.getMatchedCriteria(JSON.stringify(NESTED_CRITERIA)); expect(result).toEqual(null); @@ -251,40 +252,39 @@ describe('nestedTesting', () => { it('should return criteriaId 436 (Multi level Nested field criteria)', () => { (localStorage.getItem as jest.Mock).mockImplementation((key) => { - if (key === SHARED_PREFS_EVENT_LIST_KEY) { - return JSON.stringify([ - { - dataFields: { - furniture: { - material: [ - { - type: 'table', - color: 'black', - lengthInches: 40, - widthInches: 60 - }, - { - type: 'Sofa', - color: 'Gray', - lengthInches: 20, - widthInches: 30 - } - ] - } - }, - eventType: 'user' - } - ]); + if (key === SHARED_PREFS_USER_UPDATE_OBJECT_KEY) { + return JSON.stringify({ + dataFields: { + furniture: { + material: [ + { + type: 'table', + color: 'black', + lengthInches: 40, + widthInches: 60 + }, + { + type: 'Sofa', + color: 'Gray', + lengthInches: 20, + widthInches: 30 + } + ] + } + }, + eventType: 'user' + }); } return null; }); - const localStoredEventList = localStorage.getItem( - SHARED_PREFS_EVENT_LIST_KEY + const localStoredUserUpdate = localStorage.getItem( + SHARED_PREFS_USER_UPDATE_OBJECT_KEY ); const checker = new CriteriaCompletionChecker( - localStoredEventList === null ? '' : localStoredEventList + '', + localStoredUserUpdate === null ? '' : localStoredUserUpdate ); const result = checker.getMatchedCriteria( JSON.stringify(NESTED_CRITERIA_MULTI_LEVEL_ARRAY) @@ -294,40 +294,39 @@ describe('nestedTesting', () => { it('should return criteriaId null (Multi level Nested field criteria - No match)', () => { (localStorage.getItem as jest.Mock).mockImplementation((key) => { - if (key === SHARED_PREFS_EVENT_LIST_KEY) { - return JSON.stringify([ - { - dataFields: { - furniture: { - material: [ - { - type: 'table', - color: 'Gray', - lengthInches: 40, - widthInches: 60 - }, - { - type: 'Sofa', - color: 'black', - lengthInches: 20, - widthInches: 30 - } - ] - } - }, - eventType: 'user' - } - ]); + if (key === SHARED_PREFS_USER_UPDATE_OBJECT_KEY) { + return JSON.stringify({ + dataFields: { + furniture: { + material: [ + { + type: 'table', + color: 'Gray', + lengthInches: 40, + widthInches: 60 + }, + { + type: 'Sofa', + color: 'black', + lengthInches: 20, + widthInches: 30 + } + ] + } + }, + eventType: 'user' + }); } return null; }); - const localStoredEventList = localStorage.getItem( - SHARED_PREFS_EVENT_LIST_KEY + const localStoredUserUpdate = localStorage.getItem( + SHARED_PREFS_USER_UPDATE_OBJECT_KEY ); const checker = new CriteriaCompletionChecker( - localStoredEventList === null ? '' : localStoredEventList + '', + localStoredUserUpdate === null ? '' : localStoredUserUpdate ); const result = checker.getMatchedCriteria( JSON.stringify(NESTED_CRITERIA_MULTI_LEVEL_ARRAY) diff --git a/src/anonymousUserTracking/tests/userUpdate.test.ts b/src/anonymousUserTracking/tests/userUpdate.test.ts index 579cffb6..d2df2e37 100644 --- a/src/anonymousUserTracking/tests/userUpdate.test.ts +++ b/src/anonymousUserTracking/tests/userUpdate.test.ts @@ -7,7 +7,8 @@ import { GET_CRITERIA_PATH, ENDPOINT_TRACK_ANON_SESSION, ENDPOINT_MERGE_USER, - SHARED_PREF_ANON_USAGE_TRACKED + SHARED_PREF_ANON_USAGE_TRACKED, + SHARED_PREFS_USER_UPDATE_OBJECT_KEY } from '../../constants'; import { updateUser } from '../../users'; import { initializeWithConfig } from '../../authorization'; @@ -82,13 +83,13 @@ describe('UserUpdate', () => { it('should not have unnecessary extra nesting when locally stored user update fields are sent to server', async () => { (localStorage.getItem as jest.Mock).mockImplementation((key) => { if (key === SHARED_PREFS_EVENT_LIST_KEY) { - return JSON.stringify([ - { - ...userDataMatched.dataFields, - eventType: userDataMatched.eventType - }, - eventDataMatched - ]); + return JSON.stringify([eventDataMatched]); + } + if (key === SHARED_PREFS_USER_UPDATE_OBJECT_KEY) { + return JSON.stringify({ + ...userDataMatched.dataFields, + eventType: userDataMatched.eventType + }); } if (key === SHARED_PREFS_CRITERIA) { return JSON.stringify(CUSTOM_EVENT_API_TEST_CRITERIA); @@ -114,7 +115,7 @@ describe('UserUpdate', () => { console.log(''); } expect(localStorage.setItem).toHaveBeenCalledWith( - SHARED_PREFS_EVENT_LIST_KEY, + SHARED_PREFS_USER_UPDATE_OBJECT_KEY, expect.any(String) ); diff --git a/src/anonymousUserTracking/tests/validateCustomEventUserUpdateAPI.test.ts b/src/anonymousUserTracking/tests/validateCustomEventUserUpdateAPI.test.ts index c8e625dd..9065778f 100644 --- a/src/anonymousUserTracking/tests/validateCustomEventUserUpdateAPI.test.ts +++ b/src/anonymousUserTracking/tests/validateCustomEventUserUpdateAPI.test.ts @@ -8,7 +8,8 @@ import { ENDPOINT_TRACK_ANON_SESSION, GET_CRITERIA_PATH, GETMESSAGES_PATH, - SHARED_PREF_ANON_USAGE_TRACKED + SHARED_PREF_ANON_USAGE_TRACKED, + SHARED_PREFS_USER_UPDATE_OBJECT_KEY } from '../../constants'; import { track } from '../../events'; import { initializeWithConfig } from '../../authorization'; @@ -124,13 +125,8 @@ describe('validateCustomEventUserUpdateAPI', () => { it('should not have unnecessary extra nesting when locally stored user update fields are sent to server', async () => { (localStorage.getItem as jest.Mock).mockImplementation((key) => { - if (key === SHARED_PREFS_EVENT_LIST_KEY) { - return JSON.stringify([ - { - ...userDataMatched.dataFields, - eventType: userDataMatched.eventType - } - ]); + if (key === SHARED_PREFS_USER_UPDATE_OBJECT_KEY) { + return JSON.stringify(userDataMatched); } if (key === SHARED_PREFS_CRITERIA) { return JSON.stringify(USER_UPDATE_API_TEST_CRITERIA); @@ -144,14 +140,15 @@ describe('validateCustomEventUserUpdateAPI', () => { return null; }); - const localStoredEventList = localStorage.getItem( - SHARED_PREFS_EVENT_LIST_KEY + const localStoredUserUpdate = localStorage.getItem( + SHARED_PREFS_USER_UPDATE_OBJECT_KEY ); const localStoredCriteriaSets = localStorage.getItem(SHARED_PREFS_CRITERIA); const checker = new CriteriaCompletionChecker( - localStoredEventList === null ? '' : localStoredEventList + '', + localStoredUserUpdate === null ? '' : localStoredUserUpdate ); const result = checker.getMatchedCriteria(localStoredCriteriaSets!); @@ -169,7 +166,7 @@ describe('validateCustomEventUserUpdateAPI', () => { console.log(''); } expect(localStorage.setItem).toHaveBeenCalledWith( - SHARED_PREFS_EVENT_LIST_KEY, + SHARED_PREFS_USER_UPDATE_OBJECT_KEY, expect.any(String) ); await setUserID('testuser123'); @@ -210,14 +207,12 @@ describe('validateCustomEventUserUpdateAPI', () => { it('should not have unnecessary extra nesting when locally stored user update fields are sent to server - Fail', async () => { (localStorage.getItem as jest.Mock).mockImplementation((key) => { - if (key === SHARED_PREFS_EVENT_LIST_KEY) { - return JSON.stringify([ - { - ...userData, - ...userData.dataFields, - eventType: userData.eventType - } - ]); + if (key === SHARED_PREFS_USER_UPDATE_OBJECT_KEY) { + return JSON.stringify({ + ...userData, + ...userData.dataFields, + eventType: userData.eventType + }); } if (key === SHARED_PREFS_CRITERIA) { return JSON.stringify(USER_UPDATE_API_TEST_CRITERIA); @@ -231,14 +226,15 @@ describe('validateCustomEventUserUpdateAPI', () => { return null; }); - const localStoredEventList = localStorage.getItem( - SHARED_PREFS_EVENT_LIST_KEY + const localStoredUserUpdate = localStorage.getItem( + SHARED_PREFS_USER_UPDATE_OBJECT_KEY ); const localStoredCriteriaSets = localStorage.getItem(SHARED_PREFS_CRITERIA); const checker = new CriteriaCompletionChecker( - localStoredEventList === null ? '' : localStoredEventList + '', + localStoredUserUpdate === null ? '' : localStoredUserUpdate ); const result = checker.getMatchedCriteria(localStoredCriteriaSets!); @@ -256,7 +252,7 @@ describe('validateCustomEventUserUpdateAPI', () => { console.log(''); } expect(localStorage.setItem).toHaveBeenCalledWith( - SHARED_PREFS_EVENT_LIST_KEY, + SHARED_PREFS_USER_UPDATE_OBJECT_KEY, expect.any(String) ); await setUserID('testuser123'); @@ -275,11 +271,11 @@ describe('validateCustomEventUserUpdateAPI', () => { expect(requestData.dataFields).toHaveProperty('furniture.furnitureType'); expect(requestData.dataFields).toHaveProperty('furniture.furnitureColor'); - expect(requestData).not.toHaveProperty('furniture'); - expect(requestData).not.toHaveProperty('furniture.furnitureType'); - expect(requestData).not.toHaveProperty('furniture.furnitureColor'); - expect(requestData.dataFields).toHaveProperty('furnitureType'); - expect(requestData.dataFields).toHaveProperty('furnitureColor'); + expect(requestData).toHaveProperty('furniture'); + expect(requestData).toHaveProperty('furniture.furnitureType'); + expect(requestData).toHaveProperty('furniture.furnitureColor'); + expect(requestData).toHaveProperty('furnitureType'); + expect(requestData).toHaveProperty('furnitureColor'); }); }); diff --git a/src/commerce/types.ts b/src/commerce/types.ts index e5505e3b..7d5b2142 100644 --- a/src/commerce/types.ts +++ b/src/commerce/types.ts @@ -1,4 +1,4 @@ -interface CommerceItem { +export interface CommerceItem { id: string; sku?: string; name: string; diff --git a/src/constants.ts b/src/constants.ts index b68fa9f3..db572a56 100644 --- a/src/constants.ts +++ b/src/constants.ts @@ -282,6 +282,7 @@ export const ANIMATION_STYLESHEET = ( export const SHARED_PREFS_EVENT_TYPE = 'eventType'; export const SHARED_PREFS_EVENT_LIST_KEY = 'itbl_event_list'; +export const SHARED_PREFS_USER_UPDATE_OBJECT_KEY = 'itbl_user_update_object'; export const SHARED_PREFS_CRITERIA = 'criteria'; export const SHARED_PREFS_ANON_SESSIONS = 'itbl_anon_sessions'; export const SHARED_PREF_ANON_USER_ID = 'anon_userId';