@@ -2161,6 +2161,107 @@ describe("PublicClientApplication.ts Class Unit Tests", () => {
2161
2161
} ) ;
2162
2162
} ) ;
2163
2163
2164
+ it ( "emits pre-redirect telemetry event when onRedirectNavigate callback is set in configuration" , ( done ) => {
2165
+ const onRedirectNavigate = ( url : string ) => {
2166
+ expect ( url ) . toBeDefined ( ) ;
2167
+ } ;
2168
+
2169
+ pca = new PublicClientApplication ( {
2170
+ auth : {
2171
+ clientId : TEST_CONFIG . MSAL_CLIENT_ID ,
2172
+ onRedirectNavigate,
2173
+ } ,
2174
+ telemetry : {
2175
+ client : new BrowserPerformanceClient ( testAppConfig ) ,
2176
+ application : {
2177
+ appName : TEST_CONFIG . applicationName ,
2178
+ appVersion : TEST_CONFIG . applicationVersion ,
2179
+ } ,
2180
+ } ,
2181
+ } ) ;
2182
+ pca = ( pca as any ) . controller ;
2183
+
2184
+ pca . initialize ( ) . then ( ( ) => {
2185
+ const callbackId = pca . addPerformanceCallback ( ( events ) => {
2186
+ expect ( events [ 0 ] . success ) . toBe ( true ) ;
2187
+ expect ( events [ 0 ] . name ) . toBe (
2188
+ BrowserRootPerformanceEvents . AcquireTokenPreRedirect
2189
+ ) ;
2190
+ expect ( events [ 0 ] . navigateCallbackResult ) . toBeTruthy ( ) ;
2191
+ pca . removePerformanceCallback ( callbackId ) ;
2192
+ done ( ) ;
2193
+ } ) ;
2194
+
2195
+ jest . spyOn (
2196
+ NavigationClient . prototype ,
2197
+ "navigateExternal"
2198
+ ) . mockImplementation ( ( ) => Promise . resolve ( true ) ) ;
2199
+
2200
+ jest . spyOn (
2201
+ PkceGenerator ,
2202
+ "generatePkceCodes"
2203
+ ) . mockResolvedValue ( {
2204
+ challenge : TEST_CONFIG . TEST_CHALLENGE ,
2205
+ verifier : TEST_CONFIG . TEST_VERIFIER ,
2206
+ } ) ;
2207
+ const loginRequest : RedirectRequest = {
2208
+ redirectUri : TEST_URIS . TEST_REDIR_URI ,
2209
+ scopes : [ "user.read" , "openid" , "profile" ] ,
2210
+ state : TEST_STATE_VALUES . USER_STATE ,
2211
+ } ;
2212
+ pca . acquireTokenRedirect ( loginRequest ) ;
2213
+ } ) ;
2214
+ } ) ;
2215
+
2216
+ it ( "instruments pre-redirect telemetry event when navigation times out" , ( done ) => {
2217
+ let eventCounter = 0 ;
2218
+ const callbackId = pca . addPerformanceCallback ( ( events ) => {
2219
+ if (
2220
+ events [ 0 ] . name ===
2221
+ BrowserRootPerformanceEvents . AcquireTokenPreRedirect
2222
+ ) {
2223
+ expect ( events [ 0 ] . success ) . toBe ( true ) ;
2224
+ eventCounter ++ ;
2225
+ }
2226
+
2227
+ if (
2228
+ events [ 0 ] . name ===
2229
+ BrowserRootPerformanceEvents . AcquireTokenRedirect
2230
+ ) {
2231
+ expect ( events [ 0 ] . success ) . toBe ( false ) ;
2232
+ expect ( events [ 0 ] . errorCode ) . toEqual ( "timed_out" ) ;
2233
+ eventCounter ++ ;
2234
+ }
2235
+
2236
+ if ( eventCounter === 2 ) {
2237
+ pca . removePerformanceCallback ( callbackId ) ;
2238
+ done ( ) ;
2239
+ }
2240
+ } ) ;
2241
+
2242
+ jest . spyOn (
2243
+ NavigationClient . prototype ,
2244
+ "navigateExternal"
2245
+ ) . mockRejectedValue (
2246
+ createBrowserAuthError (
2247
+ BrowserAuthErrorCodes . timedOut ,
2248
+ "failed_to_redirect"
2249
+ )
2250
+ ) ;
2251
+
2252
+ jest . spyOn ( PkceGenerator , "generatePkceCodes" ) . mockResolvedValue ( {
2253
+ challenge : TEST_CONFIG . TEST_CHALLENGE ,
2254
+ verifier : TEST_CONFIG . TEST_VERIFIER ,
2255
+ } ) ;
2256
+ const loginRequest : RedirectRequest = {
2257
+ redirectUri : TEST_URIS . TEST_REDIR_URI ,
2258
+ scopes : [ "user.read" , "openid" , "profile" ] ,
2259
+ state : TEST_STATE_VALUES . USER_STATE ,
2260
+ } ;
2261
+
2262
+ pca . acquireTokenRedirect ( loginRequest ) . catch ( ( e ) => { } ) ;
2263
+ } ) ;
2264
+
2164
2265
it ( "emits pre-redirect telemetry event when onRedirectNavigate callback is not set" , ( done ) => {
2165
2266
const callbackId = pca . addPerformanceCallback ( ( events ) => {
2166
2267
expect ( events [ 0 ] . success ) . toBe ( true ) ;
@@ -2234,7 +2335,7 @@ describe("PublicClientApplication.ts Class Unit Tests", () => {
2234
2335
await pca . acquireTokenRedirect ( loginRequest ) ;
2235
2336
} ) ;
2236
2337
2237
- it ( "discards pre-redirect telemetry event when onRedirectNavigate callback returns false" , async ( ) => {
2338
+ it ( "discards pre-redirect telemetry event when onRedirectNavigate callback returns false" , ( done ) => {
2238
2339
const onRedirectNavigate = ( url : string ) => {
2239
2340
return false ;
2240
2341
} ;
@@ -2253,38 +2354,43 @@ describe("PublicClientApplication.ts Class Unit Tests", () => {
2253
2354
} ,
2254
2355
} ) ;
2255
2356
pca = ( pca as any ) . controller ;
2256
- await pca . initialize ( ) ;
2357
+ pca . initialize ( ) . then ( ( ) => {
2358
+ const callbackId = pca . addPerformanceCallback ( ( events ) => {
2359
+ expect ( events [ 0 ] . success ) . toBe ( true ) ;
2360
+ expect ( events [ 0 ] . name ) . toBe (
2361
+ BrowserRootPerformanceEvents . AcquireTokenPreRedirect
2362
+ ) ;
2363
+ expect ( events [ 0 ] . navigateCallbackResult ) . toBeFalsy ( ) ;
2364
+ pca . removePerformanceCallback ( callbackId ) ;
2365
+ done ( ) ;
2366
+ } ) ;
2257
2367
2258
- const callbackId = pca . addPerformanceCallback ( ( events ) => {
2259
- expect ( events [ 0 ] . success ) . toBe ( true ) ;
2260
- expect ( events [ 0 ] . name ) . toBe (
2261
- BrowserRootPerformanceEvents . AcquireTokenPreRedirect
2368
+ const measurementDiscardSpy = jest . spyOn (
2369
+ PerformanceClient . prototype ,
2370
+ "discardMeasurements"
2262
2371
) ;
2263
- pca . removePerformanceCallback ( callbackId ) ;
2264
- } ) ;
2265
2372
2266
- const measurementDiscardSpy = jest . spyOn (
2267
- PerformanceClient . prototype ,
2268
- "discardMeasurements "
2269
- ) ;
2373
+ jest . spyOn (
2374
+ NavigationClient . prototype ,
2375
+ "navigateExternal "
2376
+ ) . mockResolvedValue ( true ) ;
2270
2377
2271
- jest . spyOn (
2272
- NavigationClient . prototype ,
2273
- "navigateExternal"
2274
- ) . mockResolvedValue ( true ) ;
2378
+ jest . spyOn (
2379
+ PkceGenerator ,
2380
+ "generatePkceCodes"
2381
+ ) . mockResolvedValue ( {
2382
+ challenge : TEST_CONFIG . TEST_CHALLENGE ,
2383
+ verifier : TEST_CONFIG . TEST_VERIFIER ,
2384
+ } ) ;
2385
+ const loginRequest : RedirectRequest = {
2386
+ redirectUri : TEST_URIS . TEST_REDIR_URI ,
2387
+ scopes : [ "user.read" , "openid" , "profile" ] ,
2388
+ state : TEST_STATE_VALUES . USER_STATE ,
2389
+ } ;
2275
2390
2276
- jest . spyOn ( PkceGenerator , "generatePkceCodes" ) . mockResolvedValue ( {
2277
- challenge : TEST_CONFIG . TEST_CHALLENGE ,
2278
- verifier : TEST_CONFIG . TEST_VERIFIER ,
2391
+ pca . acquireTokenRedirect ( loginRequest ) ;
2392
+ expect ( measurementDiscardSpy ) . toHaveBeenCalledTimes ( 0 ) ;
2279
2393
} ) ;
2280
- const loginRequest : RedirectRequest = {
2281
- redirectUri : TEST_URIS . TEST_REDIR_URI ,
2282
- scopes : [ "user.read" , "openid" , "profile" ] ,
2283
- state : TEST_STATE_VALUES . USER_STATE ,
2284
- } ;
2285
-
2286
- await pca . acquireTokenRedirect ( loginRequest ) ;
2287
- expect ( measurementDiscardSpy ) . toHaveBeenCalledTimes ( 1 ) ;
2288
2394
} ) ;
2289
2395
2290
2396
it ( "instruments initialization error" , ( done ) => {
0 commit comments