@@ -70,6 +70,15 @@ describe('internal api', () => {
70
70
let storageReadStub : SinonStub ;
71
71
let storageWriteStub : SinonStub ;
72
72
73
+ function stubGetRecaptchaToken (
74
+ token : string = fakeRecaptchaToken ,
75
+ isSuccess : boolean = true
76
+ ) : SinonStub {
77
+ getStateReference ( app ) . reCAPTCHAState ! . succeeded = isSuccess ;
78
+
79
+ return stub ( reCAPTCHA , 'getToken' ) . returns ( Promise . resolve ( token ) ) ;
80
+ }
81
+
73
82
beforeEach ( ( ) => {
74
83
app = getFullApp ( ) ;
75
84
storageReadStub = stub ( storage , 'readTokenFromStorage' ) . resolves ( undefined ) ;
@@ -104,9 +113,7 @@ describe('internal api', () => {
104
113
provider : new ReCaptchaV3Provider ( FAKE_SITE_KEY )
105
114
} ) ;
106
115
107
- const reCAPTCHASpy = stub ( reCAPTCHA , 'getToken' ) . returns (
108
- Promise . resolve ( fakeRecaptchaToken )
109
- ) ;
116
+ const reCAPTCHASpy = stubGetRecaptchaToken ( ) ;
110
117
const exchangeTokenStub : SinonStub = stub (
111
118
client ,
112
119
'exchangeToken'
@@ -127,9 +134,8 @@ describe('internal api', () => {
127
134
provider : new ReCaptchaEnterpriseProvider ( FAKE_SITE_KEY )
128
135
} ) ;
129
136
130
- const reCAPTCHASpy = stub ( reCAPTCHA , 'getToken' ) . returns (
131
- Promise . resolve ( fakeRecaptchaToken )
132
- ) ;
137
+ const reCAPTCHASpy = stubGetRecaptchaToken ( ) ;
138
+
133
139
const exchangeTokenStub : SinonStub = stub (
134
140
client ,
135
141
'exchangeToken'
@@ -151,9 +157,7 @@ describe('internal api', () => {
151
157
provider : new ReCaptchaV3Provider ( FAKE_SITE_KEY )
152
158
} ) ;
153
159
154
- const reCAPTCHASpy = stub ( reCAPTCHA , 'getToken' ) . returns (
155
- Promise . resolve ( fakeRecaptchaToken )
156
- ) ;
160
+ const reCAPTCHASpy = stubGetRecaptchaToken ( ) ;
157
161
158
162
const error = new Error ( 'oops, something went wrong' ) ;
159
163
stub ( client , 'exchangeToken' ) . returns ( Promise . reject ( error ) ) ;
@@ -171,6 +175,26 @@ describe('internal api', () => {
171
175
errorStub . restore ( ) ;
172
176
} ) ;
173
177
178
+ it ( 'resolves with a dummy token and an error if recaptcha failed' , async ( ) => {
179
+ const errorStub = stub ( console , 'error' ) ;
180
+ const appCheck = initializeAppCheck ( app , {
181
+ provider : new ReCaptchaV3Provider ( FAKE_SITE_KEY )
182
+ } ) ;
183
+
184
+ const reCAPTCHASpy = stubGetRecaptchaToken ( '' , false ) ;
185
+ const exchangeTokenStub = stub ( client , 'exchangeToken' ) ;
186
+
187
+ const token = await getToken ( appCheck as AppCheckService ) ;
188
+
189
+ expect ( reCAPTCHASpy ) . to . be . called ;
190
+ expect ( exchangeTokenStub ) . to . not . be . called ;
191
+ expect ( token . token ) . to . equal ( formatDummyToken ( defaultTokenErrorData ) ) ;
192
+ expect ( errorStub . args [ 0 ] [ 1 ] . message ) . to . include (
193
+ AppCheckError . RECAPTCHA_ERROR
194
+ ) ;
195
+ errorStub . restore ( ) ;
196
+ } ) ;
197
+
174
198
it ( 'notifies listeners using cached token' , async ( ) => {
175
199
storageReadStub . resolves ( fakeCachedAppCheckToken ) ;
176
200
const appCheck = initializeAppCheck ( app , {
@@ -213,7 +237,7 @@ describe('internal api', () => {
213
237
isTokenAutoRefreshEnabled : true
214
238
} ) ;
215
239
216
- stub ( reCAPTCHA , 'getToken' ) . returns ( Promise . resolve ( fakeRecaptchaToken ) ) ;
240
+ stubGetRecaptchaToken ( ) ;
217
241
stub ( client , 'exchangeToken' ) . returns (
218
242
Promise . resolve ( fakeRecaptchaAppCheckToken )
219
243
) ;
@@ -247,7 +271,7 @@ describe('internal api', () => {
247
271
provider : new ReCaptchaV3Provider ( FAKE_SITE_KEY ) ,
248
272
isTokenAutoRefreshEnabled : true
249
273
} ) ;
250
- stub ( reCAPTCHA , 'getToken' ) . returns ( Promise . resolve ( fakeRecaptchaToken ) ) ;
274
+ stubGetRecaptchaToken ( ) ;
251
275
stub ( client , 'exchangeToken' ) . rejects ( 'exchange error' ) ;
252
276
const listener1 = spy ( ) ;
253
277
const errorFn1 = spy ( ) ;
@@ -271,7 +295,7 @@ describe('internal api', () => {
271
295
provider : new ReCaptchaV3Provider ( FAKE_SITE_KEY ) ,
272
296
isTokenAutoRefreshEnabled : true
273
297
} ) ;
274
- stub ( reCAPTCHA , 'getToken' ) . returns ( Promise . resolve ( fakeRecaptchaToken ) ) ;
298
+ stubGetRecaptchaToken ( ) ;
275
299
stub ( client , 'exchangeToken' ) . returns (
276
300
Promise . resolve ( fakeRecaptchaAppCheckToken )
277
301
) ;
@@ -324,7 +348,7 @@ describe('internal api', () => {
324
348
provider : new ReCaptchaV3Provider ( FAKE_SITE_KEY )
325
349
} ) ;
326
350
327
- stub ( reCAPTCHA , 'getToken' ) . returns ( Promise . resolve ( fakeRecaptchaToken ) ) ;
351
+ stubGetRecaptchaToken ( ) ;
328
352
stub ( client , 'exchangeToken' ) . returns (
329
353
Promise . resolve ( fakeRecaptchaAppCheckToken )
330
354
) ;
@@ -365,7 +389,7 @@ describe('internal api', () => {
365
389
token : fakeRecaptchaAppCheckToken
366
390
} ) ;
367
391
368
- stub ( reCAPTCHA , 'getToken' ) . returns ( Promise . resolve ( fakeRecaptchaToken ) ) ;
392
+ stubGetRecaptchaToken ( ) ;
369
393
stub ( client , 'exchangeToken' ) . returns (
370
394
Promise . resolve ( {
371
395
token : 'new-recaptcha-app-check-token' ,
@@ -390,7 +414,7 @@ describe('internal api', () => {
390
414
cachedTokenPromise : undefined
391
415
} ) ;
392
416
393
- stub ( reCAPTCHA , 'getToken' ) . returns ( Promise . resolve ( fakeRecaptchaToken ) ) ;
417
+ stubGetRecaptchaToken ( ) ;
394
418
stub ( client , 'exchangeToken' ) . returns (
395
419
Promise . resolve ( {
396
420
token : 'new-recaptcha-app-check-token' ,
@@ -431,7 +455,7 @@ describe('internal api', () => {
431
455
cachedTokenPromise : undefined
432
456
} ) ;
433
457
434
- stub ( reCAPTCHA , 'getToken' ) . returns ( Promise . resolve ( fakeRecaptchaToken ) ) ;
458
+ stubGetRecaptchaToken ( ) ;
435
459
let count = 0 ;
436
460
stub ( client , 'exchangeToken' ) . callsFake (
437
461
( ) =>
@@ -485,7 +509,7 @@ describe('internal api', () => {
485
509
}
486
510
} ) ;
487
511
488
- stub ( reCAPTCHA , 'getToken' ) . returns ( Promise . resolve ( fakeRecaptchaToken ) ) ;
512
+ stubGetRecaptchaToken ( ) ;
489
513
stub ( client , 'exchangeToken' ) . returns (
490
514
Promise . resolve ( {
491
515
token : 'new-recaptcha-app-check-token' ,
@@ -532,7 +556,7 @@ describe('internal api', () => {
532
556
issuedAtTimeMillis : 0
533
557
} ;
534
558
535
- stub ( reCAPTCHA , 'getToken' ) . returns ( Promise . resolve ( fakeRecaptchaToken ) ) ;
559
+ stubGetRecaptchaToken ( ) ;
536
560
stub ( client , 'exchangeToken' ) . returns ( Promise . resolve ( freshToken ) ) ;
537
561
538
562
expect ( await getToken ( appCheck as AppCheckService ) ) . to . deep . equal ( {
@@ -556,7 +580,7 @@ describe('internal api', () => {
556
580
token : fakeRecaptchaAppCheckToken
557
581
} ) ;
558
582
559
- stub ( reCAPTCHA , 'getToken' ) . returns ( Promise . resolve ( fakeRecaptchaToken ) ) ;
583
+ stubGetRecaptchaToken ( ) ;
560
584
stub ( client , 'exchangeToken' ) . returns ( Promise . reject ( new Error ( 'blah' ) ) ) ;
561
585
562
586
const tokenResult = await getToken ( appCheck as AppCheckService , true ) ;
@@ -589,6 +613,7 @@ describe('internal api', () => {
589
613
const appCheck = initializeAppCheck ( app , {
590
614
provider : new ReCaptchaV3Provider ( FAKE_SITE_KEY )
591
615
} ) ;
616
+ stubGetRecaptchaToken ( ) ;
592
617
const warnStub = stub ( logger , 'warn' ) ;
593
618
stub ( client , 'exchangeToken' ) . returns (
594
619
Promise . reject (
@@ -615,6 +640,7 @@ describe('internal api', () => {
615
640
const appCheck = initializeAppCheck ( app , {
616
641
provider : new ReCaptchaV3Provider ( FAKE_SITE_KEY )
617
642
} ) ;
643
+ stubGetRecaptchaToken ( ) ;
618
644
const warnStub = stub ( logger , 'warn' ) ;
619
645
stub ( client , 'exchangeToken' ) . returns (
620
646
Promise . reject (
@@ -765,6 +791,8 @@ describe('internal api', () => {
765
791
} )
766
792
) ;
767
793
794
+ stubGetRecaptchaToken ( ) ;
795
+
768
796
addTokenListener (
769
797
appCheck as AppCheckService ,
770
798
ListenerType . INTERNAL ,
@@ -799,6 +827,8 @@ describe('internal api', () => {
799
827
}
800
828
} ) ;
801
829
830
+ stubGetRecaptchaToken ( ) ;
831
+
802
832
const fakeListener : AppCheckTokenListener = stub ( ) ;
803
833
804
834
const fakeExchange = stub ( client , 'exchangeToken' ) . returns (
@@ -838,6 +868,8 @@ describe('internal api', () => {
838
868
}
839
869
} ) ;
840
870
871
+ stubGetRecaptchaToken ( ) ;
872
+
841
873
const fakeListener : AppCheckTokenListener = stub ( ) ;
842
874
843
875
const fakeExchange = stub ( client , 'exchangeToken' ) . returns (
@@ -865,6 +897,8 @@ describe('internal api', () => {
865
897
provider : new ReCaptchaV3Provider ( FAKE_SITE_KEY ) ,
866
898
isTokenAutoRefreshEnabled : true
867
899
} ) ;
900
+
901
+ stubGetRecaptchaToken ( ) ;
868
902
setInitialState ( app , {
869
903
...getStateReference ( app ) ,
870
904
token : {
@@ -905,6 +939,8 @@ describe('internal api', () => {
905
939
provider : new ReCaptchaV3Provider ( FAKE_SITE_KEY ) ,
906
940
isTokenAutoRefreshEnabled : true
907
941
} ) ;
942
+
943
+ stubGetRecaptchaToken ( ) ;
908
944
setInitialState ( app , {
909
945
...getStateReference ( app ) ,
910
946
token : {
0 commit comments