@@ -7,20 +7,25 @@ import { LoginStateSubject, SyncStateSubject } from "../session/session-type";
77import { LoginState } from "../session/session-states/login-state.enum" ;
88import { KeycloakAuthService } from "../session/auth/keycloak/keycloak-auth.service" ;
99import { Subject } from "rxjs" ;
10+ import { NAVIGATOR_TOKEN } from "../../utils/di-tokens" ;
1011
1112describe ( "SyncService" , ( ) => {
1213 let service : SyncService ;
1314 let loginState : LoginStateSubject ;
1415 let mockAuthService : jasmine . SpyObj < KeycloakAuthService > ;
16+ let mockNavigator ;
1517
1618 beforeEach ( ( ) => {
1719 mockAuthService = jasmine . createSpyObj ( [ "login" , "addAuthHeader" ] ) ;
20+ mockNavigator = { onLine : true } ;
21+
1822 TestBed . configureTestingModule ( {
1923 providers : [
2024 { provide : KeycloakAuthService , useValue : mockAuthService } ,
2125 { provide : Database , useClass : PouchDatabase } ,
2226 LoginStateSubject ,
2327 SyncStateSubject ,
28+ { provide : NAVIGATOR_TOKEN , useValue : mockNavigator } ,
2429 ] ,
2530 } ) ;
2631 service = TestBed . inject ( SyncService ) ;
@@ -94,4 +99,24 @@ describe("SyncService", () => {
9499
95100 stopPeriodicTimer ( ) ;
96101 } ) ) ;
102+
103+ it ( "should skip sync calls when offline" , fakeAsync ( ( ) => {
104+ const mockLocalDb = jasmine . createSpyObj ( [ "sync" ] ) ;
105+ mockLocalDb . sync . and . resolveTo ( { } ) ;
106+ const db = TestBed . inject ( Database ) as PouchDatabase ;
107+ spyOn ( db , "getPouchDB" ) . and . returnValue ( mockLocalDb ) ;
108+
109+ mockNavigator . onLine = false ;
110+
111+ service . startSync ( ) ;
112+
113+ tick ( 1000 ) ;
114+ expect ( mockLocalDb . sync ) . not . toHaveBeenCalled ( ) ;
115+
116+ mockNavigator . onLine = true ;
117+ tick ( SyncService . SYNC_INTERVAL ) ;
118+ expect ( mockLocalDb . sync ) . toHaveBeenCalled ( ) ;
119+
120+ stopPeriodicTimer ( ) ;
121+ } ) ) ;
97122} ) ;
0 commit comments