@@ -30,7 +30,9 @@ describe.each(storages)('validateCache', (storage) => {
3030 } ) ;
3131
3232 test ( 'if there is no cache, it should return false' , async ( ) => {
33- expect ( await validateCache ( { } , storage , fullSettings , keys , splits , rbSegments , segments , largeSegments ) ) . toBe ( false ) ;
33+ const result = await validateCache ( { } , storage , fullSettings , keys , splits , rbSegments , segments , largeSegments ) ;
34+ expect ( result . isCacheValid ) . toBe ( false ) ;
35+ expect ( result . lastUpdateTimestamp ) . toBeNull ( ) ;
3436
3537 expect ( logSpy ) . not . toHaveBeenCalled ( ) ;
3638
@@ -45,11 +47,15 @@ describe.each(storages)('validateCache', (storage) => {
4547 } ) ;
4648
4749 test ( 'if there is cache and it must not be cleared, it should return true' , async ( ) => {
50+ const lastUpdateTimestamp = Date . now ( ) - 1000 * 60 * 60 ; // 1 hour ago
4851 storage . setItem ( keys . buildSplitsTillKey ( ) , '1' ) ;
4952 storage . setItem ( keys . buildHashKey ( ) , FULL_SETTINGS_HASH ) ;
53+ storage . setItem ( keys . buildLastUpdatedKey ( ) , lastUpdateTimestamp + '' ) ;
5054 await storage . save && storage . save ( ) ;
5155
52- expect ( await validateCache ( { } , storage , fullSettings , keys , splits , rbSegments , segments , largeSegments ) ) . toBe ( true ) ;
56+ const result = await validateCache ( { } , storage , fullSettings , keys , splits , rbSegments , segments , largeSegments ) ;
57+ expect ( result . isCacheValid ) . toBe ( true ) ;
58+ expect ( result . lastUpdateTimestamp ) . toBe ( lastUpdateTimestamp ) ;
5359
5460 expect ( logSpy ) . not . toHaveBeenCalled ( ) ;
5561
@@ -69,7 +75,9 @@ describe.each(storages)('validateCache', (storage) => {
6975 storage . setItem ( keys . buildLastUpdatedKey ( ) , Date . now ( ) - 1000 * 60 * 60 * 24 * 2 + '' ) ; // 2 days ago
7076 await storage . save && storage . save ( ) ;
7177
72- expect ( await validateCache ( { expirationDays : 1 } , storage , fullSettings , keys , splits , rbSegments , segments , largeSegments ) ) . toBe ( false ) ;
78+ const result = await validateCache ( { expirationDays : 1 } , storage , fullSettings , keys , splits , rbSegments , segments , largeSegments ) ;
79+ expect ( result . isCacheValid ) . toBe ( false ) ;
80+ expect ( result . lastUpdateTimestamp ) . toBeNull ( ) ;
7381
7482 expect ( logSpy ) . toHaveBeenCalledWith ( 'storage:localstorage: Cache expired more than 1 days ago. Cleaning up cache' ) ;
7583
@@ -87,7 +95,9 @@ describe.each(storages)('validateCache', (storage) => {
8795 storage . setItem ( keys . buildHashKey ( ) , FULL_SETTINGS_HASH ) ;
8896 await storage . save && storage . save ( ) ;
8997
90- expect ( await validateCache ( { } , storage , { ...fullSettings , core : { ...fullSettings . core , authorizationKey : 'another-sdk-key' } } , keys , splits , rbSegments , segments , largeSegments ) ) . toBe ( false ) ;
98+ const result = await validateCache ( { } , storage , { ...fullSettings , core : { ...fullSettings . core , authorizationKey : 'another-sdk-key' } } , keys , splits , rbSegments , segments , largeSegments ) ;
99+ expect ( result . isCacheValid ) . toBe ( false ) ;
100+ expect ( result . lastUpdateTimestamp ) . toBeNull ( ) ;
91101
92102 expect ( logSpy ) . toHaveBeenCalledWith ( 'storage:localstorage: SDK key, flags filter criteria, or flags spec version has changed. Cleaning up cache' ) ;
93103
@@ -107,7 +117,9 @@ describe.each(storages)('validateCache', (storage) => {
107117 storage . setItem ( keys . buildHashKey ( ) , FULL_SETTINGS_HASH ) ;
108118 await storage . save && storage . save ( ) ;
109119
110- expect ( await validateCache ( { clearOnInit : true } , storage , fullSettings , keys , splits , rbSegments , segments , largeSegments ) ) . toBe ( false ) ;
120+ const result = await validateCache ( { clearOnInit : true } , storage , fullSettings , keys , splits , rbSegments , segments , largeSegments ) ;
121+ expect ( result . isCacheValid ) . toBe ( false ) ;
122+ expect ( result . lastUpdateTimestamp ) . toBeNull ( ) ;
111123
112124 expect ( logSpy ) . toHaveBeenCalledWith ( 'storage:localstorage: clearOnInit was set and cache was not cleared in the last 24 hours. Cleaning up cache' ) ;
113125
@@ -122,14 +134,20 @@ describe.each(storages)('validateCache', (storage) => {
122134
123135 // If cache is cleared, it should not clear again until a day has passed
124136 logSpy . mockClear ( ) ;
137+ const lastUpdateTimestamp = Date . now ( ) - 1000 * 60 * 60 ; // 1 hour ago
125138 storage . setItem ( keys . buildSplitsTillKey ( ) , '1' ) ;
126- expect ( await validateCache ( { clearOnInit : true } , storage , fullSettings , keys , splits , rbSegments , segments , largeSegments ) ) . toBe ( true ) ;
139+ storage . setItem ( keys . buildLastUpdatedKey ( ) , lastUpdateTimestamp + '' ) ;
140+ const result2 = await validateCache ( { clearOnInit : true } , storage , fullSettings , keys , splits , rbSegments , segments , largeSegments ) ;
141+ expect ( result2 . isCacheValid ) . toBe ( true ) ;
142+ expect ( result2 . lastUpdateTimestamp ) . toBe ( lastUpdateTimestamp ) ;
127143 expect ( logSpy ) . not . toHaveBeenCalled ( ) ;
128144 expect ( storage . getItem ( keys . buildLastClear ( ) ) ) . toBe ( lastClear ) ; // Last clear should not have changed
129145
130146 // If a day has passed, it should clear again
131147 storage . setItem ( keys . buildLastClear ( ) , ( Date . now ( ) - 1000 * 60 * 60 * 24 - 1 ) + '' ) ;
132- expect ( await validateCache ( { clearOnInit : true } , storage , fullSettings , keys , splits , rbSegments , segments , largeSegments ) ) . toBe ( false ) ;
148+ const result3 = await validateCache ( { clearOnInit : true } , storage , fullSettings , keys , splits , rbSegments , segments , largeSegments ) ;
149+ expect ( result3 . isCacheValid ) . toBe ( false ) ;
150+ expect ( result3 . lastUpdateTimestamp ) . toBeNull ( ) ;
133151 expect ( logSpy ) . toHaveBeenCalledWith ( 'storage:localstorage: clearOnInit was set and cache was not cleared in the last 24 hours. Cleaning up cache' ) ;
134152 expect ( splits . clear ) . toHaveBeenCalledTimes ( 2 ) ;
135153 expect ( rbSegments . clear ) . toHaveBeenCalledTimes ( 2 ) ;
0 commit comments