@@ -54,15 +54,26 @@ describe('platform_browser/popup_redirect', () => {
54
54
let auth : TestAuth ;
55
55
let onIframeMessage : ( event : GapiAuthEvent ) => Promise < void > ;
56
56
let iframeSendStub : sinon . SinonStub ;
57
+ let loadGapiStub : sinon . SinonStub ;
57
58
58
59
beforeEach ( async ( ) => {
59
60
auth = await testAuth ( ) ;
60
61
resolver = new ( browserPopupRedirectResolver as SingletonInstantiator < PopupRedirectResolverInternal > ) ( ) ;
61
62
62
63
sinon . stub ( validateOrigin , '_validateOrigin' ) . returns ( Promise . resolve ( ) ) ;
63
64
iframeSendStub = sinon . stub ( ) ;
65
+ loadGapiStub = sinon . stub ( gapiLoader , '_loadGapi' ) ;
66
+ setGapiStub ( ) ;
64
67
65
- sinon . stub ( gapiLoader , '_loadGapi' ) . returns (
68
+ sinon . stub ( authWindow . _window ( ) , 'gapi' ) . value ( {
69
+ iframes : {
70
+ CROSS_ORIGIN_IFRAMES_FILTER : 'cross-origin-iframes-filter'
71
+ }
72
+ } ) ;
73
+ } ) ;
74
+
75
+ function setGapiStub ( ) : void {
76
+ loadGapiStub . returns (
66
77
Promise . resolve ( ( {
67
78
open : ( ) =>
68
79
Promise . resolve ( {
@@ -74,13 +85,7 @@ describe('platform_browser/popup_redirect', () => {
74
85
} )
75
86
} as unknown ) as gapi . iframes . Context )
76
87
) ;
77
-
78
- sinon . stub ( authWindow . _window ( ) , 'gapi' ) . value ( {
79
- iframes : {
80
- CROSS_ORIGIN_IFRAMES_FILTER : 'cross-origin-iframes-filter'
81
- }
82
- } ) ;
83
- } ) ;
88
+ }
84
89
85
90
afterEach ( ( ) => {
86
91
sinon . restore ( ) ;
@@ -241,6 +246,14 @@ describe('platform_browser/popup_redirect', () => {
241
246
expect ( resolver . _initialize ( secondAuth ) ) . to . eq ( secondPromise ) ;
242
247
} ) ;
243
248
249
+ it ( 'clears the cache if the initialize fails' , async ( ) => {
250
+ const error = new Error ( ) ;
251
+ loadGapiStub . rejects ( error ) ;
252
+ await expect ( resolver . _initialize ( auth ) ) . to . be . rejectedWith ( error ) ;
253
+ setGapiStub ( ) ; // Reset the gapi load stub
254
+ await expect ( resolver . _initialize ( auth ) ) . not . to . be . rejected ;
255
+ } ) ;
256
+
244
257
it ( 'iframe event goes through to the manager' , async ( ) => {
245
258
const manager = ( await resolver . _initialize ( auth ) ) as AuthEventManager ;
246
259
sinon . stub ( manager , 'onEvent' ) . returns ( true ) ;
0 commit comments