mirror of
https://github.com/element-hq/synapse.git
synced 2026-11-04 09:07:22 +00:00
Test that a non-member's read receipt is not sent to other users
This commit is contained in:
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())
|
||||
@@ -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())
|
||||
Reference in new issue
Block a user