diff --git a/tests/events/test_utils.py b/tests/events/test_utils.py
index 1b179acb20..02f0800a31 100644
--- a/tests/events/test_utils.py
+++ b/tests/events/test_utils.py
@@ -15,6 +15,8 @@
import unittest as stdlib_unittest
from typing import Any, List, Mapping, Optional
+import attr
+
from synapse.api.constants import EventContentFields
from synapse.api.room_versions import RoomVersions
from synapse.events import EventBase, make_event_from_dict
@@ -435,6 +437,94 @@ class PruneEventTestCase(stdlib_unittest.TestCase):
room_version=RoomVersions.V9,
)
+ def test_relations(self) -> None:
+ """Event relations get redacted until MSC3389."""
+ # Normally the m._relates_to field is redacted.
+ self.run_test(
+ {
+ "type": "m.room.message",
+ "content": {
+ "body": "foo",
+ "m.relates_to": {
+ "rel_type": "rel_type",
+ "event_id": "$parent:domain",
+ "other": "stripped",
+ },
+ },
+ },
+ {
+ "type": "m.room.message",
+ "content": {},
+ "signatures": {},
+ "unsigned": {},
+ },
+ room_version=RoomVersions.V10,
+ )
+
+ # Create a new room version.
+ msc3389_room_ver = attr.evolve(
+ RoomVersions.V10, msc3389_relation_redactions=True
+ )
+
+ self.run_test(
+ {
+ "type": "m.room.message",
+ "content": {
+ "body": "foo",
+ "m.relates_to": {
+ "rel_type": "rel_type",
+ "event_id": "$parent:domain",
+ "other": "stripped",
+ },
+ },
+ },
+ {
+ "type": "m.room.message",
+ "content": {
+ "m.relates_to": {
+ "rel_type": "rel_type",
+ "event_id": "$parent:domain",
+ },
+ },
+ "signatures": {},
+ "unsigned": {},
+ },
+ room_version=msc3389_room_ver,
+ )
+
+ # If the field is not an object, redact it.
+ self.run_test(
+ {
+ "type": "m.room.message",
+ "content": {
+ "body": "foo",
+ "m.relates_to": "stripped",
+ },
+ },
+ {
+ "type": "m.room.message",
+ "content": {},
+ "signatures": {},
+ "unsigned": {},
+ },
+ room_version=msc3389_room_ver,
+ )
+
+ # If the m.relates_to property would be empty, redact it.
+ self.run_test(
+ {
+ "type": "m.room.message",
+ "content": {"body": "foo", "m.relates_to": {"foo": "stripped"}},
+ },
+ {
+ "type": "m.room.message",
+ "content": {},
+ "signatures": {},
+ "unsigned": {},
+ },
+ room_version=msc3389_room_ver,
+ )
+
class SerializeEventTestCase(stdlib_unittest.TestCase):
def serialize(self, ev: EventBase, fields: Optional[List[str]]) -> JsonDict:
|