mirror of
https://git.anonymousland.org/anonymousland/synapse.git
synced 2025-08-19 02:07:48 -04:00
Support for MSC2285 (hidden read receipts) (#10413)
Implementation of matrix-org/matrix-doc#2285
This commit is contained in:
parent
0489683012
commit
c3b037795a
11 changed files with 495 additions and 12 deletions
294
tests/handlers/test_receipts.py
Normal file
294
tests/handlers/test_receipts.py
Normal file
|
@ -0,0 +1,294 @@
|
|||
# Copyright 2021 Šimon Brandner <simon.bra.ag@gmail.com>
|
||||
#
|
||||
# Licensed under the Apache License, Version 2.0 (the "License");
|
||||
# you may not use this file except in compliance with the License.
|
||||
# You may obtain a copy of the License at
|
||||
#
|
||||
# http://www.apache.org/licenses/LICENSE-2.0
|
||||
#
|
||||
# Unless required by applicable law or agreed to in writing, software
|
||||
# distributed under the License is distributed on an "AS IS" BASIS,
|
||||
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
# See the License for the specific language governing permissions and
|
||||
# limitations under the License.
|
||||
|
||||
|
||||
from typing import List
|
||||
|
||||
from synapse.api.constants import ReadReceiptEventFields
|
||||
from synapse.types import JsonDict
|
||||
|
||||
from tests import unittest
|
||||
|
||||
|
||||
class ReceiptsTestCase(unittest.HomeserverTestCase):
|
||||
def prepare(self, reactor, clock, hs):
|
||||
self.event_source = hs.get_event_sources().sources["receipt"]
|
||||
|
||||
# In the first param of _test_filters_hidden we use "hidden" instead of
|
||||
# ReadReceiptEventFields.MSC2285_HIDDEN. We do this because we're mocking
|
||||
# the data from the database which doesn't use the prefix
|
||||
|
||||
def test_filters_out_hidden_receipt(self):
|
||||
self._test_filters_hidden(
|
||||
[
|
||||
{
|
||||
"content": {
|
||||
"$1435641916114394fHBLK:matrix.org": {
|
||||
"m.read": {
|
||||
"@rikj:jki.re": {
|
||||
"ts": 1436451550453,
|
||||
"hidden": True,
|
||||
}
|
||||
}
|
||||
}
|
||||
},
|
||||
"room_id": "!jEsUZKDJdhlrceRyVU:example.org",
|
||||
"type": "m.receipt",
|
||||
}
|
||||
],
|
||||
[],
|
||||
)
|
||||
|
||||
def test_does_not_filter_out_our_hidden_receipt(self):
|
||||
self._test_filters_hidden(
|
||||
[
|
||||
{
|
||||
"content": {
|
||||
"$1435641916hfgh4394fHBLK:matrix.org": {
|
||||
"m.read": {
|
||||
"@me:server.org": {
|
||||
"ts": 1436451550453,
|
||||
"hidden": True,
|
||||
},
|
||||
}
|
||||
}
|
||||
},
|
||||
"room_id": "!jEsUZKDJdhlrceRyVU:example.org",
|
||||
"type": "m.receipt",
|
||||
}
|
||||
],
|
||||
[
|
||||
{
|
||||
"content": {
|
||||
"$1435641916hfgh4394fHBLK:matrix.org": {
|
||||
"m.read": {
|
||||
"@me:server.org": {
|
||||
"ts": 1436451550453,
|
||||
ReadReceiptEventFields.MSC2285_HIDDEN: True,
|
||||
},
|
||||
}
|
||||
}
|
||||
},
|
||||
"room_id": "!jEsUZKDJdhlrceRyVU:example.org",
|
||||
"type": "m.receipt",
|
||||
}
|
||||
],
|
||||
)
|
||||
|
||||
def test_filters_out_hidden_receipt_and_ignores_rest(self):
|
||||
self._test_filters_hidden(
|
||||
[
|
||||
{
|
||||
"content": {
|
||||
"$1dgdgrd5641916114394fHBLK:matrix.org": {
|
||||
"m.read": {
|
||||
"@rikj:jki.re": {
|
||||
"ts": 1436451550453,
|
||||
"hidden": True,
|
||||
},
|
||||
"@user:jki.re": {
|
||||
"ts": 1436451550453,
|
||||
},
|
||||
}
|
||||
}
|
||||
},
|
||||
"room_id": "!jEsUZKDJdhlrceRyVU:example.org",
|
||||
"type": "m.receipt",
|
||||
}
|
||||
],
|
||||
[
|
||||
{
|
||||
"content": {
|
||||
"$1dgdgrd5641916114394fHBLK:matrix.org": {
|
||||
"m.read": {
|
||||
"@user:jki.re": {
|
||||
"ts": 1436451550453,
|
||||
}
|
||||
}
|
||||
}
|
||||
},
|
||||
"room_id": "!jEsUZKDJdhlrceRyVU:example.org",
|
||||
"type": "m.receipt",
|
||||
}
|
||||
],
|
||||
)
|
||||
|
||||
def test_filters_out_event_with_only_hidden_receipts_and_ignores_the_rest(self):
|
||||
self._test_filters_hidden(
|
||||
[
|
||||
{
|
||||
"content": {
|
||||
"$14356419edgd14394fHBLK:matrix.org": {
|
||||
"m.read": {
|
||||
"@rikj:jki.re": {
|
||||
"ts": 1436451550453,
|
||||
"hidden": True,
|
||||
},
|
||||
}
|
||||
},
|
||||
"$1435641916114394fHBLK:matrix.org": {
|
||||
"m.read": {
|
||||
"@user:jki.re": {
|
||||
"ts": 1436451550453,
|
||||
}
|
||||
}
|
||||
},
|
||||
},
|
||||
"room_id": "!jEsUZKDJdhlrceRyVU:example.org",
|
||||
"type": "m.receipt",
|
||||
}
|
||||
],
|
||||
[
|
||||
{
|
||||
"content": {
|
||||
"$1435641916114394fHBLK:matrix.org": {
|
||||
"m.read": {
|
||||
"@user:jki.re": {
|
||||
"ts": 1436451550453,
|
||||
}
|
||||
}
|
||||
}
|
||||
},
|
||||
"room_id": "!jEsUZKDJdhlrceRyVU:example.org",
|
||||
"type": "m.receipt",
|
||||
}
|
||||
],
|
||||
)
|
||||
|
||||
def test_handles_missing_content_of_m_read(self):
|
||||
self._test_filters_hidden(
|
||||
[
|
||||
{
|
||||
"content": {
|
||||
"$14356419ggffg114394fHBLK:matrix.org": {"m.read": {}},
|
||||
"$1435641916114394fHBLK:matrix.org": {
|
||||
"m.read": {
|
||||
"@user:jki.re": {
|
||||
"ts": 1436451550453,
|
||||
}
|
||||
}
|
||||
},
|
||||
},
|
||||
"room_id": "!jEsUZKDJdhlrceRyVU:example.org",
|
||||
"type": "m.receipt",
|
||||
}
|
||||
],
|
||||
[
|
||||
{
|
||||
"content": {
|
||||
"$14356419ggffg114394fHBLK:matrix.org": {"m.read": {}},
|
||||
"$1435641916114394fHBLK:matrix.org": {
|
||||
"m.read": {
|
||||
"@user:jki.re": {
|
||||
"ts": 1436451550453,
|
||||
}
|
||||
}
|
||||
},
|
||||
},
|
||||
"room_id": "!jEsUZKDJdhlrceRyVU:example.org",
|
||||
"type": "m.receipt",
|
||||
}
|
||||
],
|
||||
)
|
||||
|
||||
def test_handles_empty_event(self):
|
||||
self._test_filters_hidden(
|
||||
[
|
||||
{
|
||||
"content": {
|
||||
"$143564gdfg6114394fHBLK:matrix.org": {},
|
||||
"$1435641916114394fHBLK:matrix.org": {
|
||||
"m.read": {
|
||||
"@user:jki.re": {
|
||||
"ts": 1436451550453,
|
||||
}
|
||||
}
|
||||
},
|
||||
},
|
||||
"room_id": "!jEsUZKDJdhlrceRyVU:example.org",
|
||||
"type": "m.receipt",
|
||||
}
|
||||
],
|
||||
[
|
||||
{
|
||||
"content": {
|
||||
"$143564gdfg6114394fHBLK:matrix.org": {},
|
||||
"$1435641916114394fHBLK:matrix.org": {
|
||||
"m.read": {
|
||||
"@user:jki.re": {
|
||||
"ts": 1436451550453,
|
||||
}
|
||||
}
|
||||
},
|
||||
},
|
||||
"room_id": "!jEsUZKDJdhlrceRyVU:example.org",
|
||||
"type": "m.receipt",
|
||||
}
|
||||
],
|
||||
)
|
||||
|
||||
def test_filters_out_receipt_event_with_only_hidden_receipt_and_ignores_rest(self):
|
||||
self._test_filters_hidden(
|
||||
[
|
||||
{
|
||||
"content": {
|
||||
"$14356419edgd14394fHBLK:matrix.org": {
|
||||
"m.read": {
|
||||
"@rikj:jki.re": {
|
||||
"ts": 1436451550453,
|
||||
"hidden": True,
|
||||
},
|
||||
}
|
||||
},
|
||||
},
|
||||
"room_id": "!jEsUZKDJdhlrceRyVU:example.org",
|
||||
"type": "m.receipt",
|
||||
},
|
||||
{
|
||||
"content": {
|
||||
"$1435641916114394fHBLK:matrix.org": {
|
||||
"m.read": {
|
||||
"@user:jki.re": {
|
||||
"ts": 1436451550453,
|
||||
}
|
||||
}
|
||||
},
|
||||
},
|
||||
"room_id": "!jEsUZKDJdhlrceRyVU:example.org",
|
||||
"type": "m.receipt",
|
||||
},
|
||||
],
|
||||
[
|
||||
{
|
||||
"content": {
|
||||
"$1435641916114394fHBLK:matrix.org": {
|
||||
"m.read": {
|
||||
"@user:jki.re": {
|
||||
"ts": 1436451550453,
|
||||
}
|
||||
}
|
||||
}
|
||||
},
|
||||
"room_id": "!jEsUZKDJdhlrceRyVU:example.org",
|
||||
"type": "m.receipt",
|
||||
}
|
||||
],
|
||||
)
|
||||
|
||||
def _test_filters_hidden(
|
||||
self, events: List[JsonDict], expected_output: List[JsonDict]
|
||||
):
|
||||
"""Tests that the _filter_out_hidden returns the expected output"""
|
||||
filtered_events = self.event_source.filter_out_hidden(events, "@me:server.org")
|
||||
self.assertEquals(filtered_events, expected_output)
|
Loading…
Add table
Add a link
Reference in a new issue