@@ -6,10 +6,13 @@ jest.doMock('react-native/Libraries/AppState/AppState', () => AppStateMock);
66const syncManagerMockWithPushManager = {
77 flush : jest . fn ( ) ,
88 pushManager : { start : jest . fn ( ) , stop : jest . fn ( ) } ,
9+ pollingManager : { syncAll : jest . fn ( ) } ,
910} ;
1011const settingsMock = {
1112 log : { debug : jest . fn ( ) } ,
1213 flushDataOnBackground : true ,
14+ scheduler : { featuresRefreshRate : 100 } ,
15+ sync : { enabled : true } ,
1316} ;
1417
1518describe ( 'RNSignalListener' , ( ) => {
@@ -20,7 +23,7 @@ describe('RNSignalListener', () => {
2023 syncManagerMockWithPushManager . pushManager . start . mockClear ( ) ;
2124 } ) ;
2225
23- test ( 'starting in foreground' , ( ) => {
26+ test ( 'starting in foreground' , async ( ) => {
2427 // @ts -expect-error. SyncManager mock partially implemented
2528 const signalListener = new RNSignalListener ( syncManagerMockWithPushManager , settingsMock ) ;
2629
@@ -41,9 +44,14 @@ describe('RNSignalListener', () => {
4144 expect ( syncManagerMockWithPushManager . pushManager . stop ) . toBeCalledTimes ( 1 ) ;
4245 expect ( syncManagerMockWithPushManager . pushManager . stop ) . toBeCalledTimes ( 1 ) ;
4346
47+ // Wait for features refresh rate to validate that syncAll is called when resuming foreground
48+ expect ( syncManagerMockWithPushManager . pollingManager ! . syncAll ) . toBeCalledTimes ( 0 ) ;
49+ await new Promise ( ( resolve ) => setTimeout ( resolve , settingsMock . scheduler . featuresRefreshRate ) ) ;
50+
4451 // Going to foreground should be handled
4552 AppStateMock . _emitChangeEvent ( 'inactive' ) ;
4653 expect ( syncManagerMockWithPushManager . pushManager . start ) . toBeCalledTimes ( 2 ) ;
54+ expect ( syncManagerMockWithPushManager . pollingManager ! . syncAll ) . toBeCalledTimes ( 1 ) ;
4755
4856 // Handling another foreground event, have no effect
4957 AppStateMock . _emitChangeEvent ( 'active' ) ;
@@ -56,9 +64,14 @@ describe('RNSignalListener', () => {
5664 expect ( syncManagerMockWithPushManager . flush ) . toBeCalledTimes ( 2 ) ;
5765 expect ( syncManagerMockWithPushManager . pushManager . stop ) . toBeCalledTimes ( 2 ) ;
5866
67+ // Validate that syncAll is not called if singleSync is enabled
68+ settingsMock . sync . enabled = false ;
69+ await new Promise ( ( resolve ) => setTimeout ( resolve , settingsMock . scheduler . featuresRefreshRate ) ) ;
70+
5971 // Going to foreground should be handled again
6072 AppStateMock . _emitChangeEvent ( 'active' ) ;
6173 expect ( syncManagerMockWithPushManager . pushManager . start ) . toBeCalledTimes ( 3 ) ;
74+ expect ( syncManagerMockWithPushManager . pollingManager ! . syncAll ) . toBeCalledTimes ( 1 ) ;
6275
6376 // Stopping RNSignalListener
6477 signalListener . stop ( ) ; // @ts -ignore access private property
0 commit comments