16
16
*/
17
17
import '../test/setup' ;
18
18
import { expect } from 'chai' ;
19
- import { spy , stub } from 'sinon' ;
19
+ import { SinonStub , spy , stub } from 'sinon' ;
20
20
import {
21
21
setTokenAutoRefreshEnabled ,
22
22
initializeAppCheck ,
@@ -31,7 +31,12 @@ import {
31
31
getFakeAppCheck ,
32
32
removegreCAPTCHAScriptsOnPage
33
33
} from '../test/util' ;
34
- import { clearState , getState } from './state' ;
34
+ import {
35
+ clearState ,
36
+ DEFAULT_STATE ,
37
+ getStateReference ,
38
+ setInitialState
39
+ } from './state' ;
35
40
import * as reCAPTCHA from './recaptcha' ;
36
41
import * as util from './util' ;
37
42
import * as logger from './logger' ;
@@ -52,15 +57,21 @@ import { getDebugToken } from './debug';
52
57
53
58
describe ( 'api' , ( ) => {
54
59
let app : FirebaseApp ;
60
+ let storageReadStub : SinonStub ;
61
+ let storageWriteStub : SinonStub ;
55
62
56
63
beforeEach ( ( ) => {
57
64
app = getFullApp ( ) ;
65
+ storageReadStub = stub ( storage , 'readTokenFromStorage' ) . resolves ( undefined ) ;
66
+ storageWriteStub = stub ( storage , 'writeTokenToStorage' ) ;
58
67
stub ( util , 'getRecaptcha' ) . returns ( getFakeGreCAPTCHA ( ) ) ;
59
68
} ) ;
60
69
61
- afterEach ( ( ) => {
70
+ afterEach ( async ( ) => {
62
71
clearState ( ) ;
63
72
removegreCAPTCHAScriptsOnPage ( ) ;
73
+ storageReadStub . restore ( ) ;
74
+ storageWriteStub . restore ( ) ;
64
75
return deleteApp ( app ) ;
65
76
} ) ;
66
77
@@ -216,19 +227,19 @@ describe('api', () => {
216
227
} ) ;
217
228
218
229
it ( 'sets activated to true' , ( ) => {
219
- expect ( getState ( app ) . activated ) . to . equal ( false ) ;
230
+ expect ( getStateReference ( app ) . activated ) . to . equal ( false ) ;
220
231
initializeAppCheck ( app , {
221
232
provider : new ReCaptchaV3Provider ( FAKE_SITE_KEY )
222
233
} ) ;
223
- expect ( getState ( app ) . activated ) . to . equal ( true ) ;
234
+ expect ( getStateReference ( app ) . activated ) . to . equal ( true ) ;
224
235
} ) ;
225
236
226
237
it ( 'isTokenAutoRefreshEnabled value defaults to global setting' , ( ) => {
227
238
app . automaticDataCollectionEnabled = false ;
228
239
initializeAppCheck ( app , {
229
240
provider : new ReCaptchaV3Provider ( FAKE_SITE_KEY )
230
241
} ) ;
231
- expect ( getState ( app ) . isTokenAutoRefreshEnabled ) . to . equal ( false ) ;
242
+ expect ( getStateReference ( app ) . isTokenAutoRefreshEnabled ) . to . equal ( false ) ;
232
243
} ) ;
233
244
234
245
it ( 'sets isTokenAutoRefreshEnabled correctly, overriding global setting' , ( ) => {
@@ -237,15 +248,16 @@ describe('api', () => {
237
248
provider : new ReCaptchaV3Provider ( FAKE_SITE_KEY ) ,
238
249
isTokenAutoRefreshEnabled : true
239
250
} ) ;
240
- expect ( getState ( app ) . isTokenAutoRefreshEnabled ) . to . equal ( true ) ;
251
+ expect ( getStateReference ( app ) . isTokenAutoRefreshEnabled ) . to . equal ( true ) ;
241
252
} ) ;
242
253
} ) ;
243
254
describe ( 'setTokenAutoRefreshEnabled()' , ( ) => {
244
255
it ( 'sets isTokenAutoRefreshEnabled correctly' , ( ) => {
245
256
const app = getFakeApp ( { automaticDataCollectionEnabled : false } ) ;
246
257
const appCheck = getFakeAppCheck ( app ) ;
258
+ setInitialState ( app , { ...DEFAULT_STATE } ) ;
247
259
setTokenAutoRefreshEnabled ( appCheck , true ) ;
248
- expect ( getState ( app ) . isTokenAutoRefreshEnabled ) . to . equal ( true ) ;
260
+ expect ( getStateReference ( app ) . isTokenAutoRefreshEnabled ) . to . equal ( true ) ;
249
261
} ) ;
250
262
} ) ;
251
263
describe ( 'getToken()' , ( ) => {
@@ -279,7 +291,7 @@ describe('api', () => {
279
291
isTokenAutoRefreshEnabled : true
280
292
} ) ;
281
293
282
- expect ( getState ( app ) . tokenObservers . length ) . to . equal ( 1 ) ;
294
+ expect ( getStateReference ( app ) . tokenObservers . length ) . to . equal ( 1 ) ;
283
295
284
296
const fakeRecaptchaToken = 'fake-recaptcha-token' ;
285
297
const fakeRecaptchaAppCheckToken = {
@@ -291,7 +303,6 @@ describe('api', () => {
291
303
stub ( client , 'exchangeToken' ) . returns (
292
304
Promise . resolve ( fakeRecaptchaAppCheckToken )
293
305
) ;
294
- stub ( storage , 'writeTokenToStorage' ) . returns ( Promise . resolve ( undefined ) ) ;
295
306
296
307
const listener1 = stub ( ) . throws ( new Error ( ) ) ;
297
308
const listener2 = spy ( ) ;
@@ -302,7 +313,7 @@ describe('api', () => {
302
313
const unsubscribe1 = onTokenChanged ( appCheck , listener1 , errorFn1 ) ;
303
314
const unsubscribe2 = onTokenChanged ( appCheck , listener2 , errorFn2 ) ;
304
315
305
- expect ( getState ( app ) . tokenObservers . length ) . to . equal ( 3 ) ;
316
+ expect ( getStateReference ( app ) . tokenObservers . length ) . to . equal ( 3 ) ;
306
317
307
318
await internalApi . getToken ( appCheck as AppCheckService ) ;
308
319
@@ -315,7 +326,7 @@ describe('api', () => {
315
326
expect ( errorFn2 ) . to . not . be . called ;
316
327
unsubscribe1 ( ) ;
317
328
unsubscribe2 ( ) ;
318
- expect ( getState ( app ) . tokenObservers . length ) . to . equal ( 1 ) ;
329
+ expect ( getStateReference ( app ) . tokenObservers . length ) . to . equal ( 1 ) ;
319
330
} ) ;
320
331
321
332
it ( 'Listeners work when using Observer pattern' , async ( ) => {
@@ -324,7 +335,7 @@ describe('api', () => {
324
335
isTokenAutoRefreshEnabled : true
325
336
} ) ;
326
337
327
- expect ( getState ( app ) . tokenObservers . length ) . to . equal ( 1 ) ;
338
+ expect ( getStateReference ( app ) . tokenObservers . length ) . to . equal ( 1 ) ;
328
339
329
340
const fakeRecaptchaToken = 'fake-recaptcha-token' ;
330
341
const fakeRecaptchaAppCheckToken = {
@@ -336,7 +347,7 @@ describe('api', () => {
336
347
stub ( client , 'exchangeToken' ) . returns (
337
348
Promise . resolve ( fakeRecaptchaAppCheckToken )
338
349
) ;
339
- stub ( storage , 'writeTokenToStorage' ) . returns ( Promise . resolve ( undefined ) ) ;
350
+ storageWriteStub . returns ( Promise . resolve ( undefined ) ) ;
340
351
341
352
const listener1 = stub ( ) . throws ( new Error ( ) ) ;
342
353
const listener2 = spy ( ) ;
@@ -357,7 +368,7 @@ describe('api', () => {
357
368
error : errorFn1
358
369
} ) ;
359
370
360
- expect ( getState ( app ) . tokenObservers . length ) . to . equal ( 3 ) ;
371
+ expect ( getStateReference ( app ) . tokenObservers . length ) . to . equal ( 3 ) ;
361
372
362
373
await internalApi . getToken ( appCheck as AppCheckService ) ;
363
374
@@ -370,7 +381,7 @@ describe('api', () => {
370
381
expect ( errorFn2 ) . to . not . be . called ;
371
382
unsubscribe1 ( ) ;
372
383
unsubscribe2 ( ) ;
373
- expect ( getState ( app ) . tokenObservers . length ) . to . equal ( 1 ) ;
384
+ expect ( getStateReference ( app ) . tokenObservers . length ) . to . equal ( 1 ) ;
374
385
} ) ;
375
386
376
387
it ( 'onError() catches token errors' , async ( ) => {
@@ -380,12 +391,12 @@ describe('api', () => {
380
391
isTokenAutoRefreshEnabled : false
381
392
} ) ;
382
393
383
- expect ( getState ( app ) . tokenObservers . length ) . to . equal ( 0 ) ;
394
+ expect ( getStateReference ( app ) . tokenObservers . length ) . to . equal ( 0 ) ;
384
395
385
396
const fakeRecaptchaToken = 'fake-recaptcha-token' ;
386
397
stub ( reCAPTCHA , 'getToken' ) . returns ( Promise . resolve ( fakeRecaptchaToken ) ) ;
387
398
stub ( client , 'exchangeToken' ) . rejects ( 'exchange error' ) ;
388
- stub ( storage , 'writeTokenToStorage' ) . returns ( Promise . resolve ( undefined ) ) ;
399
+ storageWriteStub . returns ( Promise . resolve ( undefined ) ) ;
389
400
390
401
const listener1 = spy ( ) ;
391
402
@@ -395,13 +406,13 @@ describe('api', () => {
395
406
396
407
await internalApi . getToken ( appCheck as AppCheckService ) ;
397
408
398
- expect ( getState ( app ) . tokenObservers . length ) . to . equal ( 1 ) ;
409
+ expect ( getStateReference ( app ) . tokenObservers . length ) . to . equal ( 1 ) ;
399
410
400
411
expect ( errorFn1 ) . to . be . calledOnce ;
401
412
expect ( errorFn1 . args [ 0 ] [ 0 ] . name ) . to . include ( 'exchange error' ) ;
402
413
403
414
unsubscribe1 ( ) ;
404
- expect ( getState ( app ) . tokenObservers . length ) . to . equal ( 0 ) ;
415
+ expect ( getStateReference ( app ) . tokenObservers . length ) . to . equal ( 0 ) ;
405
416
} ) ;
406
417
} ) ;
407
418
} ) ;
0 commit comments