diff --git a/tests/rest/client/v1/test_admin.py b/tests/rest/client/v1/test_admin.py
index ea03b7e523..b3ab5642b7 100644
--- a/tests/rest/client/v1/test_admin.py
+++ b/tests/rest/client/v1/test_admin.py
@@ -20,7 +20,7 @@ import json
from mock import Mock
from synapse.api.constants import UserTypes
-from synapse.rest.client.v1 import admin, login
+from synapse.rest.client.v1 import admin, login, room
from tests import unittest
@@ -353,3 +353,68 @@ class UserRegisterTestCase(unittest.HomeserverTestCase):
self.assertEqual(400, int(channel.result["code"]), msg=channel.result["body"])
self.assertEqual('Invalid user type', channel.json_body["error"])
+
+
+class ShutdownRoomTestCase(unittest.HomeserverTestCase):
+ servlets = [
+ admin.register_servlets,
+ login.register_servlets,
+ room.register_servlets,
+ ]
+
+ def prepare(self, reactor, clock, hs):
+ self.event_creation_handler = hs.get_event_creation_handler()
+ hs.config.user_consent_version = "1"
+
+ self._consent_uri_builder = Mock()
+ self._consent_uri_builder.build_user_consent_uri.return_value = (
+ "http://example.com"
+ )
+
+ self.store = hs.get_datastore()
+
+ @unittest.DEBUG
+ def test_shutdown_room_conset(self):
+ admin_user = self.register_user("admin", "pass", admin=True)
+ admin_user_tok = self.login("admin", "pass")
+
+ other_user = self.register_user("user", "pass")
+ other_user_token = self.login("user", "pass")
+
+ room_id = self.helper.create_room_as(other_user, tok=other_user_token)
+
+ # Assert one user in room
+ users_in_room = self.get_success(
+ self.store.get_users_in_room(room_id),
+ )
+ self.assertEqual([other_user], users_in_room)
+
+ # Enable require consent to send events
+ self.event_creation_handler._block_events_without_consent_error = "Error"
+ self.event_creation_handler._consent_uri_builder = self._consent_uri_builder
+
+ # Assert that the user is getting consent error
+ self.helper.send(room_id, body="foo", tok=other_user_token, expect_code=403)
+
+ # Mark the admin user as having consented
+ self.get_success(
+ self.store.user_set_consent_version(admin_user, "1"),
+ )
+
+ # Test that the admin can still send shutdown
+ url = "admin/shutdown_room/" + room_id
+ request, channel = self.make_request(
+ "POST",
+ url.encode('ascii'),
+ json.dumps({"new_room_user_id": admin_user}),
+ access_token=admin_user_tok,
+ )
+ self.render(request)
+
+ self.assertEqual(200, int(channel.result["code"]), msg=channel.result["body"])
+
+ # Assert there is now no longer anyone in the room
+ users_in_room = self.get_success(
+ self.store.get_users_in_room(room_id),
+ )
+ self.assertEqual([], users_in_room)
|