Test that a non-member's read receipt is not sent to other users

This commit is contained in:
Paul Chobert committed 2026-10-28 18:09:29 +01:00
1 parent d7b191a1fb
commit c8b2706de2
2 files changed
+77

No files matched your search

@@ -63,6 +63,8 @@ class SlidingSyncServerAnnouncementsTestCase(SlidingSyncBase):
self.bob = self.register_user("bob", "pass")
self.bob_tok = self.login("bob", "pass")
self.bob_other_tok = self.login("bob", "pass")
self.dan = self.register_user("dan", "pass")
self.dan_tok = self.login("dan", "pass")
self.config = hs.config.serverannouncements
self.config.rooms = [
@@ -603,3 +605,39 @@ class SlidingSyncServerAnnouncementsTestCase(SlidingSyncBase):
self._receipts_sync_body(), since=pos, tok=self.bob_other_tok
)
self.assertEqual(self._receipt_readers(response, event_id), {self.bob})
def test_non_member_receipt_hidden_from_member(self) -> None:
"""A non-member's read receipt is not sent to a member of the
announcement room, on a new connection or an existing one.
"""
event_id = self._announce("hello")
_, pos = self.do_sync(self._receipts_sync_body(), tok=self.announcer_tok)
self._send_read_receipt(event_id, self.bob_tok)
response, _ = self.do_sync(
self._receipts_sync_body(), since=pos, tok=self.announcer_tok
)
self.assertEqual(self._receipt_readers(response, event_id), set())
response, _ = self.do_sync(self._receipts_sync_body(), tok=self.announcer_tok)
self.assertIn(self.room_id, response["rooms"])
self.assertEqual(self._receipt_readers(response, event_id), set())
def test_non_member_receipt_hidden_from_other_non_member(self) -> None:
"""A non-member's read receipt is not sent to another non-member, on a
new connection or an existing one.
"""
event_id = self._announce("hello")
_, pos = self.do_sync(self._receipts_sync_body(), tok=self.dan_tok)
self._send_read_receipt(event_id, self.bob_tok)
response, _ = self.do_sync(
self._receipts_sync_body(), since=pos, tok=self.dan_tok
)
self.assertEqual(self._receipt_readers(response, event_id), set())
response, _ = self.do_sync(self._receipts_sync_body(), tok=self.dan_tok)
self._assert_delivered(response, self.dan)
self.assertEqual(self._receipt_readers(response, event_id), set())
+39
View File
@@ -442,6 +442,8 @@ class ServerAnnouncementsReceiptsTestCase(unittest.HomeserverTestCase):
self.bob = self.register_user("bob", "pass")
self.bob_tok = self.login("bob", "pass")
self.bob_other_tok = self.login("bob", "pass")
self.dan = self.register_user("dan", "pass")
self.dan_tok = self.login("dan", "pass")
hs.config.serverannouncements.rooms = [
ServerAnnouncementRoom(
@@ -510,6 +512,9 @@ class ServerAnnouncementsReceiptsTestCase(unittest.HomeserverTestCase):
for user_id in event["content"].get(event_id, {}).get(ReceiptTypes.READ, {})
}
def _assert_room_in_sync(self, response: JsonDict) -> None:
self.assertIn(self.room_id, response.get("rooms", {}).get("join", {}))
def test_non_member_receipt_on_initial_sync_of_other_device(self) -> None:
"""A non-member's read receipt is in the initial sync of their other
devices.
@@ -531,3 +536,37 @@ class ServerAnnouncementsReceiptsTestCase(unittest.HomeserverTestCase):
response = self._sync(self.bob_other_tok, since)
self.assertEqual(self._receipt_readers(response, event_id), {self.bob})
def test_non_member_receipt_hidden_from_member_sync(self) -> None:
"""A non-member's read receipt is not in the initial or incremental
sync of a member of the announcement room.
"""
event_id = self._announce("hello")
since = self._sync(self.announcer_tok)["next_batch"]
self._send_read_receipt(event_id, self.bob_tok)
response = self._sync(self.announcer_tok)
self._assert_room_in_sync(response)
self.assertEqual(self._receipt_readers(response, event_id), set())
response = self._sync(self.announcer_tok, since)
self.assertEqual(self._receipt_readers(response, event_id), set())
def test_non_member_receipt_hidden_from_other_non_member_sync(self) -> None:
"""A non-member's read receipt is not in the initial or incremental
sync of another non-member.
"""
event_id = self._announce("hello")
since = self._sync(self.dan_tok)["next_batch"]
self._send_read_receipt(event_id, self.bob_tok)
self._announce("again")
response = self._sync(self.dan_tok)
self._assert_room_in_sync(response)
self.assertEqual(self._receipt_readers(response, event_id), set())
response = self._sync(self.dan_tok, since)
self._assert_room_in_sync(response)
self.assertEqual(self._receipt_readers(response, event_id), set())