@@ -28,10 +28,7 @@ import {
2828 EventManager ,
2929 PopupRedirectResolver
3030} from '../../model/popup_redirect' ;
31- import {
32- CordovaAuthEventManager ,
33- cordovaPopupRedirectResolver
34- } from './popup_redirect' ;
31+ import { cordovaPopupRedirectResolver } from './popup_redirect' ;
3532import { GoogleAuthProvider } from '../../core/providers/google' ;
3633import * as utils from './utils' ;
3734import * as events from './events' ;
@@ -45,22 +42,52 @@ use(chaiAsPromised);
4542use ( sinonChai ) ;
4643
4744describe ( 'platform_cordova/popup_redirect/popup_redirect' , ( ) => {
45+ const PACKAGE_NAME = 'my.package' ;
46+ const NOT_PACKAGE_NAME = 'not.my.package' ;
47+ const NO_EVENT_TIMER_ID = 10001 ;
48+
4849 let auth : TestAuth ;
4950 let resolver : PopupRedirectResolver ;
5051 let provider : externs . AuthProvider ;
5152 let utilsStubs : sinon . SinonStubbedInstance < typeof utils > ;
52- let eventsStubs : sinon . SinonStubbedInstance < typeof events > ;
53+ let eventsStubs : sinon . SinonStubbedInstance < Partial < typeof events > > ;
54+ let universalLinksCb :
55+ | ( ( eventData : Record < string , string > | null ) => unknown )
56+ | null ;
57+ let tripNoEventTimer : TimerTripFn ;
5358
5459 beforeEach ( async ( ) => {
5560 auth = await testAuth ( ) ;
5661 resolver = new ( cordovaPopupRedirectResolver as SingletonInstantiator < PopupRedirectResolver > ) ( ) ;
5762 provider = new GoogleAuthProvider ( ) ;
5863 utilsStubs = sinon . stub ( utils ) ;
59- eventsStubs = sinon . stub ( events ) ;
64+ eventsStubs = {
65+ _generateNewEvent : sinon . stub ( events , '_generateNewEvent' ) ,
66+ _savePartialEvent : sinon . stub ( events , '_savePartialEvent' ) ,
67+ _getAndRemoveEvent : sinon . stub ( events , '_getAndRemoveEvent' ) ,
68+ _eventFromPartialAndUrl : sinon . stub ( events , '_eventFromPartialAndUrl' ) ,
69+ _getDeepLinkFromCallback : sinon . stub ( events , '_getDeepLinkFromCallback' )
70+ } ;
71+
72+ window . universalLinks = {
73+ subscribe ( _unused , cb ) {
74+ universalLinksCb = cb ;
75+ }
76+ } ;
77+ window . BuildInfo = {
78+ packageName : PACKAGE_NAME ,
79+ displayName : ''
80+ } ;
81+ tripNoEventTimer = stubSingleTimeout ( NO_EVENT_TIMER_ID ) ;
82+ sinon . stub ( window , 'clearTimeout' ) ;
6083 } ) ;
6184
6285 afterEach ( ( ) => {
6386 sinon . restore ( ) ;
87+ universalLinksCb = null ;
88+ const win = ( window as unknown ) as Record < string , unknown > ;
89+ delete win . universalLinks ;
90+ delete win . BuildInfo ;
6491 } ) ;
6592
6693 describe ( '_openRedirect' , ( ) => {
@@ -73,14 +100,19 @@ describe('platform_cordova/popup_redirect/popup_redirect', () => {
73100 utilsStubs . _generateHandlerUrl . returns (
74101 Promise . resolve ( 'https://localhost/__/auth/handler' )
75102 ) ;
76- utilsStubs . _performRedirect . returns ( Promise . resolve ( ) ) ;
77- eventsStubs . _generateNewEvent . returns ( event ) ;
103+ utilsStubs . _performRedirect . returns ( Promise . resolve ( { } ) ) ;
104+ utilsStubs . _waitForAppResume . returns ( Promise . resolve ( ) ) ;
105+ eventsStubs . _generateNewEvent ! . returns ( event ) ;
78106
79- await resolver . _openRedirect (
107+ const redirectPromise = resolver . _openRedirect (
80108 auth ,
81109 provider ,
82110 AuthEventType . REAUTH_VIA_REDIRECT
83111 ) ;
112+ // _openRedirect awaits the first event (eventManager initialized)
113+ tripNoEventTimer ( ) ;
114+ await redirectPromise ;
115+
84116 expect ( utilsStubs . _checkCordovaConfiguration ) . to . have . been . called ;
85117 expect ( utilsStubs . _generateHandlerUrl ) . to . have . been . calledWith (
86118 auth ,
@@ -90,42 +122,14 @@ describe('platform_cordova/popup_redirect/popup_redirect', () => {
90122 expect ( utilsStubs . _performRedirect ) . to . have . been . calledWith (
91123 'https://localhost/__/auth/handler'
92124 ) ;
125+ expect ( utilsStubs . _waitForAppResume ) . to . have . been . called ;
93126 } ) ;
94127 } ) ;
95128
96129 describe ( '_initialize' , ( ) => {
97- const NO_EVENT_TIMER_ID = 10001 ;
98- const PACKAGE_NAME = 'my.package' ;
99- const NOT_PACKAGE_NAME = 'not.my.package' ;
100- let universalLinksCb :
101- | ( ( eventData : Record < string , string > | null ) => unknown )
102- | null ;
103- let tripNoEventTimer : TimerTripFn ;
104-
105- beforeEach ( ( ) => {
106- tripNoEventTimer = stubSingleTimeout ( NO_EVENT_TIMER_ID ) ;
107- window . universalLinks = {
108- subscribe ( _unused , cb ) {
109- universalLinksCb = cb ;
110- }
111- } ;
112- window . BuildInfo = {
113- packageName : PACKAGE_NAME ,
114- displayName : ''
115- } ;
116- sinon . stub ( window , 'clearTimeout' ) ;
117- } ) ;
118-
119- afterEach ( ( ) => {
120- universalLinksCb = null ;
121- const win = ( window as unknown ) as Record < string , unknown > ;
122- delete win . universalLinks ;
123- delete win . BuildInfo ;
124- } ) ;
125-
126130 function event ( manager : EventManager ) : Promise < AuthEvent > {
127131 return new Promise ( resolve => {
128- ( manager as CordovaAuthEventManager ) . addPassiveListener ( resolve ) ;
132+ ( manager as events . CordovaAuthEventManager ) . addPassiveListener ( resolve ) ;
129133 } ) ;
130134 }
131135
@@ -177,8 +181,8 @@ describe('platform_cordova/popup_redirect/popup_redirect', () => {
177181
178182 it ( 'signals no event if partial parse turns up null' , async ( ) => {
179183 const promise = event ( await resolver . _initialize ( auth ) ) ;
180- eventsStubs . _eventFromPartialAndUrl . returns ( null ) ;
181- eventsStubs . _getAndRemoveEvent . returns (
184+ eventsStubs . _eventFromPartialAndUrl ! . returns ( null ) ;
185+ eventsStubs . _getAndRemoveEvent ! . returns (
182186 Promise . resolve ( {
183187 type : AuthEventType . REAUTH_VIA_REDIRECT
184188 } as AuthEvent )
@@ -204,14 +208,14 @@ describe('platform_cordova/popup_redirect/popup_redirect', () => {
204208 type : AuthEventType . REAUTH_VIA_REDIRECT ,
205209 postBody : 'foo'
206210 } ;
207- eventsStubs . _getAndRemoveEvent . returns (
211+ eventsStubs . _getAndRemoveEvent ! . returns (
208212 Promise . resolve ( {
209213 type : AuthEventType . REAUTH_VIA_REDIRECT
210214 } as AuthEvent )
211215 ) ;
212216
213217 const promise = event ( await resolver . _initialize ( auth ) ) ;
214- eventsStubs . _eventFromPartialAndUrl . returns ( finalEvent as AuthEvent ) ;
218+ eventsStubs . _eventFromPartialAndUrl ! . returns ( finalEvent as AuthEvent ) ;
215219 await universalLinksCb ! ( { url : 'foo-bar' } ) ;
216220 expect ( await promise ) . to . eq ( finalEvent ) ;
217221 expect ( events . _eventFromPartialAndUrl ) . to . have . been . calledWith (
@@ -241,14 +245,14 @@ describe('platform_cordova/popup_redirect/popup_redirect', () => {
241245 type : AuthEventType . REAUTH_VIA_REDIRECT ,
242246 postBody : 'foo'
243247 } ;
244- eventsStubs . _getAndRemoveEvent . returns (
248+ eventsStubs . _getAndRemoveEvent ! . returns (
245249 Promise . resolve ( {
246250 type : AuthEventType . REAUTH_VIA_REDIRECT
247251 } as AuthEvent )
248252 ) ;
249253
250254 const promise = event ( await resolver . _initialize ( auth ) ) ;
251- eventsStubs . _eventFromPartialAndUrl . returns ( finalEvent as AuthEvent ) ;
255+ eventsStubs . _eventFromPartialAndUrl ! . returns ( finalEvent as AuthEvent ) ;
252256 handleOpenUrl ( `${ PACKAGE_NAME } ://foo` ) ;
253257 expect ( await promise ) . to . eq ( finalEvent ) ;
254258 expect ( events . _eventFromPartialAndUrl ) . to . have . been . calledWith (
0 commit comments