@@ -317,6 +317,7 @@ describe('core/auth/auth_impl', () => {
317
317
let exchangeTokenStub : sinon . SinonStub ;
318
318
let mockToken : FirebaseToken ;
319
319
let expiredMockToken : FirebaseToken ;
320
+ let soonToExpireMockToken : FirebaseToken ;
320
321
let tokenRefreshHandler : TokenRefreshHandler ;
321
322
const tokenKey = `firebase:persistence-token:${ FAKE_APP . options . apiKey ! } :${
322
323
FAKE_APP . name
@@ -331,6 +332,10 @@ describe('core/auth/auth_impl', () => {
331
332
token : 'test-token' ,
332
333
expirationTime : Date . now ( ) + 300000 // 5 minutes from now
333
334
} ;
335
+ soonToExpireMockToken = {
336
+ token : 'test-token' ,
337
+ expirationTime : Date . now ( ) + 60000 // 1 minutes from now
338
+ } ;
334
339
expiredMockToken = {
335
340
token : 'expired-test-token' ,
336
341
expirationTime : Date . now ( ) - 1000 // 1 second ago
@@ -364,6 +369,28 @@ describe('core/auth/auth_impl', () => {
364
369
expect ( exchangeTokenStub ) . not . to . have . been . called ;
365
370
} ) ;
366
371
372
+ it ( 'should refresh the token if token is expiring in next 1 minute and a token refresh handler is set' , async ( ) => {
373
+ persistenceStub . _get
374
+ . withArgs ( tokenKey )
375
+ . resolves ( soonToExpireMockToken as any ) ;
376
+ auth . setTokenRefreshHandler ( tokenRefreshHandler ) ;
377
+
378
+ exchangeTokenStub . callsFake ( async ( ) => {
379
+ // When exchangeToken is called, simulate that the new token is persisted.
380
+ persistenceStub . _get . withArgs ( tokenKey ) . resolves ( mockToken as any ) ;
381
+ } ) ;
382
+
383
+ const token = await auth . getFirebaseAccessToken ( ) ;
384
+
385
+ expect ( tokenRefreshHandler . refreshIdpToken ) . to . have . been . calledOnce ;
386
+ expect ( exchangeTokenStub ) . to . have . been . calledWith (
387
+ auth ,
388
+ 'test-idp' ,
389
+ 'new-id-token'
390
+ ) ;
391
+ expect ( token ) . to . eql ( 'test-token' ) ;
392
+ } ) ;
393
+
367
394
it ( 'should refresh the token if it is expired and a token refresh handler is set' , async ( ) => {
368
395
persistenceStub . _get . withArgs ( tokenKey ) . resolves ( expiredMockToken as any ) ;
369
396
auth . setTokenRefreshHandler ( tokenRefreshHandler ) ;
0 commit comments