1+ import Store , { IStore } from '../../src/store' ;
2+ import { IMParticleWebSDKInstance } from '../../src/mp-instance' ;
3+ import { SDKInitConfig } from '../../src/sdkRuntimeModels' ;
4+ import Persistence from '../../src/persistence' ;
5+ import { isObject } from '../../src/utils' ;
6+
7+ describe ( 'Persistence' , ( ) => {
8+ let store : IStore ;
9+ let mockMPInstance : IMParticleWebSDKInstance ;
10+ let persistence : Persistence ;
11+
12+ beforeEach ( ( ) => {
13+ store = { } as IStore ;
14+ mockMPInstance = {
15+ _Helpers : {
16+ createMainStorageName : ( ) => 'mprtcl-v4' ,
17+ isObject,
18+ } ,
19+ _NativeSdkHelpers : {
20+ isWebviewEnabled : ( ) => false ,
21+ } ,
22+ _Store : store ,
23+ Identity : {
24+ getCurrentUser : jest . fn ( ) . mockReturnValue ( {
25+ getMPID : ( ) => 'test-mpid' ,
26+ } ) ,
27+ } ,
28+ Logger : {
29+ verbose : jest . fn ( ) ,
30+ error : jest . fn ( ) ,
31+ warning : jest . fn ( ) ,
32+ } ,
33+ } as unknown as IMParticleWebSDKInstance ;
34+
35+ Store . call ( store , { } as SDKInitConfig , mockMPInstance , 'apikey' ) ;
36+
37+ store . isLocalStorageAvailable = true ;
38+ store . SDKConfig . useCookieStorage = true ;
39+ store . webviewBridgeEnabled = false ;
40+
41+ persistence = new Persistence ( mockMPInstance ) ;
42+ window . localStorage . removeItem ( encodeURIComponent ( store . storageName ) ) ;
43+ } ) ;
44+
45+ describe ( '#update' , ( ) => {
46+ describe ( 'noFunctional privacy flag set to true' , ( ) => {
47+ beforeEach ( ( ) => {
48+ store . setNoFunctional ( true ) ;
49+ store . webviewBridgeEnabled = false ;
50+ } ) ;
51+
52+ it ( 'should NOT write to cookie and localStorage when useCookieStorage is true' , ( ) => {
53+ store . SDKConfig . useCookieStorage = true ;
54+
55+ const setCookieSpy = jest . spyOn ( persistence , 'setCookie' ) ;
56+ const setLocalStorageSpy = jest . spyOn ( persistence , 'setLocalStorage' ) ;
57+
58+ persistence . update ( ) ;
59+
60+ expect ( setCookieSpy ) . not . toHaveBeenCalled ( ) ;
61+ expect ( setLocalStorageSpy ) . not . toHaveBeenCalled ( ) ;
62+ expect ( window . localStorage . getItem ( encodeURIComponent ( store . storageName ) ) ) . toBeNull ( ) ;
63+ } ) ;
64+
65+ it ( 'should NOT write to localStorage when useCookieStorage is false' , ( ) => {
66+ store . SDKConfig . useCookieStorage = false ;
67+
68+ const setCookieSpy = jest . spyOn ( persistence , 'setCookie' ) ;
69+ const setLocalStorageSpy = jest . spyOn ( persistence , 'setLocalStorage' ) ;
70+
71+ persistence . update ( ) ;
72+
73+ expect ( setCookieSpy ) . not . toHaveBeenCalled ( ) ;
74+ expect ( setLocalStorageSpy ) . not . toHaveBeenCalled ( ) ;
75+ expect ( window . localStorage . getItem ( encodeURIComponent ( store . storageName ) ) ) . toBeNull ( ) ;
76+ } ) ;
77+ } ) ;
78+
79+ describe ( 'noFunctional privacy flag set to false' , ( ) => {
80+ beforeEach ( ( ) => {
81+ store . setNoFunctional ( false ) ;
82+ store . webviewBridgeEnabled = false ;
83+ } ) ;
84+
85+ it ( 'should write to cookie and localStorage when useCookieStorage is true' , ( ) => {
86+ store . SDKConfig . useCookieStorage = true ;
87+
88+ jest . spyOn ( persistence , 'getCookie' ) . mockReturnValue ( null ) ;
89+
90+ const setCookieSpy = jest . spyOn ( persistence , 'setCookie' ) ;
91+ const setLocalStorageSpy = jest . spyOn ( persistence , 'setLocalStorage' ) ;
92+
93+ persistence . update ( ) ;
94+
95+ expect ( setCookieSpy ) . toHaveBeenCalled ( ) ;
96+ expect ( setLocalStorageSpy ) . toHaveBeenCalled ( ) ;
97+ expect ( window . localStorage . getItem ( encodeURIComponent ( store . storageName ) ) ) . not . toBeNull ( ) ;
98+ } ) ;
99+
100+ it ( 'should write to localStorage when useCookieStorage is false' , ( ) => {
101+ store . SDKConfig . useCookieStorage = false ;
102+
103+ const setCookieSpy = jest . spyOn ( persistence , 'setCookie' ) ;
104+ const setLocalStorageSpy = jest . spyOn ( persistence , 'setLocalStorage' ) ;
105+
106+ persistence . update ( ) ;
107+
108+ expect ( setCookieSpy ) . not . toHaveBeenCalled ( ) ;
109+ expect ( setLocalStorageSpy ) . toHaveBeenCalled ( ) ;
110+ expect ( window . localStorage . getItem ( encodeURIComponent ( store . storageName ) ) ) . not . toBeNull ( ) ;
111+ } ) ;
112+ } ) ;
113+
114+ describe ( 'noFunctional privacy flag set to false by default' , ( ) => {
115+ beforeEach ( ( ) => {
116+ // default is false
117+ store . webviewBridgeEnabled = false ;
118+ } ) ;
119+
120+ it ( 'should write to cookie and localStorage by default when useCookieStorage is true' , ( ) => {
121+ store . SDKConfig . useCookieStorage = true ;
122+
123+ jest . spyOn ( persistence , 'getCookie' ) . mockReturnValue ( null ) ;
124+
125+ const setCookieSpy = jest . spyOn ( persistence , 'setCookie' ) ;
126+ const setLocalStorageSpy = jest . spyOn ( persistence , 'setLocalStorage' ) ;
127+
128+ persistence . update ( ) ;
129+
130+ expect ( setCookieSpy ) . toHaveBeenCalled ( ) ;
131+ expect ( setLocalStorageSpy ) . toHaveBeenCalled ( ) ;
132+ expect ( window . localStorage . getItem ( encodeURIComponent ( store . storageName ) ) ) . not . toBeNull ( ) ;
133+ } ) ;
134+
135+ it ( 'should write to localStorage by default when useCookieStorage is false' , ( ) => {
136+ store . SDKConfig . useCookieStorage = false ;
137+
138+ const setCookieSpy = jest . spyOn ( persistence , 'setCookie' ) ;
139+ const setLocalStorageSpy = jest . spyOn ( persistence , 'setLocalStorage' ) ;
140+
141+ persistence . update ( ) ;
142+
143+ expect ( setCookieSpy ) . not . toHaveBeenCalled ( ) ;
144+ expect ( setLocalStorageSpy ) . toHaveBeenCalled ( ) ;
145+ expect ( window . localStorage . getItem ( encodeURIComponent ( store . storageName ) ) ) . not . toBeNull ( ) ;
146+ } ) ;
147+ } ) ;
148+
149+ it ( 'should NOT write to storage when webviewBridgeEnabled is true' , ( ) => {
150+ store . setNoFunctional ( false ) ;
151+ store . webviewBridgeEnabled = true ;
152+ store . SDKConfig . useCookieStorage = true ;
153+
154+ const setCookieSpy = jest . spyOn ( persistence , 'setCookie' ) ;
155+ const setLocalStorageSpy = jest . spyOn ( persistence , 'setLocalStorage' ) ;
156+
157+ persistence . update ( ) ;
158+
159+ expect ( setCookieSpy ) . not . toHaveBeenCalled ( ) ;
160+ expect ( setLocalStorageSpy ) . not . toHaveBeenCalled ( ) ;
161+ expect ( window . localStorage . getItem ( encodeURIComponent ( store . storageName ) ) ) . toBeNull ( ) ;
162+ } ) ;
163+ } ) ;
164+ } ) ;
0 commit comments