|
22 | 22 |
|
23 | 23 | import synapse.rest.admin
|
24 | 24 | from synapse.api.constants import UserTypes
|
25 |
| -from synapse.api.errors import HttpResponseException, ResourceLimitError |
26 |
| -from synapse.rest.client.v1 import login |
| 25 | +from synapse.api.errors import Codes, HttpResponseException, ResourceLimitError |
| 26 | +from synapse.rest.client.v1 import login, room |
27 | 27 | from synapse.rest.client.v2_alpha import sync
|
28 | 28 |
|
29 | 29 | from tests import unittest
|
@@ -995,3 +995,95 @@ def test_accidental_deactivation_prevention(self):
|
995 | 995 |
|
996 | 996 | # Ensure they're still alive
|
997 | 997 | self.assertEqual(0, channel.json_body["deactivated"])
|
| 998 | + |
| 999 | + |
| 1000 | +class UserMembershipRestTestCase(unittest.HomeserverTestCase): |
| 1001 | + |
| 1002 | + servlets = [ |
| 1003 | + synapse.rest.admin.register_servlets, |
| 1004 | + login.register_servlets, |
| 1005 | + sync.register_servlets, |
| 1006 | + room.register_servlets, |
| 1007 | + ] |
| 1008 | + |
| 1009 | + def prepare(self, reactor, clock, hs): |
| 1010 | + self.store = hs.get_datastore() |
| 1011 | + |
| 1012 | + self.admin_user = self.register_user("admin", "pass", admin=True) |
| 1013 | + self.admin_user_tok = self.login("admin", "pass") |
| 1014 | + |
| 1015 | + self.other_user = self.register_user("user", "pass") |
| 1016 | + self.url = "/_synapse/admin/v1/users/%s/joined_rooms" % urllib.parse.quote( |
| 1017 | + self.other_user |
| 1018 | + ) |
| 1019 | + |
| 1020 | + def test_no_auth(self): |
| 1021 | + """ |
| 1022 | + Try to list rooms of an user without authentication. |
| 1023 | + """ |
| 1024 | + request, channel = self.make_request("GET", self.url, b"{}") |
| 1025 | + self.render(request) |
| 1026 | + |
| 1027 | + self.assertEqual(401, int(channel.result["code"]), msg=channel.result["body"]) |
| 1028 | + self.assertEqual(Codes.MISSING_TOKEN, channel.json_body["errcode"]) |
| 1029 | + |
| 1030 | + def test_requester_is_no_admin(self): |
| 1031 | + """ |
| 1032 | + If the user is not a server admin, an error is returned. |
| 1033 | + """ |
| 1034 | + other_user_token = self.login("user", "pass") |
| 1035 | + |
| 1036 | + request, channel = self.make_request( |
| 1037 | + "GET", self.url, access_token=other_user_token, |
| 1038 | + ) |
| 1039 | + self.render(request) |
| 1040 | + |
| 1041 | + self.assertEqual(403, int(channel.result["code"]), msg=channel.result["body"]) |
| 1042 | + self.assertEqual(Codes.FORBIDDEN, channel.json_body["errcode"]) |
| 1043 | + |
| 1044 | + def test_user_does_not_exist(self): |
| 1045 | + """ |
| 1046 | + Tests that a lookup for a user that does not exist returns a 404 |
| 1047 | + """ |
| 1048 | + url = "/_synapse/admin/v1/users/@unknown_person:test/joined_rooms" |
| 1049 | + request, channel = self.make_request( |
| 1050 | + "GET", url, access_token=self.admin_user_tok, |
| 1051 | + ) |
| 1052 | + self.render(request) |
| 1053 | + |
| 1054 | + self.assertEqual(404, channel.code, msg=channel.json_body) |
| 1055 | + self.assertEqual(Codes.NOT_FOUND, channel.json_body["errcode"]) |
| 1056 | + |
| 1057 | + def test_user_is_not_local(self): |
| 1058 | + """ |
| 1059 | + Tests that a lookup for a user that is not a local returns a 400 |
| 1060 | + """ |
| 1061 | + url = "/_synapse/admin/v1/users/@unknown_person:unknown_domain/joined_rooms" |
| 1062 | + |
| 1063 | + request, channel = self.make_request( |
| 1064 | + "GET", url, access_token=self.admin_user_tok, |
| 1065 | + ) |
| 1066 | + self.render(request) |
| 1067 | + |
| 1068 | + self.assertEqual(400, channel.code, msg=channel.json_body) |
| 1069 | + self.assertEqual("Can only lookup local users", channel.json_body["error"]) |
| 1070 | + |
| 1071 | + def test_get_rooms(self): |
| 1072 | + """ |
| 1073 | + Tests that a normal lookup for rooms is successfully |
| 1074 | + """ |
| 1075 | + # Create rooms and join |
| 1076 | + other_user_tok = self.login("user", "pass") |
| 1077 | + number_rooms = 5 |
| 1078 | + for n in range(number_rooms): |
| 1079 | + self.helper.create_room_as(self.other_user, tok=other_user_tok) |
| 1080 | + |
| 1081 | + # Get rooms |
| 1082 | + request, channel = self.make_request( |
| 1083 | + "GET", self.url, access_token=self.admin_user_tok, |
| 1084 | + ) |
| 1085 | + self.render(request) |
| 1086 | + |
| 1087 | + self.assertEqual(200, channel.code, msg=channel.json_body) |
| 1088 | + self.assertEqual(number_rooms, channel.json_body["total"]) |
| 1089 | + self.assertEqual(number_rooms, len(channel.json_body["joined_rooms"])) |
0 commit comments