diff --git a/synapse/handlers/message.py b/synapse/handlers/message.py
index bb1290fd05..d8764a8933 100644
--- a/synapse/handlers/message.py
+++ b/synapse/handlers/message.py
@@ -336,10 +336,13 @@ class MessageHandler(BaseHandler):
feedback=False):
yield self.auth.check_joined_room(room_id, user_id)
+ state_tuples = yield self.store.get_current_state(room_id)
+ state = [self.hs.serialize_event(x) for x in state_tuples]
+
defer.returnValue({
#"membership": membership,
"room_id": room_id,
#"messages": messages,
- #"state": state,
- #"presence": presence,
+ "state": state,
+ #"presence": presence
})
diff --git a/tests/rest/test_rooms.py b/tests/rest/test_rooms.py
index 129f4d49f4..1e8b16c36a 100644
--- a/tests/rest/test_rooms.py
+++ b/tests/rest/test_rooms.py
@@ -984,6 +984,29 @@ class RoomInitialSyncTestCase(RestTestCase):
synapse.rest.room.register_servlets(hs, self.mock_resource)
+ # MemoryDataStore's get_current_state() isn't even approximately
+ # right. Longterm we'll be killing it in favour of a real
+ # SQLite :memory:-based test. For now lets patch it
+ efact = hs.get_event_factory()
+ def get_current_state(room_id):
+ """
+ TODO: these probably need content
+ ('!WxMBxqtWbMMdMEkRqY:red', 'm.room.send_event_level', ''),
+ ('!WxMBxqtWbMMdMEkRqY:red', 'm.room.power_levels', ''),
+ ('!WxMBxqtWbMMdMEkRqY:red', 'm.room.ops_levels', ''),
+ ('!WxMBxqtWbMMdMEkRqY:red', 'm.room.member', '@sid1:red'),
+ ('!WxMBxqtWbMMdMEkRqY:red', 'm.room.add_state_level', '')]
+ """
+ return [
+ efact.create_event(etype="m.room.create", room_id=room_id,
+ content={},
+ ),
+ efact.create_event(etype="m.room.join_rules", room_id=room_id,
+ content={},
+ ),
+ ]
+ hs.datastore.get_current_state = get_current_state
+
# create the room
self.room_id = yield self.create_room_as(self.user_id)
@@ -995,6 +1018,18 @@ class RoomInitialSyncTestCase(RestTestCase):
self.assertEquals(self.room_id, response["room_id"])
+ # Room state is easier to assert on if we unpack it into a dict
+ state = {}
+ for event in response["state"]:
+ if "state_key" not in event:
+ continue
+ t = event["type"]
+ if t not in state:
+ state[t] = []
+ state[t].append(event)
+
+ self.assertTrue("m.room.create" in state)
+
# (code, response) = yield self.mock_resource.trigger("GET", path, None)
# self.assertEquals(200, code, msg=str(response))
# self.assert_dict(json.loads(content), response)
|