@@ -630,6 +630,31 @@ describe('internal api', () => {
630
630
expect ( token ) . to . deep . equal ( { token : fakeRecaptchaAppCheckToken . token } ) ;
631
631
} ) ;
632
632
633
+ it ( 'exchanges debug token only once if debug mode with no cached token' , async ( ) => {
634
+ const exchangeTokenStub : SinonStub = stub (
635
+ client ,
636
+ 'exchangeToken'
637
+ ) . returns ( Promise . resolve ( fakeRecaptchaAppCheckToken ) ) ;
638
+ const debugState = getDebugState ( ) ;
639
+ debugState . enabled = true ;
640
+ debugState . token = new Deferred ( ) ;
641
+ debugState . token . resolve ( 'my-debug-token' ) ;
642
+ const appCheck = initializeAppCheck ( app , {
643
+ provider : new ReCaptchaV3Provider ( FAKE_SITE_KEY )
644
+ } ) ;
645
+ const appCheckService = appCheck as AppCheckService ;
646
+ const [ token1 , token2 ] = await Promise . all ( [
647
+ getToken ( appCheckService ) ,
648
+ getToken ( appCheckService )
649
+ ] ) ;
650
+ expect ( exchangeTokenStub . args [ 0 ] [ 0 ] . body [ 'debug_token' ] ) . to . equal (
651
+ 'my-debug-token'
652
+ ) ;
653
+ expect ( token1 ) . to . deep . equal ( { token : fakeRecaptchaAppCheckToken . token } ) ;
654
+ expect ( token2 ) . to . deep . equal ( { token : fakeRecaptchaAppCheckToken . token } ) ;
655
+ expect ( exchangeTokenStub ) . to . be . calledOnce ;
656
+ } ) ;
657
+
633
658
it ( 'throttles for a period less than 1d on 503' , async ( ) => {
634
659
// More detailed check of exponential backoff in providers.test.ts
635
660
const appCheck = initializeAppCheck ( app , {
0 commit comments