summary refs log tree commit diff
diff options
context:
space:
mode:
authorPaul "LeoNerd" Evans <paul@matrix.org>2014-11-10 19:29:58 +0000
committerPaul "LeoNerd" Evans <paul@matrix.org>2014-11-10 19:29:58 +0000
commit1fd81391385703475bd5c30e7617228cf33c7087 (patch)
tree146e316b2d49fb6f90e8208f7b56d3b56c0c4937
parentHave room initialSync return the room's room_id (diff)
downloadsynapse-1fd81391385703475bd5c30e7617228cf33c7087.tar.xz
Put room state in room initialSync output - I guess this is right; I really can't find any other tests similar...
-rw-r--r--synapse/handlers/message.py7
-rw-r--r--tests/rest/test_rooms.py35
2 files changed, 40 insertions, 2 deletions
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)