diff --git a/tests/rest/client/test_relations.py b/tests/rest/client/test_relations.py
index de80aca037..dfd9ffcb93 100644
--- a/tests/rest/client/test_relations.py
+++ b/tests/rest/client/test_relations.py
@@ -1123,6 +1123,48 @@ class RelationsTestCase(unittest.HomeserverTestCase):
{"event_id": edit_event_id, "sender": self.user_id}, m_replace_dict
)
+ @unittest.override_config({"experimental_features": {"msc3440_enabled": True}})
+ def test_edit_thread(self):
+ """Test that editing a thread works."""
+
+ # Create a thread and edit the last event.
+ channel = self._send_relation(
+ RelationTypes.THREAD,
+ "m.room.message",
+ content={"msgtype": "m.text", "body": "A threaded reply!"},
+ )
+ self.assertEquals(200, channel.code, channel.json_body)
+ threaded_event_id = channel.json_body["event_id"]
+
+ new_body = {"msgtype": "m.text", "body": "I've been edited!"}
+ channel = self._send_relation(
+ RelationTypes.REPLACE,
+ "m.room.message",
+ content={"msgtype": "m.text", "body": "foo", "m.new_content": new_body},
+ parent_id=threaded_event_id,
+ )
+ self.assertEquals(200, channel.code, channel.json_body)
+
+ # Fetch the thread root, to get the bundled aggregation for the thread.
+ channel = self.make_request(
+ "GET",
+ f"/rooms/{self.room}/event/{self.parent_id}",
+ access_token=self.user_token,
+ )
+ self.assertEquals(200, channel.code, channel.json_body)
+
+ # We expect that the edit message appears in the thread summary in the
+ # unsigned relations section.
+ relations_dict = channel.json_body["unsigned"].get("m.relations")
+ self.assertIn(RelationTypes.THREAD, relations_dict)
+
+ thread_summary = relations_dict[RelationTypes.THREAD]
+ self.assertIn("latest_event", thread_summary)
+ latest_event_in_thread = thread_summary["latest_event"]
+ self.assertEquals(
+ latest_event_in_thread["content"]["body"], "I've been edited!"
+ )
+
def test_edit_edit(self):
"""Test that an edit cannot be edited."""
new_body = {"msgtype": "m.text", "body": "Initial edit"}
|