diff --git a/synapse/events/utils.py b/synapse/events/utils.py
index 4febd98f43..a14d9bd0ca 100644
--- a/synapse/events/utils.py
+++ b/synapse/events/utils.py
@@ -16,6 +16,8 @@
from synapse.api.constants import EventTypes
from . import EventBase
+from frozendict import frozendict
+
import re
# Split strings on "." but not "\." This uses a negative lookbehind assertion for '\'
@@ -130,7 +132,7 @@ def _copy_field(src, dst, field):
key_to_move = field.pop(-1)
sub_dict = src
for sub_field in field: # e.g. sub_field => "content"
- if sub_field in sub_dict and type(sub_dict[sub_field]) == dict:
+ if sub_field in sub_dict and type(sub_dict[sub_field]) == frozendict:
sub_dict = sub_dict[sub_field]
else:
return
diff --git a/tests/events/test_utils.py b/tests/events/test_utils.py
index b9f55d174d..7136cca7c2 100644
--- a/tests/events/test_utils.py
+++ b/tests/events/test_utils.py
@@ -17,7 +17,11 @@
from .. import unittest
from synapse.events import FrozenEvent
-from synapse.events.utils import prune_event
+from synapse.events.utils import prune_event, serialize_event
+
+
+def MockEvent(**kwargs):
+ return FrozenEvent(kwargs)
class PruneEventTestCase(unittest.TestCase):
@@ -118,11 +122,41 @@ class PruneEventTestCase(unittest.TestCase):
class SerializeEventTestCase(unittest.TestCase):
+ def serialize(self, ev, fields):
+ return serialize_event(ev, 1924354, event_fields=fields)
+
def test_event_fields_works_with_keys(self):
- pass
+ self.assertEquals(
+ self.serialize(
+ MockEvent(
+ sender="@alice:localhost",
+ room_id="!foo:bar"
+ ),
+ ["room_id"]
+ ),
+ {
+ "room_id": "!foo:bar",
+ }
+ )
def test_event_fields_works_with_nested_keys(self):
- pass
+ self.assertEquals(
+ self.serialize(
+ MockEvent(
+ sender="@alice:localhost",
+ room_id="!foo:bar",
+ content={
+ "body": "A message",
+ },
+ ),
+ ["content.body"]
+ ),
+ {
+ "content": {
+ "body": "A message",
+ }
+ }
+ )
def test_event_fields_works_with_dot_keys(self):
pass
|