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