summary refs log tree commit diff
diff options
context:
space:
mode:
-rw-r--r--tests/storage/test_stream.py87
1 files changed, 70 insertions, 17 deletions
diff --git a/tests/storage/test_stream.py b/tests/storage/test_stream.py
index 6cbfcc7652..ab30e6ea25 100644
--- a/tests/storage/test_stream.py
+++ b/tests/storage/test_stream.py
@@ -48,22 +48,28 @@ class StreamStoreTestCase(unittest.TestCase):
         self.depth = 1
 
     @defer.inlineCallbacks
-    def inject_room_member(self, room, user, membership):
+    def inject_room_member(self, room, user, membership, prev_state=None):
         self.depth += 1
 
+        event = self.event_factory.create_event(
+            etype=RoomMemberEvent.TYPE,
+            user_id=user.to_string(),
+            state_key=user.to_string(),
+            room_id=room.to_string(),
+            membership=membership,
+            content={"membership": membership},
+            depth=self.depth,
+        )
+
+        if prev_state:
+            event.prev_state = prev_state
+
         # Have to create a join event using the eventfactory
         yield self.store.persist_event(
-            self.event_factory.create_event(
-                etype=RoomMemberEvent.TYPE,
-                user_id=user.to_string(),
-                state_key=user.to_string(),
-                room_id=room.to_string(),
-                membership=membership,
-                content={"membership": membership},
-                depth=self.depth,
-            )
+            event
         )
 
+        defer.returnValue(event)
 
     @defer.inlineCallbacks
     def inject_message(self, room, user, body):
@@ -83,8 +89,12 @@ class StreamStoreTestCase(unittest.TestCase):
     @defer.inlineCallbacks
     def test_event_stream_get_other(self):
         # Both bob and alice joins the room
-        yield self.inject_room_member(self.room1, self.u_alice, Membership.JOIN)
-        yield self.inject_room_member(self.room1, self.u_bob, Membership.JOIN)
+        yield self.inject_room_member(
+            self.room1, self.u_alice, Membership.JOIN
+        )
+        yield self.inject_room_member(
+            self.room1, self.u_bob, Membership.JOIN
+        )
 
         # Initial stream key:
         start = yield self.store.get_room_events_max_id()
@@ -116,8 +126,12 @@ class StreamStoreTestCase(unittest.TestCase):
     @defer.inlineCallbacks
     def test_event_stream_get_own(self):
         # Both bob and alice joins the room
-        yield self.inject_room_member(self.room1, self.u_alice, Membership.JOIN)
-        yield self.inject_room_member(self.room1, self.u_bob, Membership.JOIN)
+        yield self.inject_room_member(
+            self.room1, self.u_alice, Membership.JOIN
+        )
+        yield self.inject_room_member(
+            self.room1, self.u_bob, Membership.JOIN
+        )
 
         # Initial stream key:
         start = yield self.store.get_room_events_max_id()
@@ -149,11 +163,17 @@ class StreamStoreTestCase(unittest.TestCase):
     @defer.inlineCallbacks
     def test_event_stream_join_leave(self):
         # Both bob and alice joins the room
-        yield self.inject_room_member(self.room1, self.u_alice, Membership.JOIN)
-        yield self.inject_room_member(self.room1, self.u_bob, Membership.JOIN)
+        yield self.inject_room_member(
+            self.room1, self.u_alice, Membership.JOIN
+        )
+        yield self.inject_room_member(
+            self.room1, self.u_bob, Membership.JOIN
+        )
 
         # Then bob leaves again.
-        yield self.inject_room_member(self.room1, self.u_bob, Membership.LEAVE)
+        yield self.inject_room_member(
+            self.room1, self.u_bob, Membership.LEAVE
+        )
 
         # Initial stream key:
         start = yield self.store.get_room_events_max_id()
@@ -171,3 +191,36 @@ class StreamStoreTestCase(unittest.TestCase):
 
         # We should not get the message, as it happened *after* bob left.
         self.assertEqual(0, len(results))
+
+    @defer.inlineCallbacks
+    def test_event_stream_prev_content(self):
+        yield self.inject_room_member(
+            self.room1, self.u_bob, Membership.JOIN
+        )
+
+        event1 = yield self.inject_room_member(
+            self.room1, self.u_alice, Membership.JOIN
+        )
+
+        start = yield self.store.get_room_events_max_id()
+
+        event2 = yield self.inject_room_member(
+            self.room1, self.u_alice, Membership.JOIN,
+            prev_state=event1.event_id,
+        )
+
+        end = yield self.store.get_room_events_max_id()
+
+        results, _ = yield self.store.get_room_events_stream(
+            self.u_bob.to_string(),
+            start,
+            end,
+            None,  # Is currently ignored
+        )
+
+        # We should not get the message, as it happened *after* bob left.
+        self.assertEqual(1, len(results))
+
+        event = results[0]
+
+        self.assertTrue(hasattr(event, "prev_content"), msg="No prev_content key")