From 813cda92df230a6c1d17f7e546a798e0c04aed6e Mon Sep 17 00:00:00 2001 From: Eric Eastwood Date: Thu, 30 May 2024 16:21:14 -0500 Subject: [PATCH] Add test to make sure only joined spaces are taken into account --- tests/handlers/test_sliding_sync.py | 78 +++++++++++++++++++++++++++-- 1 file changed, 74 insertions(+), 4 deletions(-) diff --git a/tests/handlers/test_sliding_sync.py b/tests/handlers/test_sliding_sync.py index 3be9c49661..24b37d8c8a 100644 --- a/tests/handlers/test_sliding_sync.py +++ b/tests/handlers/test_sliding_sync.py @@ -642,7 +642,7 @@ class FilterRoomsTestCase(HomeserverTestCase): def test_filter_dm_rooms(self) -> None: """ - Test filter for DM rooms + Test `filter.is_dm` for DM rooms """ user1_id = self.register_user("user1", "pass") user1_tok = self.login(user1_id, "pass") @@ -683,7 +683,7 @@ class FilterRoomsTestCase(HomeserverTestCase): def test_filter_non_dm_rooms(self) -> None: """ - Test filter for non-DM rooms + Test `filter.is_dm` for non-DM rooms """ user1_id = self.register_user("user1", "pass") user1_tok = self.login(user1_id, "pass") @@ -724,7 +724,7 @@ class FilterRoomsTestCase(HomeserverTestCase): def test_filter_space_rooms(self) -> None: """ - Test filter for rooms in spaces + Test `filter.spaces` for rooms in spaces """ user1_id = self.register_user("user1", "pass") user1_tok = self.login(user1_id, "pass") @@ -764,7 +764,7 @@ class FilterRoomsTestCase(HomeserverTestCase): is_public=False, tok=user1_tok, ) - # Add to space_a and space b + # Add to space_a and space_b self._add_space_child(space_a, room_id2, user1_tok) self._add_space_child(space_c, room_id2, user1_tok) @@ -824,3 +824,73 @@ class FilterRoomsTestCase(HomeserverTestCase): ) self.assertEqual(filtered_room_ids, {room_id1, room_id2, room_id3}) + + def test_filter_only_joined_spaces(self) -> None: + """ + Test `filter.spaces` to make sure the filter only takes into account spaces we + are joined to. + """ + 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") + + # space_a created by user1 + space_a = self.helper.create_room_as( + user1_id, + tok=user1_tok, + extra_content={ + "creation_content": {EventContentFields.ROOM_TYPE: RoomTypes.SPACE} + }, + ) + # space_b created by user2 + space_b = self.helper.create_room_as( + user2_id, + tok=user2_tok, + extra_content={ + "creation_content": {EventContentFields.ROOM_TYPE: RoomTypes.SPACE} + }, + ) + + room_id1 = self.helper.create_room_as( + user1_id, + is_public=False, + tok=user1_tok, + ) + # Add to space_a + self._add_space_child(space_a, room_id1, user1_tok) + + room_id2 = self.helper.create_room_as( + user1_id, + is_public=False, + tok=user1_tok, + ) + # Add to space_b + self._add_space_child(space_b, room_id2, user2_tok) + + # TODO: Better way to avoid the circular import? (see + # https://github.com/element-hq/synapse/pull/17187#discussion_r1619492779) + from synapse.handlers.sliding_sync import SlidingSyncConfig + + filters = SlidingSyncConfig.SlidingSyncList.Filters( + spaces=[ + space_a, + space_b, + ], + ) + + # Try filtering the rooms + filtered_room_ids = self.get_success( + self.sliding_sync_handler.filter_rooms( + UserID.from_string(user1_id), + { + # a + room_id1, + # b (but user1 isn't in space_b) + room_id2, + }, + filters, + ) + ) + + self.assertEqual(filtered_room_ids, {room_id1})