@@ -87,6 +87,7 @@ const createMockClient = () => {
87
87
authorize : jest . fn ( ) . mockResolvedValue ( mockCredentials ) ,
88
88
clearSession : jest . fn ( ) . mockResolvedValue ( undefined ) ,
89
89
cancelWebAuth : jest . fn ( ) . mockResolvedValue ( undefined ) ,
90
+ handleRedirectCallback : jest . fn ( ) . mockResolvedValue ( undefined ) ,
90
91
} ,
91
92
credentialsManager : {
92
93
hasValidCredentials : jest . fn ( ) . mockResolvedValue ( false ) ,
@@ -112,6 +113,7 @@ const createMockClient = () => {
112
113
refreshToken : jest . fn ( ) ,
113
114
revoke : jest . fn ( ) ,
114
115
userInfo : jest . fn ( ) ,
116
+ passwordRealm : jest . fn ( ) ,
115
117
} ,
116
118
users : jest . fn ( ) ,
117
119
} ;
@@ -185,21 +187,45 @@ describe('Auth0Provider', () => {
185
187
MockAuth0User . fromIdToken . mockReturnValue ( mockUser as any ) ;
186
188
} ) ;
187
189
188
- it ( 'should render a loading state initially' , ( ) => {
189
- render (
190
- < Auth0Provider domain = "test.com" clientId = "123" >
191
- < TestConsumer />
192
- </ Auth0Provider >
190
+ it ( 'should render a loading state initially' , async ( ) => {
191
+ // Make getCredentials return a promise that we can control
192
+ let resolveCredentials : ( value : any ) => void ;
193
+ const credentialsPromise = new Promise ( ( resolve ) => {
194
+ resolveCredentials = resolve ;
195
+ } ) ;
196
+ mockClientInstance . credentialsManager . getCredentials . mockReturnValue (
197
+ credentialsPromise
193
198
) ;
199
+
200
+ await act ( async ( ) => {
201
+ render (
202
+ < Auth0Provider domain = "test.com" clientId = "123" >
203
+ < TestConsumer />
204
+ </ Auth0Provider >
205
+ ) ;
206
+ } ) ;
207
+
208
+ // Should show loading state initially
194
209
expect ( screen . getByTestId ( 'loading' ) ) . toBeDefined ( ) ;
210
+
211
+ // Resolve the credentials promise
212
+ await act ( async ( ) => {
213
+ resolveCredentials ! ( null ) ;
214
+ } ) ;
215
+
216
+ // Now it should show the "not logged in" state
217
+ await waitFor ( ( ) => expect ( screen . queryByTestId ( 'loading' ) ) . toBeNull ( ) ) ;
195
218
} ) ;
196
219
197
220
it ( 'should initialize with no user if no valid credentials exist' , async ( ) => {
198
- render (
199
- < Auth0Provider domain = "test.com" clientId = "123" >
200
- < TestConsumer />
201
- </ Auth0Provider >
202
- ) ;
221
+ await act ( async ( ) => {
222
+ render (
223
+ < Auth0Provider domain = "test.com" clientId = "123" >
224
+ < TestConsumer />
225
+ </ Auth0Provider >
226
+ ) ;
227
+ } ) ;
228
+
203
229
await waitFor ( ( ) => expect ( screen . queryByTestId ( 'loading' ) ) . toBeNull ( ) ) ;
204
230
expect (
205
231
mockClientInstance . credentialsManager . getCredentials
@@ -216,11 +242,13 @@ describe('Auth0Provider', () => {
216
242
expiresAt : Date . now ( ) / 1000 + 3600 ,
217
243
} as any ) ;
218
244
219
- render (
220
- < Auth0Provider domain = "test.com" clientId = "123" >
221
- < TestConsumer />
222
- </ Auth0Provider >
223
- ) ;
245
+ await act ( async ( ) => {
246
+ render (
247
+ < Auth0Provider domain = "test.com" clientId = "123" >
248
+ < TestConsumer />
249
+ </ Auth0Provider >
250
+ ) ;
251
+ } ) ;
224
252
225
253
await waitFor ( ( ) => {
226
254
expect ( screen . getByTestId ( 'user-status' ) ) . toHaveTextContent (
@@ -232,11 +260,14 @@ describe('Auth0Provider', () => {
232
260
} ) ;
233
261
234
262
it ( 'should update the state correctly after a successful authorize call' , async ( ) => {
235
- render (
236
- < Auth0Provider domain = "test.com" clientId = "123" >
237
- < TestConsumer />
238
- </ Auth0Provider >
239
- ) ;
263
+ await act ( async ( ) => {
264
+ render (
265
+ < Auth0Provider domain = "test.com" clientId = "123" >
266
+ < TestConsumer />
267
+ </ Auth0Provider >
268
+ ) ;
269
+ } ) ;
270
+
240
271
await waitFor ( ( ) =>
241
272
expect ( screen . getByTestId ( 'user-status' ) ) . toHaveTextContent (
242
273
'Not logged in'
@@ -268,11 +299,14 @@ describe('Auth0Provider', () => {
268
299
expiresAt : Date . now ( ) / 1000 + 3600 ,
269
300
} as any ) ;
270
301
271
- render (
272
- < Auth0Provider domain = "test.com" clientId = "123" >
273
- < TestConsumer />
274
- </ Auth0Provider >
275
- ) ;
302
+ await act ( async ( ) => {
303
+ render (
304
+ < Auth0Provider domain = "test.com" clientId = "123" >
305
+ < TestConsumer />
306
+ </ Auth0Provider >
307
+ ) ;
308
+ } ) ;
309
+
276
310
await waitFor ( ( ) =>
277
311
expect ( screen . getByTestId ( 'user-status' ) ) . toHaveTextContent (
278
312
'Logged in as: Test User'
@@ -302,11 +336,14 @@ describe('Auth0Provider', () => {
302
336
} ;
303
337
mockClientInstance . webAuth . authorize . mockRejectedValueOnce ( loginError ) ;
304
338
305
- render (
306
- < Auth0Provider domain = "test.com" clientId = "123" >
307
- < TestConsumer />
308
- </ Auth0Provider >
309
- ) ;
339
+ await act ( async ( ) => {
340
+ render (
341
+ < Auth0Provider domain = "test.com" clientId = "123" >
342
+ < TestConsumer />
343
+ </ Auth0Provider >
344
+ ) ;
345
+ } ) ;
346
+
310
347
await waitFor ( ( ) =>
311
348
expect ( screen . getByTestId ( 'user-status' ) ) . toHaveTextContent (
312
349
'Not logged in'
@@ -334,11 +371,14 @@ describe('Auth0Provider', () => {
334
371
} ) ;
335
372
336
373
it ( 'should call createUser but not change the login state' , async ( ) => {
337
- render (
338
- < Auth0Provider domain = "test.com" clientId = "123" >
339
- < TestConsumer />
340
- </ Auth0Provider >
341
- ) ;
374
+ await act ( async ( ) => {
375
+ render (
376
+ < Auth0Provider domain = "test.com" clientId = "123" >
377
+ < TestConsumer />
378
+ </ Auth0Provider >
379
+ ) ;
380
+ } ) ;
381
+
342
382
await waitFor ( ( ) =>
343
383
expect ( screen . getByTestId ( 'user-status' ) ) . toHaveTextContent (
344
384
'Not logged in'
@@ -358,11 +398,14 @@ describe('Auth0Provider', () => {
358
398
} ) ;
359
399
360
400
it ( 'should call resetPassword and not change the login state' , async ( ) => {
361
- render (
362
- < Auth0Provider domain = "test.com" clientId = "123" >
363
- < TestConsumer />
364
- </ Auth0Provider >
365
- ) ;
401
+ await act ( async ( ) => {
402
+ render (
403
+ < Auth0Provider domain = "test.com" clientId = "123" >
404
+ < TestConsumer />
405
+ </ Auth0Provider >
406
+ ) ;
407
+ } ) ;
408
+
366
409
await waitFor ( ( ) =>
367
410
expect ( screen . getByTestId ( 'user-status' ) ) . toHaveTextContent (
368
411
'Not logged in'
0 commit comments