From a1aaa47dad27a93915bcd0cceaf7001df577418e Mon Sep 17 00:00:00 2001 From: Eric Eastwood Date: Wed, 7 Aug 2024 19:58:51 -0500 Subject: [PATCH] Add more tests --- tests/storage/test_events.py | 188 ++++++++++++++++++++++++++++++++++- 1 file changed, 186 insertions(+), 2 deletions(-) diff --git a/tests/storage/test_events.py b/tests/storage/test_events.py index 25fd262293..50949b0b63 100644 --- a/tests/storage/test_events.py +++ b/tests/storage/test_events.py @@ -707,6 +707,100 @@ class SlidingSyncPrePopulatedTablesTestCase(HomeserverTestCase): exact=True, ) + def test_joined_room_with_info_updated(self) -> None: + """ + Test info in `sliding_sync_joined_rooms` is updated when the current state is + updated. + """ + user1_id = self.register_user("user1", "pass") + user1_tok = self.login(user1_id, "pass") + user2_id = self.register_user("user2", "pass") + user2_tok = self.login(user2_id, "pass") + + room_id1 = self.helper.create_room_as(user2_id, tok=user2_tok) + # Add a room name + self.helper.send_state( + room_id1, + EventTypes.Name, + {"name": "my super duper room"}, + tok=user2_tok, + ) + + # User1 joins the room + self.helper.join(room_id1, user1_id, tok=user1_tok) + + sliding_sync_joined_rooms_results = self._get_sliding_sync_joined_rooms() + self.assertIncludes( + set(sliding_sync_joined_rooms_results.keys()), + {room_id1}, + exact=True, + ) + self.assertEqual( + sliding_sync_joined_rooms_results[room_id1], + _SlidingSyncJoinedRoomResult( + room_id=room_id1, + # TODO + event_stream_ordering=None, + bump_stamp=None, + room_type=None, + room_name="my super duper room", + is_encrypted=False, + ), + ) + + sliding_sync_non_join_memberships_results = ( + self._get_sliding_sync_non_join_memberships() + ) + self.assertIncludes( + set(sliding_sync_non_join_memberships_results.keys()), + set(), + exact=True, + ) + + # Update the room name + self.helper.send_state( + room_id1, + EventTypes.Name, + {"name": "my super duper room was renamed"}, + tok=user2_tok, + ) + # Encrypt the room + self.helper.send_state( + room_id1, + EventTypes.RoomEncryption, + {EventContentFields.ENCRYPTION_ALGORITHM: "m.megolm.v1.aes-sha2"}, + tok=user2_tok, + ) + + sliding_sync_joined_rooms_results = self._get_sliding_sync_joined_rooms() + self.assertIncludes( + set(sliding_sync_joined_rooms_results.keys()), + {room_id1}, + exact=True, + ) + # Make sure we see the new room name + self.assertEqual( + sliding_sync_joined_rooms_results[room_id1], + _SlidingSyncJoinedRoomResult( + room_id=room_id1, + # TODO + event_stream_ordering=None, + bump_stamp=None, + room_type=None, + room_name="my super duper room was renamed", + is_encrypted=True, + ), + ) + + sliding_sync_non_join_memberships_results = ( + self._get_sliding_sync_non_join_memberships() + ) + self.assertIncludes( + set(sliding_sync_non_join_memberships_results.keys()), + set(), + exact=True, + ) + def test_joined_space_room_with_info(self) -> None: """ Test joined space room with name shows up in `sliding_sync_joined_rooms`. @@ -762,9 +856,99 @@ class SlidingSyncPrePopulatedTablesTestCase(HomeserverTestCase): exact=True, ) - # TODO: Test non-join, no info + def test_non_join_space_room_with_info(self) -> None: + """ + Test users who was invited shows up in `sliding_sync_non_join_memberships`. + """ + user1_id = self.register_user("user1", "pass") + user1_tok = self.login(user1_id, "pass") + user2_id = self.register_user("user2", "pass") + user2_tok = self.login(user2_id, "pass") - # TODO: Test info filled out for non-joins + space_room_id = self.helper.create_room_as( + user2_id, + tok=user2_tok, + extra_content={ + "creation_content": {EventContentFields.ROOM_TYPE: RoomTypes.SPACE} + }, + ) + # Add a room name + self.helper.send_state( + space_room_id, + EventTypes.Name, + {"name": "my super duper space"}, + tok=user2_tok, + ) + # Encrypt the room + self.helper.send_state( + space_room_id, + EventTypes.RoomEncryption, + {EventContentFields.ENCRYPTION_ALGORITHM: "m.megolm.v1.aes-sha2"}, + tok=user2_tok, + ) + + # User1 is invited to the room + user1_invited_response = self.helper.invite( + space_room_id, src=user2_id, targ=user1_id, tok=user2_tok + ) + user1_invited_event_pos = self.get_success( + self.store.get_position_for_event(user1_invited_response["event_id"]) + ) + + # Update the room name after we are invited just to make sure + # we don't update non-join memberships when the room name changes. + self.helper.send_state( + space_room_id, + EventTypes.Name, + {"name": "my super duper space was renamed"}, + tok=user2_tok, + ) + + # User2 is still joined to the room so we should still have an entry in the + # `sliding_sync_joined_rooms` table. + sliding_sync_joined_rooms_results = self._get_sliding_sync_joined_rooms() + self.assertIncludes( + set(sliding_sync_joined_rooms_results.keys()), + {space_room_id}, + exact=True, + ) + self.assertEqual( + sliding_sync_joined_rooms_results[space_room_id], + _SlidingSyncJoinedRoomResult( + room_id=space_room_id, + # TODO + event_stream_ordering=None, + bump_stamp=None, + room_type=RoomTypes.SPACE, + room_name="my super duper space was renamed", + is_encrypted=True, + ), + ) + + sliding_sync_non_join_memberships_results = ( + self._get_sliding_sync_non_join_memberships() + ) + self.assertIncludes( + set(sliding_sync_non_join_memberships_results.keys()), + { + (space_room_id, user1_id), + }, + exact=True, + ) + # Holds the info according to the current state when the user was invited + self.assertEqual( + sliding_sync_non_join_memberships_results.get((space_room_id, user1_id)), + _SlidingSyncNonJoinMembershipResult( + room_id=space_room_id, + user_id=user1_id, + membership_event_id=user1_invited_response["event_id"], + membership=Membership.INVITE, + event_stream_ordering=user1_invited_event_pos.stream, + room_type=RoomTypes.SPACE, + room_name="my super duper space", + is_encrypted=True, + ), + ) def test_non_join_invite_ban(self) -> None: """