@@ -2,22 +2,23 @@ import { DataSourceErrorKind } from '@launchdarkly/js-sdk-common/dist/internal';
22
33import { DataSourceState } from '../../src/datasource/DataSourceStatus' ;
44import DataSourceStatusManager from '../../src/datasource/DataSourceStatusManager' ;
5+ import LDEmitter from '../../src/LDEmitter' ;
56
67describe ( 'DataSourceStatusManager' , ( ) => {
78 test ( 'its first state is closed' , async ( ) => {
8- const underTest = new DataSourceStatusManager ( ) ;
9+ const underTest = new DataSourceStatusManager ( new LDEmitter ( ) ) ;
910 expect ( underTest . status . state ) . toEqual ( DataSourceState . Closed ) ;
1011 } ) ;
1112
1213 test ( 'it stays at initializing if receives recoverable error' , async ( ) => {
13- const underTest = new DataSourceStatusManager ( ) ;
14+ const underTest = new DataSourceStatusManager ( new LDEmitter ( ) ) ;
1415 underTest . requestStateUpdate ( DataSourceState . Initializing ) ;
1516 underTest . reportError ( DataSourceErrorKind . ErrorResponse , 'womp' , 404 , true ) ;
1617 expect ( underTest . status . state ) . toEqual ( DataSourceState . Initializing ) ;
1718 } ) ;
1819
1920 test ( 'it moves to closed if receives unrecoverable error' , async ( ) => {
20- const underTest = new DataSourceStatusManager ( ) ;
21+ const underTest = new DataSourceStatusManager ( new LDEmitter ( ) ) ;
2122 underTest . requestStateUpdate ( DataSourceState . Initializing ) ;
2223 underTest . reportError ( DataSourceErrorKind . ErrorResponse , 'womp' , 404 , false ) ;
2324 expect ( underTest . status . state ) . toEqual ( DataSourceState . Closed ) ;
@@ -26,7 +27,7 @@ describe('DataSourceStatusManager', () => {
2627 test ( 'it updates last error time with each error, but not stateSince' , async ( ) => {
2728 let time = 0 ;
2829 const stamper : ( ) => number = ( ) => time ;
29- const underTest = new DataSourceStatusManager ( stamper ) ;
30+ const underTest = new DataSourceStatusManager ( new LDEmitter ( ) , stamper ) ;
3031 underTest . reportError ( DataSourceErrorKind . ErrorResponse , 'womp' , 404 , true ) ;
3132 expect ( underTest . status . stateSince ) . toEqual ( 0 ) ;
3233 expect ( underTest . status . lastError ?. time ) . toEqual ( 0 ) ;
@@ -46,7 +47,7 @@ describe('DataSourceStatusManager', () => {
4647 let time = 0 ;
4748 const stamper : ( ) => number = ( ) => time ;
4849
49- const underTest = new DataSourceStatusManager ( stamper ) ;
50+ const underTest = new DataSourceStatusManager ( new LDEmitter ( ) , stamper ) ;
5051 expect ( underTest . status . state ) . toEqual ( DataSourceState . Closed ) ;
5152 expect ( underTest . status . stateSince ) . toEqual ( 0 ) ;
5253
@@ -62,9 +63,9 @@ describe('DataSourceStatusManager', () => {
6263 test ( 'it notifies listeners when state changes' , async ( ) => {
6364 let time = 0 ;
6465 const stamper : ( ) => number = ( ) => time ;
65- const underTest = new DataSourceStatusManager ( stamper ) ;
66- const spyListener = jest . fn ( ) ;
67- underTest . on ( spyListener ) ;
66+ const emitter = new LDEmitter ( ) ;
67+ const spy = jest . spyOn ( emitter , 'emit' ) ;
68+ const underTest = new DataSourceStatusManager ( emitter , stamper ) ;
6869
6970 underTest . requestStateUpdate ( DataSourceState . SetOffline ) ;
7071 time += 1 ;
@@ -73,33 +74,37 @@ describe('DataSourceStatusManager', () => {
7374 underTest . reportError ( DataSourceErrorKind . ErrorResponse , 'womp' , 400 , true ) ;
7475 time += 1 ;
7576 underTest . requestStateUpdate ( DataSourceState . Closed ) ;
76- expect ( spyListener ) . toHaveBeenCalledTimes ( 4 ) ;
77- expect ( spyListener ) . toHaveBeenNthCalledWith (
77+ expect ( spy ) . toHaveBeenCalledTimes ( 4 ) ;
78+ expect ( spy ) . toHaveBeenNthCalledWith (
7879 1 ,
80+ 'dataSourceStatus' ,
7981 expect . objectContaining ( {
8082 state : DataSourceState . SetOffline ,
8183 stateSince : 0 ,
8284 lastError : undefined ,
8385 } ) ,
8486 ) ;
85- expect ( spyListener ) . toHaveBeenNthCalledWith (
87+ expect ( spy ) . toHaveBeenNthCalledWith (
8688 2 ,
89+ 'dataSourceStatus' ,
8790 expect . objectContaining ( {
8891 state : DataSourceState . Interrupted ,
8992 stateSince : 1 ,
9093 lastError : expect . anything ( ) ,
9194 } ) ,
9295 ) ;
93- expect ( spyListener ) . toHaveBeenNthCalledWith (
96+ expect ( spy ) . toHaveBeenNthCalledWith (
9497 3 ,
98+ 'dataSourceStatus' ,
9599 expect . objectContaining ( {
96100 state : DataSourceState . Interrupted ,
97101 stateSince : 1 , // still in state interrupted
98102 lastError : expect . anything ( ) ,
99103 } ) ,
100104 ) ;
101- expect ( spyListener ) . toHaveBeenNthCalledWith (
105+ expect ( spy ) . toHaveBeenNthCalledWith (
102106 4 ,
107+ 'dataSourceStatus' ,
103108 expect . objectContaining ( {
104109 state : DataSourceState . Closed ,
105110 stateSince : 3 ,
0 commit comments