Add test to make sure only joined spaces are taken into account

This commit is contained in:
Eric Eastwood 2024-05-30 16:21:14 -05:00
parent 212ea3568a
commit 813cda92df

View file

@ -642,7 +642,7 @@ class FilterRoomsTestCase(HomeserverTestCase):
def test_filter_dm_rooms(self) -> None: 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_id = self.register_user("user1", "pass")
user1_tok = self.login(user1_id, "pass") user1_tok = self.login(user1_id, "pass")
@ -683,7 +683,7 @@ class FilterRoomsTestCase(HomeserverTestCase):
def test_filter_non_dm_rooms(self) -> None: 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_id = self.register_user("user1", "pass")
user1_tok = self.login(user1_id, "pass") user1_tok = self.login(user1_id, "pass")
@ -724,7 +724,7 @@ class FilterRoomsTestCase(HomeserverTestCase):
def test_filter_space_rooms(self) -> None: 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_id = self.register_user("user1", "pass")
user1_tok = self.login(user1_id, "pass") user1_tok = self.login(user1_id, "pass")
@ -764,7 +764,7 @@ class FilterRoomsTestCase(HomeserverTestCase):
is_public=False, is_public=False,
tok=user1_tok, 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_a, room_id2, user1_tok)
self._add_space_child(space_c, 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}) 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})