Strip the user's real membership from announcement room timelines

This commit is contained in:
Paul Chobert committed 2026-10-27 17:20:41 +01:00
1 parent 7f444b13b9
commit 14a30ca064
2 files changed
+17

No files matched your search

+8
View File
@@ -612,6 +612,14 @@ class SyncRestServlet(RestServlet):
for key, event in state_dict.items()
if key != (EventTypes.Member, user_id)
}
timeline_events = [
filtered_event
for filtered_event in timeline_events
if not (
filtered_event.event.type == EventTypes.Member
and filtered_event.event.state_key == user_id
)
]
state_events = state_dict.values()
+9
View File
@@ -2361,6 +2361,15 @@ class ServerAnnouncementsSyncTestCase(unittest.HomeserverTestCase):
)
self.assertEqual(self._timeline_ids(room), [event_id])
def test_initial_sync_after_leaving(self) -> None:
"""A former member who left on their own gets a single, synthetic join
on initial sync, even when their real leave is among the recent events.
"""
self.helper.leave(self.room_id, self.former, tok=self.former_tok)
self._announce("hello")
self._assert_delivered(self._sync(self.former_tok), self.former)
def test_lazy_loaded_members(self) -> None:
"""The synthetic join is sent when members are lazy-loaded."""
self._announce("hello")