From 6de0d013c3c6853d9d73c6eb1407978f545ffc9e Mon Sep 17 00:00:00 2001 From: Lebaud Antoine Date: Sat, 9 Mar 2024 16:06:14 +0100 Subject: [PATCH] =?UTF-8?q?=E2=9C=A8(api)=20support=20TeamAccess=20orderin?= =?UTF-8?q?g=20on=20their=20role?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Enhance list capabilities, by adding the OrderingFilter as filter backend, to the TeamAccess viewset. API response can be ordered by TeamAccess role. More supported ordering fields will be supported later on. --- src/backend/core/api/viewsets.py | 4 ++ .../test_api_team_accesses_list.py | 42 +++++++++++++++++++ 2 files changed, 46 insertions(+) diff --git a/src/backend/core/api/viewsets.py b/src/backend/core/api/viewsets.py index 92bbdc7..b99fa80 100644 --- a/src/backend/core/api/viewsets.py +++ b/src/backend/core/api/viewsets.py @@ -326,6 +326,10 @@ class TeamAccessViewSet( list_serializer_class = serializers.TeamAccessReadOnlySerializer detail_serializer_class = serializers.TeamAccessSerializer + filter_backends = [filters.OrderingFilter] + ordering = ['role'] + ordering_fields = ['role'] + def get_permissions(self): """User only needs to be authenticated to list team accesses""" if self.action == "list": diff --git a/src/backend/core/tests/team_accesses/test_api_team_accesses_list.py b/src/backend/core/tests/team_accesses/test_api_team_accesses_list.py index 5897555..ec237f2 100644 --- a/src/backend/core/tests/team_accesses/test_api_team_accesses_list.py +++ b/src/backend/core/tests/team_accesses/test_api_team_accesses_list.py @@ -203,3 +203,45 @@ def test_api_team_accesses_list_authenticated_constant_numqueries( assert response.status_code == 200 assert response.json()["count"] == 21 + + +def test_api_team_accesses_list_authenticated_ordering(): + """Team accesses can be ordered by "role".""" + + user = factories.UserFactory() + factories.IdentityFactory(user=user, is_main=True) + + team = factories.TeamFactory() + models.TeamAccess.objects.create(team=team, user=user) + + # create 20 new team members + for _ in range(20): + extra_user = factories.IdentityFactory(is_main=True).user + factories.TeamAccessFactory(team=team, user=extra_user) + + client = APIClient() + client.force_login(user) + + response = client.get( + f"/api/v1.0/teams/{team.id!s}/accesses/?ordering=role", + ) + assert response.status_code == 200 + assert response.json()["count"] == 21 + + results = [ + team_access["role"] + for team_access in response.json()["results"] + ] + assert sorted(results) == results + + response = client.get( + f"/api/v1.0/teams/{team.id!s}/accesses/?ordering=-role", + ) + assert response.status_code == 200 + assert response.json()["count"] == 21 + + results = [ + team_access["role"] + for team_access in response.json()["results"] + ] + assert sorted(results, reverse=True) == results