From 909a747e1e44a2bcbf41ed057e582032c090231c Mon Sep 17 00:00:00 2001 From: borzechof99 <borzechof99@mi.fu-berlin.de> Date: Sat, 26 Jun 2021 15:45:36 +0200 Subject: [PATCH] Add Archive View and Tests --- unisportomat/quiz/serializers.py | 26 ++++++++++++++++++++++++++ unisportomat/quiz/tests.py | 23 +++++++++++++++++++++++ unisportomat/quiz/views.py | 18 ++++++++++++++++++ unisportomat/unisportomat/urls.py | 1 + 4 files changed, 68 insertions(+) diff --git a/unisportomat/quiz/serializers.py b/unisportomat/quiz/serializers.py index 11d0e3a..0b248af 100644 --- a/unisportomat/quiz/serializers.py +++ b/unisportomat/quiz/serializers.py @@ -204,3 +204,29 @@ class CriteriaSerializer(serializers.BaseSerializer): criteria_list.append(criterion_dict) return criteria_list + + +class ArchiveSerializer(serializers.BaseSerializer): + """ + Serializes Sports in an Archive Format + """ + + def to_representation(self, sport_list): + """ + Takes a list of Sport Objects and returns id, name, last_used, url serialized + """ + + json_sport_list = [] + + for sport in sport_list: + + json_sport_list.append( + { + "id": sport.pk, + "name": sport.name, + "last_used": sport.last_used, + "url": sport.url, + } + ) + + return json_sport_list diff --git a/unisportomat/quiz/tests.py b/unisportomat/quiz/tests.py index 5d1f8c3..ea681b2 100644 --- a/unisportomat/quiz/tests.py +++ b/unisportomat/quiz/tests.py @@ -547,3 +547,26 @@ class APITest(APITestCase): response = self.client.get(reverse("small-sport-list-detail", kwargs={"pk": 1})) self.assertEqual(response.data["currently_active"], False) + + def test_sport_archive(self): + """ + Tests if a Sport is correctly displayed in the Archive + """ + + # Get initial State of Archive + response = self.client.get(reverse("archive")) + + self.assertEqual(response.data, []) + + # Change State of Sport + response = self.client.patch( + reverse("small-sport-list-detail", kwargs={"pk": 1}), + data={"currently_active": False}, + format="json", + ) + + # Check whether the Archive changed + response = self.client.get(reverse("archive")) + + self.assertEqual(response.data[0]["id"], 1) + self.assertEqual(response.data[0]["name"], "Jiu Jitsu") diff --git a/unisportomat/quiz/views.py b/unisportomat/quiz/views.py index f2cf26e..b800b0b 100644 --- a/unisportomat/quiz/views.py +++ b/unisportomat/quiz/views.py @@ -18,6 +18,7 @@ from .serializers import ( SingleSportSerializer, CriteriaSerializer, IncompleteSportSerializer, + ArchiveSerializer, ) from .models import Sport, Criterion, Question @@ -281,3 +282,20 @@ class CriteriaView(APIView): response = CriteriaSerializer(data) return Response(response.data) + + +class SportArchiveView(APIView): + """ + View For the List of all Archived Sports (so all sports with currently_active=False) + """ + + def get(self, request): + """ + GET for api/admin/archive/ + """ + + archived_sports = Sport.objects.filter(currently_active=False) + + response = ArchiveSerializer(archived_sports) + + return Response(response.data) diff --git a/unisportomat/unisportomat/urls.py b/unisportomat/unisportomat/urls.py index 388d94e..6d5b897 100644 --- a/unisportomat/unisportomat/urls.py +++ b/unisportomat/unisportomat/urls.py @@ -33,4 +33,5 @@ urlpatterns = [ name="incomplete", ), path("api/admin/criteria/", views.CriteriaView.as_view(), name="criteria"), + path("api/admin/sport/archive/", views.SportArchiveView.as_view(), name="archive"), ] -- GitLab