@@ -54,13 +54,17 @@ describe('given a MobileDataManager with mocked dependencies', () => {
5454 let diagnosticsManager : jest . Mocked < internal . DiagnosticsManager > ;
5555 let mobileDataManager : MobileDataManager ;
5656 let logger : LDLogger ;
57+ let eventSourceCloseMethod : jest . Mock ;
58+
5759 beforeEach ( ( ) => {
5860 logger = {
5961 error : jest . fn ( ) ,
6062 warn : jest . fn ( ) ,
6163 info : jest . fn ( ) ,
6264 debug : jest . fn ( ) ,
6365 } ;
66+ eventSourceCloseMethod = jest . fn ( ) ;
67+
6468 config = {
6569 logger,
6670 maxCachedContexts : 5 ,
@@ -94,7 +98,7 @@ describe('given a MobileDataManager with mocked dependencies', () => {
9498 options,
9599 onclose : jest . fn ( ) ,
96100 addEventListener : jest . fn ( ) ,
97- close : jest . fn ( ) ,
101+ close : eventSourceCloseMethod ,
98102 } ) ) ,
99103 fetch : mockedFetch ,
100104 getEventSourceCapabilities : jest . fn ( ) ,
@@ -223,6 +227,23 @@ describe('given a MobileDataManager with mocked dependencies', () => {
223227 expect ( platform . requests . fetch ) . not . toHaveBeenCalled ( ) ;
224228 } ) ;
225229
230+ it ( 'makes no connection when closed' , async ( ) => {
231+ mobileDataManager . close ( ) ;
232+
233+ const context = Context . fromLDContext ( { kind : 'user' , key : 'test-user' } ) ;
234+ const identifyOptions : LDIdentifyOptions = { waitForNetworkResults : false } ;
235+ const identifyResolve = jest . fn ( ) ;
236+ const identifyReject = jest . fn ( ) ;
237+
238+ await mobileDataManager . identify ( identifyResolve , identifyReject , context , identifyOptions ) ;
239+
240+ expect ( platform . requests . createEventSource ) . not . toHaveBeenCalled ( ) ;
241+ expect ( platform . requests . fetch ) . not . toHaveBeenCalled ( ) ;
242+ expect ( logger . debug ) . toHaveBeenCalledWith (
243+ '[MobileDataManager] Identify called after data manager was closed.' ,
244+ ) ;
245+ } ) ;
246+
226247 it ( 'should load cached flags and resolve the identify' , async ( ) => {
227248 const context = Context . fromLDContext ( { kind : 'user' , key : 'test-user' } ) ;
228249 const identifyOptions : LDIdentifyOptions = { waitForNetworkResults : false } ;
@@ -299,4 +320,25 @@ describe('given a MobileDataManager with mocked dependencies', () => {
299320 expect ( identifyResolve ) . toHaveBeenCalled ( ) ;
300321 expect ( identifyReject ) . not . toHaveBeenCalled ( ) ;
301322 } ) ;
323+
324+ it ( 'closes the event source when the data manager is closed' , async ( ) => {
325+ const context = Context . fromLDContext ( { kind : 'user' , key : 'test-user' } ) ;
326+ const identifyOptions : LDIdentifyOptions = { waitForNetworkResults : false } ;
327+ const identifyResolve = jest . fn ( ) ;
328+ const identifyReject = jest . fn ( ) ;
329+
330+ await mobileDataManager . identify ( identifyResolve , identifyReject , context , identifyOptions ) ;
331+ expect ( platform . requests . createEventSource ) . toHaveBeenCalled ( ) ;
332+
333+ mobileDataManager . close ( ) ;
334+ expect ( eventSourceCloseMethod ) . toHaveBeenCalled ( ) ;
335+
336+ // Verify a subsequent identify doesn't create a new event source
337+ await mobileDataManager . identify ( identifyResolve , identifyReject , context , identifyOptions ) ;
338+ expect ( platform . requests . createEventSource ) . toHaveBeenCalledTimes ( 1 ) ;
339+
340+ expect ( logger . debug ) . toHaveBeenCalledWith (
341+ '[MobileDataManager] Identify called after data manager was closed.' ,
342+ ) ;
343+ } ) ;
302344} ) ;
0 commit comments