@@ -87,6 +87,7 @@ const createMockClient = () => {
8787 authorize : jest . fn ( ) . mockResolvedValue ( mockCredentials ) ,
8888 clearSession : jest . fn ( ) . mockResolvedValue ( undefined ) ,
8989 cancelWebAuth : jest . fn ( ) . mockResolvedValue ( undefined ) ,
90+ handleRedirectCallback : jest . fn ( ) . mockResolvedValue ( undefined ) ,
9091 } ,
9192 credentialsManager : {
9293 hasValidCredentials : jest . fn ( ) . mockResolvedValue ( false ) ,
@@ -112,6 +113,7 @@ const createMockClient = () => {
112113 refreshToken : jest . fn ( ) ,
113114 revoke : jest . fn ( ) ,
114115 userInfo : jest . fn ( ) ,
116+ passwordRealm : jest . fn ( ) ,
115117 } ,
116118 users : jest . fn ( ) ,
117119 } ;
@@ -185,21 +187,45 @@ describe('Auth0Provider', () => {
185187 MockAuth0User . fromIdToken . mockReturnValue ( mockUser as any ) ;
186188 } ) ;
187189
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
193198 ) ;
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
194209 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 ( ) ) ;
195218 } ) ;
196219
197220 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+
203229 await waitFor ( ( ) => expect ( screen . queryByTestId ( 'loading' ) ) . toBeNull ( ) ) ;
204230 expect (
205231 mockClientInstance . credentialsManager . getCredentials
@@ -216,11 +242,13 @@ describe('Auth0Provider', () => {
216242 expiresAt : Date . now ( ) / 1000 + 3600 ,
217243 } as any ) ;
218244
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+ } ) ;
224252
225253 await waitFor ( ( ) => {
226254 expect ( screen . getByTestId ( 'user-status' ) ) . toHaveTextContent (
@@ -232,11 +260,14 @@ describe('Auth0Provider', () => {
232260 } ) ;
233261
234262 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+
240271 await waitFor ( ( ) =>
241272 expect ( screen . getByTestId ( 'user-status' ) ) . toHaveTextContent (
242273 'Not logged in'
@@ -268,11 +299,14 @@ describe('Auth0Provider', () => {
268299 expiresAt : Date . now ( ) / 1000 + 3600 ,
269300 } as any ) ;
270301
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+
276310 await waitFor ( ( ) =>
277311 expect ( screen . getByTestId ( 'user-status' ) ) . toHaveTextContent (
278312 'Logged in as: Test User'
@@ -302,11 +336,14 @@ describe('Auth0Provider', () => {
302336 } ;
303337 mockClientInstance . webAuth . authorize . mockRejectedValueOnce ( loginError ) ;
304338
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+
310347 await waitFor ( ( ) =>
311348 expect ( screen . getByTestId ( 'user-status' ) ) . toHaveTextContent (
312349 'Not logged in'
@@ -334,11 +371,14 @@ describe('Auth0Provider', () => {
334371 } ) ;
335372
336373 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+
342382 await waitFor ( ( ) =>
343383 expect ( screen . getByTestId ( 'user-status' ) ) . toHaveTextContent (
344384 'Not logged in'
@@ -358,11 +398,14 @@ describe('Auth0Provider', () => {
358398 } ) ;
359399
360400 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+
366409 await waitFor ( ( ) =>
367410 expect ( screen . getByTestId ( 'user-status' ) ) . toHaveTextContent (
368411 'Not logged in'
0 commit comments