From b0bc4129cef3d1488da0c87f21da0a3ee9a91d60 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Norman=20J=C3=A4ckel?= Date: Tue, 30 Nov 2021 00:26:48 +0100 Subject: [PATCH] Changed GetUser view. Now it retrieves one or more users. --- server/openslides/users/views.py | 25 +++++++++----------- server/tests/integration/users/test_views.py | 14 +++++------ 2 files changed, 18 insertions(+), 21 deletions(-) diff --git a/server/openslides/users/views.py b/server/openslides/users/views.py index 0856fcb32..9792461d1 100644 --- a/server/openslides/users/views.py +++ b/server/openslides/users/views.py @@ -39,7 +39,6 @@ from ..utils.autoupdate import AutoupdateElement, inform_changed_data, inform_el from ..utils.cache import element_cache from ..utils.rest_api import ( ModelViewSet, - NotFound, Response, SimpleMetadata, ValidationError, @@ -1173,10 +1172,10 @@ class PasswordResetConfirmView(APIView): class GetUserView(APIView): """ - View to retrieve a single user. + View to retrieve users. Use query parameters "id", "username", "email" or "number" to look for - a user and retrieve its data. + users and retrieve their data. """ http_method_names = ["get"] @@ -1211,19 +1210,17 @@ class GetUserView(APIView): query = query.filter(number=number) # Execute queryset - try: - self.user = query.get() - except User.DoesNotExist: - raise NotFound({"detail": "User does not exist."}) - except User.MultipleObjectsReturned: - raise ValidationError({"detail": "Found more than one user."}) + self.users = list(query) return super().get(request, *args, **kwargs) def get_context_data(self, **context): - user_full_data = async_to_sync(element_cache.get_element_data)( - self.user.get_collection_string(), self.user.pk - ) - user_full_data.pop("session_auth_hash") - context.update({"user": user_full_data}) + users_full_data = [] + for user in self.users: + user_full_data = async_to_sync(element_cache.get_element_data)( + user.get_collection_string(), user.pk + ) + user_full_data.pop("session_auth_hash") + users_full_data.append(user_full_data) + context.update({"users": users_full_data}) return context diff --git a/server/tests/integration/users/test_views.py b/server/tests/integration/users/test_views.py index e108470a1..893b169cc 100644 --- a/server/tests/integration/users/test_views.py +++ b/server/tests/integration/users/test_views.py @@ -185,9 +185,9 @@ class TestGetUserView(TestCase): response = self.client.get(self.url, {"username": "admin"}) self.assertEqual(response.status_code, 200) - user = json.loads(response.content.decode()).get("user") - self.assertEqual(user["username"], "admin") - self.assertEqual(user["last_name"], "Administrator") + users = json.loads(response.content.decode()).get("users") + self.assertEqual(users[0]["username"], "admin") + self.assertEqual(users[0]["last_name"], "Administrator") def test_post(self): response = self.client.post(self.url) @@ -199,9 +199,9 @@ class TestGetUserView(TestCase): response = self.client.get(self.url, {"username": "not-existing-username"}) - self.assertEqual(response.status_code, 404) + self.assertEqual(response.status_code, 200) content = json.loads(response.content.decode()) - self.assertEqual(content.get("detail"), "User does not exist.") + self.assertEqual(content.get("users"), []) def test_multiple_objects(self): self.client.login(username="admin", password="admin") @@ -214,9 +214,9 @@ class TestGetUserView(TestCase): response = self.client.get(self.url, {"number": "Number#1234567890"}) - self.assertEqual(response.status_code, 400) + self.assertEqual(response.status_code, 200) content = json.loads(response.content.decode()) - self.assertEqual(content.get("detail"), "Found more than one user.") + self.assertEqual(len(content.get("users")), 2) def test_delegate(self): self.make_admin_delegate()