@@ -3,7 +3,7 @@ import { EventEmitter } from '../../utils/MinEvents';
33import { IReadinessManager } from '../types' ;
44import { SDK_READY , SDK_UPDATE , SDK_SPLITS_ARRIVED , SDK_SEGMENTS_ARRIVED , SDK_READY_FROM_CACHE , SDK_SPLITS_CACHE_LOADED , SDK_READY_TIMED_OUT } from '../constants' ;
55import { ISettings } from '../../types' ;
6- import { SdkUpdateMetadata , SdkUpdateMetadataKeys } from '../../../types/splitio' ;
6+ import { SdkUpdateMetadata , SdkUpdateMetadataKeys , SdkReadyMetadata } from '../../../types/splitio' ;
77
88const settings = {
99 startup : {
@@ -362,3 +362,81 @@ test('READINESS MANAGER / SDK_UPDATE should forward metadata from segments', ()
362362
363363 expect ( receivedMetadata ) . toEqual ( metadata ) ;
364364} ) ;
365+
366+ test ( 'READINESS MANAGER / SDK_READY_FROM_CACHE should emit with metadata when cache is loaded' , ( ) => {
367+ const readinessManager = readinessManagerFactory ( EventEmitter , settings ) ;
368+
369+ let receivedMetadata : SdkReadyMetadata | undefined ;
370+ readinessManager . gate . on ( SDK_READY_FROM_CACHE , ( meta : SdkReadyMetadata ) => {
371+ receivedMetadata = meta ;
372+ } ) ;
373+
374+ // Emit cache loaded event
375+ readinessManager . splits . emit ( SDK_SPLITS_CACHE_LOADED ) ;
376+
377+ expect ( receivedMetadata ) . toBeDefined ( ) ;
378+ expect ( receivedMetadata ! . initialCacheLoad ) . toBe ( true ) ;
379+ expect ( receivedMetadata ! . lastUpdateTimestamp ) . toBeGreaterThan ( 0 ) ;
380+ // Allow small timing difference (up to 10ms)
381+ expect ( receivedMetadata ! . lastUpdateTimestamp ) . toBeLessThanOrEqual ( Date . now ( ) + 10 ) ;
382+ } ) ;
383+
384+ test ( 'READINESS MANAGER / SDK_READY_FROM_CACHE should emit with metadata when SDK becomes ready without cache' , ( ) => {
385+ const readinessManager = readinessManagerFactory ( EventEmitter , settings ) ;
386+
387+ let receivedMetadata : SdkReadyMetadata | undefined ;
388+ readinessManager . gate . on ( SDK_READY_FROM_CACHE , ( meta : SdkReadyMetadata ) => {
389+ receivedMetadata = meta ;
390+ } ) ;
391+
392+ // Make SDK ready without cache first
393+ readinessManager . splits . emit ( SDK_SPLITS_ARRIVED ) ;
394+ readinessManager . segments . emit ( SDK_SEGMENTS_ARRIVED ) ;
395+
396+ expect ( receivedMetadata ) . toBeDefined ( ) ;
397+ expect ( receivedMetadata ! . initialCacheLoad ) . toBe ( false ) ;
398+ expect ( receivedMetadata ! . lastUpdateTimestamp ) . toBeGreaterThan ( 0 ) ;
399+ // Allow small timing difference (up to 10ms)
400+ expect ( receivedMetadata ! . lastUpdateTimestamp ) . toBeLessThanOrEqual ( Date . now ( ) + 10 ) ;
401+ } ) ;
402+
403+ test ( 'READINESS MANAGER / SDK_READY should emit with metadata when ready from cache' , ( ) => {
404+ const readinessManager = readinessManagerFactory ( EventEmitter , settings ) ;
405+
406+ // First emit cache loaded
407+ readinessManager . splits . emit ( SDK_SPLITS_CACHE_LOADED ) ;
408+
409+ let receivedMetadata : SdkReadyMetadata | undefined ;
410+ readinessManager . gate . on ( SDK_READY , ( meta : SdkReadyMetadata ) => {
411+ receivedMetadata = meta ;
412+ } ) ;
413+
414+ // Make SDK ready
415+ readinessManager . splits . emit ( SDK_SPLITS_ARRIVED ) ;
416+ readinessManager . segments . emit ( SDK_SEGMENTS_ARRIVED ) ;
417+
418+ expect ( receivedMetadata ) . toBeDefined ( ) ;
419+ expect ( receivedMetadata ! . initialCacheLoad ) . toBe ( true ) ; // Was ready from cache first
420+ expect ( receivedMetadata ! . lastUpdateTimestamp ) . toBeGreaterThan ( 0 ) ;
421+ // Allow small timing difference (up to 10ms)
422+ expect ( receivedMetadata ! . lastUpdateTimestamp ) . toBeLessThanOrEqual ( Date . now ( ) + 10 ) ;
423+ } ) ;
424+
425+ test ( 'READINESS MANAGER / SDK_READY should emit with metadata when ready without cache' , ( ) => {
426+ const readinessManager = readinessManagerFactory ( EventEmitter , settings ) ;
427+
428+ let receivedMetadata : SdkReadyMetadata | undefined ;
429+ readinessManager . gate . on ( SDK_READY , ( meta : SdkReadyMetadata ) => {
430+ receivedMetadata = meta ;
431+ } ) ;
432+
433+ // Make SDK ready without cache
434+ readinessManager . splits . emit ( SDK_SPLITS_ARRIVED ) ;
435+ readinessManager . segments . emit ( SDK_SEGMENTS_ARRIVED ) ;
436+
437+ expect ( receivedMetadata ) . toBeDefined ( ) ;
438+ expect ( receivedMetadata ! . initialCacheLoad ) . toBe ( false ) ; // Was not ready from cache
439+ expect ( receivedMetadata ! . lastUpdateTimestamp ) . toBeGreaterThan ( 0 ) ;
440+ // Allow small timing difference (up to 10ms)
441+ expect ( receivedMetadata ! . lastUpdateTimestamp ) . toBeLessThanOrEqual ( Date . now ( ) + 10 ) ;
442+ } ) ;
0 commit comments