1818import { FirebaseError } from '@firebase/util' ;
1919import { expect , use } from 'chai' ;
2020import * as sinon from 'sinon' ;
21+ import * as mockFetch from '../../../test/helpers/mock_fetch' ;
2122import sinonChai from 'sinon-chai' ;
2223import chaiAsPromised from 'chai-as-promised' ;
2324
2425import {
2526 regionalTestAuth ,
27+ regionalTestAuthWithTokenRefreshHandler ,
2628 testAuth ,
2729 testUser
2830} from '../../../test/helpers/mock_auth' ;
31+ import { RegionalEndpoint } from '../../api' ;
32+ import { mockRegionalEndpointWithParent } from '../../../test/helpers/api/helper' ;
2933import { AuthInternal } from '../../model/auth' ;
3034import { UserInternal } from '../../model/user' ;
3135import { AuthInterop } from './firebase_internal' ;
@@ -227,17 +231,32 @@ describe('core/auth/firebase_internal', () => {
227231
228232describe ( 'core/auth/firebase_internal - Regional Firebase Auth' , ( ) => {
229233 let regionalAuth : AuthInternal ;
234+ let regionalAuthWithRefreshToken : AuthInternal ;
230235 let regionalAuthInternal : AuthInterop ;
236+ let regionalAuthWithRefreshTokenInternal : AuthInterop ;
231237 let now : number ;
232238 beforeEach ( async ( ) => {
233239 regionalAuth = await regionalTestAuth ( ) ;
234240 regionalAuthInternal = new AuthInterop ( regionalAuth ) ;
241+ regionalAuthWithRefreshToken =
242+ await regionalTestAuthWithTokenRefreshHandler ( ) ;
243+ regionalAuthWithRefreshTokenInternal = new AuthInterop (
244+ regionalAuthWithRefreshToken
245+ ) ;
235246 now = Date . now ( ) ;
236247 sinon . stub ( Date , 'now' ) . returns ( now ) ;
248+ mockFetch . setUp ( ) ;
249+ mockRegionalEndpointWithParent (
250+ RegionalEndpoint . EXCHANGE_TOKEN ,
251+ 'projects/test-project-id/locations/us/tenants/tenant-1/idpConfigs/idp-config' ,
252+ 'test-api-key' ,
253+ { accessToken : 'access-token-new' , expiresIn : 10_000 }
254+ ) ;
237255 } ) ;
238256
239257 afterEach ( ( ) => {
240258 sinon . restore ( ) ;
259+ mockFetch . tearDown ( ) ;
241260 } ) ;
242261
243262 context ( 'getFirebaseToken' , ( ) => {
@@ -265,7 +284,8 @@ describe('core/auth/firebase_internal - Regional Firebase Auth', () => {
265284 expirationTime : now - 5_000
266285 } ) ;
267286 expect ( await regionalAuthInternal . getToken ( ) ) . to . null ;
268- expect ( regionalAuth . firebaseToken ) . to . null ;
287+ const firebaseToken = await regionalAuth . getFirebaseAccessToken ( ) ;
288+ expect ( firebaseToken ) . to . null ;
269289 } ) ;
270290
271291 it ( 'logs out if token is expiring in next 5 seconds' , async ( ) => {
@@ -274,24 +294,36 @@ describe('core/auth/firebase_internal - Regional Firebase Auth', () => {
274294 expirationTime : now + 5_000
275295 } ) ;
276296 expect ( await regionalAuthInternal . getToken ( ) ) . to . null ;
277- expect ( regionalAuth . firebaseToken ) . to . null ;
297+ const firebaseToken = await regionalAuth . getFirebaseAccessToken ( ) ;
298+ expect ( firebaseToken ) . to . null ;
278299 } ) ;
279300
280- it ( 'logs warning if getToken is called with forceRefresh true' , async ( ) => {
281- sinon . stub ( console , 'warn' ) ;
282- await regionalAuth . _updateFirebaseToken ( {
301+ it ( 'returns refreshIdToken if getToken is called with forceRefresh true' , async ( ) => {
302+ await regionalAuthWithRefreshToken . _updateFirebaseToken ( {
283303 token : 'access-token' ,
284- expirationTime : now + 300_000
304+ expirationTime : now + 30_000
285305 } ) ;
286- expect ( await regionalAuthInternal . getToken ( true ) ) . to . eql ( {
287- accessToken : 'access-token'
306+ expect ( await regionalAuthWithRefreshTokenInternal . getToken ( true ) ) . to . eql ( {
307+ accessToken : 'access-token-new '
288308 } ) ;
289- expect ( console . warn ) . to . have . been . calledWith (
290- sinon . match . string ,
291- sinon . match (
292- / R e f r e s h t o k e n i s n o t a v a l i d o p e r a t i o n f o r R e g i o n a l A u t h i n s t a n c e i n i t i a l i z e d \. /
293- )
294- ) ;
309+ } ) ;
310+
311+ it ( 'returns refreshIdToken if current idToken is expired' , async ( ) => {
312+ await regionalAuthWithRefreshToken . _updateFirebaseToken ( {
313+ token : 'access-token' ,
314+ expirationTime : now - 5_000
315+ } ) ;
316+ expect ( await regionalAuthWithRefreshTokenInternal . getToken ( ) ) . to . eql ( {
317+ accessToken : 'access-token-new'
318+ } ) ;
319+ } ) ;
320+
321+ it ( 'returns null if current idToken is expired and tokenRefreshHandler is not implemented' , async ( ) => {
322+ await regionalAuth . _updateFirebaseToken ( {
323+ token : 'access-token' ,
324+ expirationTime : now - 5_000
325+ } ) ;
326+ expect ( await regionalAuthInternal . getToken ( ) ) . to . eql ( null ) ;
295327 } ) ;
296328 } ) ;
297329} ) ;
0 commit comments