(api) support TeamAccess ordering on their role

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.
This commit is contained in:
Lebaud Antoine
2024-03-09 16:06:14 +01:00
committed by aleb_the_flash
parent 1de743e18a
commit 6de0d013c3
2 changed files with 46 additions and 0 deletions

View File

@@ -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":

View File

@@ -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