11import ForegroundTimeTracker from '../../src/foregroundTimeTracker' ;
2+ import Store , { IStore } from '../../src/store' ;
3+ import { SDKInitConfig } from '../../src/sdkRuntimeModels' ;
4+ import { IMParticleWebSDKInstance } from '../../src/mp-instance' ;
25
36describe ( 'ForegroundTimeTracker' , ( ) => {
47 let foregroundTimeTracker : ForegroundTimeTracker ;
@@ -490,4 +493,65 @@ describe('ForegroundTimeTracker', () => {
490493 expect ( updatePersistenceSpy ) . toHaveBeenCalled ( ) ;
491494 } ) ;
492495 } ) ;
496+
497+ describe ( '#privacy flags' , ( ) => {
498+ const workspaceToken = 'abcdef' ;
499+ const tosKey = `mprtcl-tos-${ workspaceToken } ` ;
500+ let mockMPInstance : IMParticleWebSDKInstance ;
501+ let store : IStore ;
502+
503+ beforeEach ( ( ) => {
504+ jest . useFakeTimers ( { now : Date . now ( ) , advanceTimers : true } ) ;
505+ localStorage . clear ( ) ;
506+
507+ mockMPInstance = {
508+ _Helpers : {
509+ createMainStorageName : ( ) => `mprtcl-v4_${ workspaceToken } ` ,
510+ createProductStorageName : ( ) => `mprtcl-prodv4_${ workspaceToken } ` ,
511+ Validators : { isFunction : ( ) => true } ,
512+ extend : Object . assign ,
513+ } ,
514+ _NativeSdkHelpers : { isWebviewEnabled : ( ) => false } ,
515+ _Persistence : {
516+ update : jest . fn ( ) ,
517+ savePersistence : jest . fn ( ) ,
518+ getPersistence : ( ) => ( { gs : { } } ) ,
519+ } ,
520+ Logger : { verbose : jest . fn ( ) , warning : jest . fn ( ) , error : jest . fn ( ) } ,
521+ Identity : { getCurrentUser : ( ) => ( { getMPID : ( ) => 'mpid' } ) } ,
522+ _timeOnSiteTimer : undefined as any ,
523+ } as unknown as IMParticleWebSDKInstance ;
524+
525+ store = { } as IStore ;
526+ ( Store as any ) . call ( store , { } as SDKInitConfig , mockMPInstance , 'apikey' ) ;
527+ mockMPInstance . _Store = store ;
528+ } ) ;
529+
530+ afterEach ( ( ) => {
531+ jest . useRealTimers ( ) ;
532+ localStorage . clear ( ) ;
533+ } ) ;
534+
535+ it ( 'should track time on site when noTargeting is false by default' , ( ) => {
536+ store . processConfig ( { workspaceToken } as SDKInitConfig ) ;
537+ expect ( mockMPInstance . _timeOnSiteTimer ) . toBeDefined ( ) ;
538+ jest . advanceTimersByTime ( 1000 ) ;
539+ mockMPInstance . _timeOnSiteTimer . getTimeInForeground ( ) ;
540+ expect ( localStorage . getItem ( tosKey ) ) . not . toBeNull ( ) ;
541+ } ) ;
542+
543+ it ( 'should NOT track time on site when noTargeting is true' , ( ) => {
544+ store . processConfig ( { workspaceToken, launcherOptions : { noTargeting : true } } as SDKInitConfig ) ;
545+ expect ( mockMPInstance . _timeOnSiteTimer ) . toBeUndefined ( ) ;
546+ expect ( localStorage . getItem ( tosKey ) ) . toBeNull ( ) ;
547+ } ) ;
548+
549+ it ( 'should track time on site when noTargeting is false' , ( ) => {
550+ store . processConfig ( { workspaceToken, launcherOptions : { noTargeting : false } } as SDKInitConfig ) ;
551+ expect ( mockMPInstance . _timeOnSiteTimer ) . toBeDefined ( ) ;
552+ jest . advanceTimersByTime ( 1000 ) ;
553+ mockMPInstance . _timeOnSiteTimer . getTimeInForeground ( ) ;
554+ expect ( localStorage . getItem ( tosKey ) ) . not . toBeNull ( ) ;
555+ } ) ;
556+ } ) ;
493557} ) ;
0 commit comments