@@ -363,6 +363,45 @@ def test_reactivation_makes_regular_user_searchable(self) -> None:
363
363
self .assertEqual (len (s ["results" ]), 1 )
364
364
self .assertEqual (s ["results" ][0 ]["user_id" ], user )
365
365
366
+ def test_process_join_after_server_leaves_room (self ) -> None :
367
+ alice = self .register_user ("alice" , "pass" )
368
+ alice_token = self .login (alice , "pass" )
369
+ bob = self .register_user ("bob" , "pass" )
370
+ bob_token = self .login (bob , "pass" )
371
+
372
+ # Alice makes two rooms. Bob joins one of them.
373
+ room1 = self .helper .create_room_as (alice , tok = alice_token )
374
+ room2 = self .helper .create_room_as (alice , tok = alice_token )
375
+ print ("room1=" , room1 )
376
+ print ("room2=" , room2 )
377
+ self .helper .join (room1 , bob , tok = bob_token )
378
+
379
+ # The user sharing tables should have been updated.
380
+ public1 = self .get_success (self .user_dir_helper .get_users_in_public_rooms ())
381
+ self .assertEqual (set (public1 ), {(alice , room1 ), (alice , room2 ), (bob , room1 )})
382
+
383
+ # Alice leaves room1. The user sharing tables should be updated.
384
+ self .helper .leave (room1 , alice , tok = alice_token )
385
+ public2 = self .get_success (self .user_dir_helper .get_users_in_public_rooms ())
386
+ self .assertEqual (set (public2 ), {(alice , room2 ), (bob , room1 )})
387
+
388
+ # Pause the processing of new events.
389
+ dir_handler = self .hs .get_user_directory_handler ()
390
+ dir_handler .update_user_directory = False
391
+
392
+ # Bob leaves one room and joins the other.
393
+ self .helper .leave (room1 , bob , tok = bob_token )
394
+ self .helper .join (room2 , bob , tok = bob_token )
395
+
396
+ # Process the leave and join in one go.
397
+ dir_handler .update_user_directory = True
398
+ dir_handler .notify_new_event ()
399
+ self .wait_for_background_updates ()
400
+
401
+ # The user sharing tables should have been updated.
402
+ public3 = self .get_success (self .user_dir_helper .get_users_in_public_rooms ())
403
+ self .assertEqual (set (public3 ), {(alice , room2 ), (bob , room2 )})
404
+
366
405
def test_private_room (self ) -> None :
367
406
"""
368
407
A user can be searched for only by people that are either in a public
0 commit comments