diff --git a/unisportomat/quiz/serializers.py b/unisportomat/quiz/serializers.py index 11d0e3a52049e9691c895d6bde03de731c54f967..0b248af630d37598c57e74fa78b7137a0f623760 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 5d1f8c31c157831cd19abd621eaa3fb647c37fef..ea681b26faf279ce90d5a59a1a0ac82dd955e59d 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 f2cf26e015a1212903b954ac57e479224db34ad5..b800b0ba2678a9082a25ddf90496e76d55184f5b 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 388d94e57dc1440659c8320eca2485f5bd78fee9..6d5b897ca658184da18ccf93ed9ae2d65c0973c6 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"), ]