@@ -360,7 +360,18 @@ def test_last_refresh_timestamp(new_user_with_params: auth.UserRecord, api_key):
360360
361361 # login to cause the last_refresh_timestamp to be set
362362 _sign_in_with_password (new_user_with_params .email , 'secret' , api_key )
363- new_user_with_params = auth .get_user (new_user_with_params .uid )
363+
364+ # Attempt to retrieve the user 3 times (with a small delay between each
365+ # attempt). Occassionally, this call retrieves the user data without the
366+ # lastLoginTime/lastRefreshTime set; possibly because it's hitting a
367+ # different server than the login request uses.
368+ user_record = None
369+ for iteration in range (0 , 3 ):
370+ user_record = auth .get_user (new_user_with_params .uid )
371+ if user_record .user_metadata .last_refresh_timestamp is not None :
372+ break
373+
374+ time .sleep (2 ** iteration )
364375
365376 # Ensure the last refresh time occurred at approximately 'now'. (With a
366377 # tolerance of up to 1 minute; we ideally want to ensure that any timezone
@@ -369,7 +380,7 @@ def test_last_refresh_timestamp(new_user_with_params: auth.UserRecord, api_key):
369380 millis_per_second = 1000
370381 millis_per_minute = millis_per_second * 60
371382
372- last_refresh_timestamp = new_user_with_params .user_metadata .last_refresh_timestamp
383+ last_refresh_timestamp = user_record .user_metadata .last_refresh_timestamp
373384 assert last_refresh_timestamp == pytest .approx (
374385 time .time ()* millis_per_second , 1 * millis_per_minute )
375386
@@ -498,7 +509,7 @@ def test_delete_multiple_users(self):
498509 uid2 = auth .create_user (disabled = False ).uid
499510 uid3 = auth .create_user (disabled = True ).uid
500511
501- delete_users_result = auth . delete_users ( [uid1 , uid2 , uid3 ])
512+ delete_users_result = self . _slow_delete_users ( auth , [uid1 , uid2 , uid3 ])
502513 assert delete_users_result .success_count == 3
503514 assert delete_users_result .failure_count == 0
504515 assert len (delete_users_result .errors ) == 0
@@ -510,16 +521,22 @@ def test_delete_multiple_users(self):
510521 def test_is_idempotent (self ):
511522 uid = auth .create_user ().uid
512523
513- delete_users_result = auth . delete_users ( [uid ])
524+ delete_users_result = self . _slow_delete_users ( auth , [uid ])
514525 assert delete_users_result .success_count == 1
515526 assert delete_users_result .failure_count == 0
516527
517528 # Delete the user again, ensuring that everything still counts as a
518529 # success.
519- delete_users_result = auth . delete_users ( [uid ])
530+ delete_users_result = self . _slow_delete_users ( auth , [uid ])
520531 assert delete_users_result .success_count == 1
521532 assert delete_users_result .failure_count == 0
522533
534+ def _slow_delete_users (self , auth , uids ):
535+ """The batchDelete endpoint has a rate limit of 1 QPS. Use this test
536+ helper to ensure you don't exceed the quota."""
537+ time .sleep (1 )
538+ return auth .delete_users (uids )
539+
523540
524541def test_revoke_refresh_tokens (new_user ):
525542 user = auth .get_user (new_user .uid )
0 commit comments