From 7aeb64d110ebf96944b8e43bfbd56501711f9df0 Mon Sep 17 00:00:00 2001 From: Amrit Prakash Date: Sat, 18 Mar 2023 20:27:38 +0530 Subject: [PATCH 1/6] getApiForBugHunt --- blt/urls.py | 6 +++++- website/api/views.py | 30 ++++++++++++++++++++++++++++++ 2 files changed, 35 insertions(+), 1 deletion(-) diff --git a/blt/urls.py b/blt/urls.py index cc95649995..27a387343d 100644 --- a/blt/urls.py +++ b/blt/urls.py @@ -61,7 +61,8 @@ FlagIssueApiView, LeaderboardApiViewSet, StatsApiViewset, - UrlCheckApiViewset + UrlCheckApiViewset, + BugHuntApiViewset, ) from blt import settings @@ -355,6 +356,9 @@ re_path(r"^api/v1/", include(router.urls)), re_path(r"^api/v1/stats/$", StatsApiViewset.as_view(), name="get_score"), re_path(r"^api/v1/urlcheck/$", UrlCheckApiViewset.as_view(), name="url_check"), + re_path( + r"^api/v1/hunt/$",BugHuntApiViewset.as_view(),name="hunt_details" + ), re_path(r"^api/v1/userscore/$", website.views.get_score, name="get_score"), re_path(r"^authenticate/", CustomObtainAuthToken.as_view()), re_path(r"^api/v1/createwallet/$", website.views.create_wallet, name="create_wallet"), diff --git a/website/api/views.py b/website/api/views.py index a0186cffef..ba765ea78f 100644 --- a/website/api/views.py +++ b/website/api/views.py @@ -419,3 +419,33 @@ def post(self, request, *args, **kwargs): else: return Response({"found": False}) + +class BugHuntApiViewset(APIView): + + def get_active_hunts(self,request,*args,**kwargs): + + hunts = Hunt.objects.values('id','name','url','prize','logo',"starts_on","end_on").filter(is_published=True,starts_on__lte=datetime.now(),end_on__gte=datetime.now()).order_by("-prize") + return Response(hunts) + + def get_previous_hunts(self,request,*args,**kwargs): + hunts = Hunt.objects.values('id','name','url','prize','logo',"starts_on","end_on").filter(is_published=True,end_on__lte=datetime.now()).order_by("-end_on") + return Response(hunts) + + def get_upcoming_hunts(self,request,*args,**kwargs): + hunts = Hunt.objects.values('id','name','url','prize','logo',"starts_on","end_on").filter(is_published=True,starts_on__gte=datetime.now()).order_by("-starts_on") + return Response(hunts) + + def get(self,request,*args,**kwargs): + activeHunt = request.query_params.get("activeHunt") + previousHunt = request.query_params.get("previousHunt") + upcomingHunt = request.query_params.get("upcomingHunt") + print(activeHunt) + if activeHunt: + return self.get_active_hunts(request,*args,**kwargs) + elif previousHunt: + return self.get_previous_hunts(request,*args,**kwargs) + elif upcomingHunt: + return self.get_upcoming_hunts(request,*args,**kwargs) + + def post(self,request,*args,**kwargs): + pass \ No newline at end of file From e274726cc0805ccf527be44c4c716ee93c6ad55b Mon Sep 17 00:00:00 2001 From: Fred Falcon <7475382+fredfalcon@users.noreply.github.com> Date: Sat, 18 Mar 2023 11:26:20 -0400 Subject: [PATCH 2/6] Update website/api/views.py --- website/api/views.py | 1 - 1 file changed, 1 deletion(-) diff --git a/website/api/views.py b/website/api/views.py index ba765ea78f..4227c4a57f 100644 --- a/website/api/views.py +++ b/website/api/views.py @@ -439,7 +439,6 @@ def get(self,request,*args,**kwargs): activeHunt = request.query_params.get("activeHunt") previousHunt = request.query_params.get("previousHunt") upcomingHunt = request.query_params.get("upcomingHunt") - print(activeHunt) if activeHunt: return self.get_active_hunts(request,*args,**kwargs) elif previousHunt: From e65c6535fabdd8b09330f7755a664e6fe144e1b2 Mon Sep 17 00:00:00 2001 From: Amrit Prakash Date: Sat, 18 Mar 2023 21:01:54 +0530 Subject: [PATCH 3/6] test Error Fixes --- website/api/views.py | 4 +--- 1 file changed, 1 insertion(+), 3 deletions(-) diff --git a/website/api/views.py b/website/api/views.py index 4227c4a57f..68404522ab 100644 --- a/website/api/views.py +++ b/website/api/views.py @@ -432,7 +432,7 @@ def get_previous_hunts(self,request,*args,**kwargs): return Response(hunts) def get_upcoming_hunts(self,request,*args,**kwargs): - hunts = Hunt.objects.values('id','name','url','prize','logo',"starts_on","end_on").filter(is_published=True,starts_on__gte=datetime.now()).order_by("-starts_on") + hunts = Hunt.objects.values('id','name','url','prize','logo',"starts_on","end_on").filter(is_published=True,starts_on__gte=datetime.now()).order_by("starts_on") return Response(hunts) def get(self,request,*args,**kwargs): @@ -446,5 +446,3 @@ def get(self,request,*args,**kwargs): elif upcomingHunt: return self.get_upcoming_hunts(request,*args,**kwargs) - def post(self,request,*args,**kwargs): - pass \ No newline at end of file From 7df471352823f33833c9d0410cf1c6c064e97a2e Mon Sep 17 00:00:00 2001 From: Amrit Prakash Date: Mon, 27 Mar 2023 13:46:17 +0530 Subject: [PATCH 4/6] Write test for bugHuntApi --- website/test_api.py | 18 ++++++++++++++++++ 1 file changed, 18 insertions(+) diff --git a/website/test_api.py b/website/test_api.py index 67a84a53fd..f23e9714fc 100644 --- a/website/test_api.py +++ b/website/test_api.py @@ -6,6 +6,7 @@ from django.core import mail from django.utils.encoding import force_str from django.db.transaction import atomic +import datetime class APITests(APITestCase): @@ -106,3 +107,20 @@ def test_password_reset(self): self.client.post(url, data=data, status_code=200) for item in mail.outbox: print(item.__dict__) + + def test_get_bug_hunt(self): + url = "api/v1/hunt/?" + response = self.client.get(''.join([url,"activeHunt=1/"])) + self.assertEqual(response.status_code, status.HTTP_200_OK) + if len(response.data): + self.assertTrue( + response.data[0]["starts_on"] < datetime.datetime.now() and response.data[0]["end_on"] > datetime.datetime.now(), + "Invalid Response") + response = self.client.get(''.join([url,"previousHunt=1/"])) + self.assertEqual(response.status_code, status.HTTP_200_OK) + if len(response.data): + self.assertLess(response.data[0]["end_on"], datetime.datetime.now(), "Invalid Response") + response = self.client.get(''.join([url,"upcomingHunt=1/"])) + self.assertEqual(response.status_code, status.HTTP_200_OK) + if len(response.data): + self.assertGreater(response.data[0]["starts_on"], datetime.datetime.now(), "Invalid Response") From 354648cabb17f143fc51c6e7bcfa1067a89b3760 Mon Sep 17 00:00:00 2001 From: Amrit Prakash Date: Fri, 31 Mar 2023 11:45:35 +0530 Subject: [PATCH 5/6] add test for hunt api --- website/test_api.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/website/test_api.py b/website/test_api.py index f23e9714fc..5cd7874e38 100644 --- a/website/test_api.py +++ b/website/test_api.py @@ -109,7 +109,7 @@ def test_password_reset(self): print(item.__dict__) def test_get_bug_hunt(self): - url = "api/v1/hunt/?" + url = "/api/v1/hunt/?" response = self.client.get(''.join([url,"activeHunt=1/"])) self.assertEqual(response.status_code, status.HTTP_200_OK) if len(response.data): From 103249468512e657376f73489f10b727b6c43807 Mon Sep 17 00:00:00 2001 From: Amrit Prakash Date: Fri, 31 Mar 2023 12:12:02 +0530 Subject: [PATCH 6/6] fix test error --- website/api/views.py | 2 ++ 1 file changed, 2 insertions(+) diff --git a/website/api/views.py b/website/api/views.py index 68404522ab..f1f5907e5c 100644 --- a/website/api/views.py +++ b/website/api/views.py @@ -445,4 +445,6 @@ def get(self,request,*args,**kwargs): return self.get_previous_hunts(request,*args,**kwargs) elif upcomingHunt: return self.get_upcoming_hunts(request,*args,**kwargs) + hunts = Hunt.objects.values('id','name','url','prize','logo',"starts_on","end_on").filter(is_published=True).order_by("-end_on") + return Response(hunts)