Skip to content
This repository was archived by the owner on Mar 26, 2024. It is now read-only.

Commit a7624d5

Browse files
committed
Beeper previews: omit key if we don't populate preview
1 parent 9710687 commit a7624d5

File tree

3 files changed

+47
-17
lines changed

3 files changed

+47
-17
lines changed

synapse/handlers/sync.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2467,7 +2467,7 @@ async def _generate_room_entry(
24672467
unread_thread_notifications={},
24682468
summary=summary,
24692469
unread_count=0,
2470-
preview={},
2470+
preview=None,
24712471
)
24722472

24732473
# Only generate previews if we have new events that would change it

synapse/rest/client/sync.py

Lines changed: 8 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -536,13 +536,14 @@ async def encode_room(
536536
if self._msc2654_enabled:
537537
result["org.matrix.msc2654.unread_count"] = room.unread_count
538538

539-
if room.preview and "event" in room.preview:
540-
room.preview["event"] = self._event_serializer.serialize_events(
541-
[room.preview["event"]],
542-
time_now,
543-
config=serialize_options,
544-
)[0]
545-
result["com.beeper.inbox.preview"] = room.preview
539+
if room.preview:
540+
if "event" in room.preview:
541+
room.preview["event"] = self._event_serializer.serialize_events(
542+
[room.preview["event"]],
543+
time_now,
544+
config=serialize_options,
545+
)[0]
546+
result["com.beeper.inbox.preview"] = room.preview
546547

547548
return result
548549

tests/rest/client/test_sync.py

Lines changed: 38 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -873,15 +873,16 @@ def _check_preview_event_ids(self, auth_token: str, expected: dict) -> None:
873873
channel.json_body.get("rooms", {}).get("join", {}).get(room_id, {})
874874
)
875875

876-
preview_id = room_entry.get("com.beeper.inbox.preview", {}).get(
877-
"event_id", {}
878-
)
879-
880-
self.assertEqual(
881-
preview_id,
882-
expected_entry,
883-
room_entry,
884-
)
876+
preview = room_entry.get("com.beeper.inbox.preview")
877+
if preview:
878+
preview_id = preview.get("event_id")
879+
self.assertEqual(
880+
preview_id,
881+
expected_entry,
882+
room_entry,
883+
)
884+
else:
885+
self.assertIsNone(expected_entry, room_entry)
885886

886887
# Store the next batch for the next request.
887888
self.next_batches[auth_token] = channel.json_body["next_batch"]
@@ -1114,6 +1115,34 @@ def test_room_preview_edits(self) -> None:
11141115
auth_token=self.tok, expected={self.room_id: send_5_body["event_id"]}
11151116
)
11161117

1118+
def test_room_preview_no_change(self) -> None:
1119+
"""Tests that /sync only includes previews when we have new events."""
1120+
1121+
self.helper.join(room=self.room_id, user=self.user_id, tok=self.tok)
1122+
1123+
send_body = self.helper.send(self.room_id, "hello", tok=self.tok)
1124+
1125+
# Should have preview on first sync
1126+
self._check_preview_event_ids(
1127+
auth_token=self.tok,
1128+
expected={self.room_id: send_body["event_id"]},
1129+
)
1130+
1131+
# Should have no preview on second sync (no timeline changes)
1132+
self._check_preview_event_ids(
1133+
auth_token=self.tok,
1134+
expected={self.room_id: None},
1135+
)
1136+
1137+
# Send a join event, this isn't previewed but will be in the timeline
1138+
self.helper.join(room=self.room_id, user=self.user2, tok=self.tok2)
1139+
1140+
# Should have preview because we have timeline, but preview is unchanged
1141+
self._check_preview_event_ids(
1142+
auth_token=self.tok,
1143+
expected={self.room_id: send_body["event_id"]},
1144+
)
1145+
11171146

11181147
class SyncCacheTestCase(unittest.HomeserverTestCase):
11191148
servlets = [

0 commit comments

Comments
 (0)