1616 */
1717import '../test/setup' ;
1818import { expect } from 'chai' ;
19- import { spy , stub } from 'sinon' ;
19+ import { SinonStub , spy , stub } from 'sinon' ;
2020import {
2121 setTokenAutoRefreshEnabled ,
2222 initializeAppCheck ,
@@ -31,7 +31,12 @@ import {
3131 getFakeAppCheck ,
3232 removegreCAPTCHAScriptsOnPage
3333} from '../test/util' ;
34- import { clearState , getState } from './state' ;
34+ import {
35+ clearState ,
36+ DEFAULT_STATE ,
37+ getStateReference ,
38+ setInitialState
39+ } from './state' ;
3540import * as reCAPTCHA from './recaptcha' ;
3641import * as util from './util' ;
3742import * as logger from './logger' ;
@@ -52,15 +57,21 @@ import { getDebugToken } from './debug';
5257
5358describe ( 'api' , ( ) => {
5459 let app : FirebaseApp ;
60+ let storageReadStub : SinonStub ;
61+ let storageWriteStub : SinonStub ;
5562
5663 beforeEach ( ( ) => {
5764 app = getFullApp ( ) ;
65+ storageReadStub = stub ( storage , 'readTokenFromStorage' ) . resolves ( undefined ) ;
66+ storageWriteStub = stub ( storage , 'writeTokenToStorage' ) ;
5867 stub ( util , 'getRecaptcha' ) . returns ( getFakeGreCAPTCHA ( ) ) ;
5968 } ) ;
6069
61- afterEach ( ( ) => {
70+ afterEach ( async ( ) => {
6271 clearState ( ) ;
6372 removegreCAPTCHAScriptsOnPage ( ) ;
73+ storageReadStub . restore ( ) ;
74+ storageWriteStub . restore ( ) ;
6475 return deleteApp ( app ) ;
6576 } ) ;
6677
@@ -216,19 +227,19 @@ describe('api', () => {
216227 } ) ;
217228
218229 it ( 'sets activated to true' , ( ) => {
219- expect ( getState ( app ) . activated ) . to . equal ( false ) ;
230+ expect ( getStateReference ( app ) . activated ) . to . equal ( false ) ;
220231 initializeAppCheck ( app , {
221232 provider : new ReCaptchaV3Provider ( FAKE_SITE_KEY )
222233 } ) ;
223- expect ( getState ( app ) . activated ) . to . equal ( true ) ;
234+ expect ( getStateReference ( app ) . activated ) . to . equal ( true ) ;
224235 } ) ;
225236
226237 it ( 'isTokenAutoRefreshEnabled value defaults to global setting' , ( ) => {
227238 app . automaticDataCollectionEnabled = false ;
228239 initializeAppCheck ( app , {
229240 provider : new ReCaptchaV3Provider ( FAKE_SITE_KEY )
230241 } ) ;
231- expect ( getState ( app ) . isTokenAutoRefreshEnabled ) . to . equal ( false ) ;
242+ expect ( getStateReference ( app ) . isTokenAutoRefreshEnabled ) . to . equal ( false ) ;
232243 } ) ;
233244
234245 it ( 'sets isTokenAutoRefreshEnabled correctly, overriding global setting' , ( ) => {
@@ -237,15 +248,16 @@ describe('api', () => {
237248 provider : new ReCaptchaV3Provider ( FAKE_SITE_KEY ) ,
238249 isTokenAutoRefreshEnabled : true
239250 } ) ;
240- expect ( getState ( app ) . isTokenAutoRefreshEnabled ) . to . equal ( true ) ;
251+ expect ( getStateReference ( app ) . isTokenAutoRefreshEnabled ) . to . equal ( true ) ;
241252 } ) ;
242253 } ) ;
243254 describe ( 'setTokenAutoRefreshEnabled()' , ( ) => {
244255 it ( 'sets isTokenAutoRefreshEnabled correctly' , ( ) => {
245256 const app = getFakeApp ( { automaticDataCollectionEnabled : false } ) ;
246257 const appCheck = getFakeAppCheck ( app ) ;
258+ setInitialState ( app , { ...DEFAULT_STATE } ) ;
247259 setTokenAutoRefreshEnabled ( appCheck , true ) ;
248- expect ( getState ( app ) . isTokenAutoRefreshEnabled ) . to . equal ( true ) ;
260+ expect ( getStateReference ( app ) . isTokenAutoRefreshEnabled ) . to . equal ( true ) ;
249261 } ) ;
250262 } ) ;
251263 describe ( 'getToken()' , ( ) => {
@@ -279,7 +291,7 @@ describe('api', () => {
279291 isTokenAutoRefreshEnabled : true
280292 } ) ;
281293
282- expect ( getState ( app ) . tokenObservers . length ) . to . equal ( 1 ) ;
294+ expect ( getStateReference ( app ) . tokenObservers . length ) . to . equal ( 1 ) ;
283295
284296 const fakeRecaptchaToken = 'fake-recaptcha-token' ;
285297 const fakeRecaptchaAppCheckToken = {
@@ -291,7 +303,6 @@ describe('api', () => {
291303 stub ( client , 'exchangeToken' ) . returns (
292304 Promise . resolve ( fakeRecaptchaAppCheckToken )
293305 ) ;
294- stub ( storage , 'writeTokenToStorage' ) . returns ( Promise . resolve ( undefined ) ) ;
295306
296307 const listener1 = stub ( ) . throws ( new Error ( ) ) ;
297308 const listener2 = spy ( ) ;
@@ -302,7 +313,7 @@ describe('api', () => {
302313 const unsubscribe1 = onTokenChanged ( appCheck , listener1 , errorFn1 ) ;
303314 const unsubscribe2 = onTokenChanged ( appCheck , listener2 , errorFn2 ) ;
304315
305- expect ( getState ( app ) . tokenObservers . length ) . to . equal ( 3 ) ;
316+ expect ( getStateReference ( app ) . tokenObservers . length ) . to . equal ( 3 ) ;
306317
307318 await internalApi . getToken ( appCheck as AppCheckService ) ;
308319
@@ -315,7 +326,7 @@ describe('api', () => {
315326 expect ( errorFn2 ) . to . not . be . called ;
316327 unsubscribe1 ( ) ;
317328 unsubscribe2 ( ) ;
318- expect ( getState ( app ) . tokenObservers . length ) . to . equal ( 1 ) ;
329+ expect ( getStateReference ( app ) . tokenObservers . length ) . to . equal ( 1 ) ;
319330 } ) ;
320331
321332 it ( 'Listeners work when using Observer pattern' , async ( ) => {
@@ -324,7 +335,7 @@ describe('api', () => {
324335 isTokenAutoRefreshEnabled : true
325336 } ) ;
326337
327- expect ( getState ( app ) . tokenObservers . length ) . to . equal ( 1 ) ;
338+ expect ( getStateReference ( app ) . tokenObservers . length ) . to . equal ( 1 ) ;
328339
329340 const fakeRecaptchaToken = 'fake-recaptcha-token' ;
330341 const fakeRecaptchaAppCheckToken = {
@@ -336,7 +347,7 @@ describe('api', () => {
336347 stub ( client , 'exchangeToken' ) . returns (
337348 Promise . resolve ( fakeRecaptchaAppCheckToken )
338349 ) ;
339- stub ( storage , 'writeTokenToStorage' ) . returns ( Promise . resolve ( undefined ) ) ;
350+ storageWriteStub . returns ( Promise . resolve ( undefined ) ) ;
340351
341352 const listener1 = stub ( ) . throws ( new Error ( ) ) ;
342353 const listener2 = spy ( ) ;
@@ -357,7 +368,7 @@ describe('api', () => {
357368 error : errorFn1
358369 } ) ;
359370
360- expect ( getState ( app ) . tokenObservers . length ) . to . equal ( 3 ) ;
371+ expect ( getStateReference ( app ) . tokenObservers . length ) . to . equal ( 3 ) ;
361372
362373 await internalApi . getToken ( appCheck as AppCheckService ) ;
363374
@@ -370,7 +381,7 @@ describe('api', () => {
370381 expect ( errorFn2 ) . to . not . be . called ;
371382 unsubscribe1 ( ) ;
372383 unsubscribe2 ( ) ;
373- expect ( getState ( app ) . tokenObservers . length ) . to . equal ( 1 ) ;
384+ expect ( getStateReference ( app ) . tokenObservers . length ) . to . equal ( 1 ) ;
374385 } ) ;
375386
376387 it ( 'onError() catches token errors' , async ( ) => {
@@ -380,12 +391,12 @@ describe('api', () => {
380391 isTokenAutoRefreshEnabled : false
381392 } ) ;
382393
383- expect ( getState ( app ) . tokenObservers . length ) . to . equal ( 0 ) ;
394+ expect ( getStateReference ( app ) . tokenObservers . length ) . to . equal ( 0 ) ;
384395
385396 const fakeRecaptchaToken = 'fake-recaptcha-token' ;
386397 stub ( reCAPTCHA , 'getToken' ) . returns ( Promise . resolve ( fakeRecaptchaToken ) ) ;
387398 stub ( client , 'exchangeToken' ) . rejects ( 'exchange error' ) ;
388- stub ( storage , 'writeTokenToStorage' ) . returns ( Promise . resolve ( undefined ) ) ;
399+ storageWriteStub . returns ( Promise . resolve ( undefined ) ) ;
389400
390401 const listener1 = spy ( ) ;
391402
@@ -395,13 +406,13 @@ describe('api', () => {
395406
396407 await internalApi . getToken ( appCheck as AppCheckService ) ;
397408
398- expect ( getState ( app ) . tokenObservers . length ) . to . equal ( 1 ) ;
409+ expect ( getStateReference ( app ) . tokenObservers . length ) . to . equal ( 1 ) ;
399410
400411 expect ( errorFn1 ) . to . be . calledOnce ;
401412 expect ( errorFn1 . args [ 0 ] [ 0 ] . name ) . to . include ( 'exchange error' ) ;
402413
403414 unsubscribe1 ( ) ;
404- expect ( getState ( app ) . tokenObservers . length ) . to . equal ( 0 ) ;
415+ expect ( getStateReference ( app ) . tokenObservers . length ) . to . equal ( 0 ) ;
405416 } ) ;
406417 } ) ;
407418} ) ;
0 commit comments