Thanks to visit codestin.com
Credit goes to github.com

Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
6 changes: 5 additions & 1 deletion blt/urls.py
Original file line number Diff line number Diff line change
Expand Up @@ -62,7 +62,8 @@
FlagIssueApiView,
LeaderboardApiViewSet,
StatsApiViewset,
UrlCheckApiViewset
UrlCheckApiViewset,
BugHuntApiViewset,
)

from blt import settings
Expand Down Expand Up @@ -356,6 +357,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"),
Expand Down
29 changes: 29 additions & 0 deletions website/api/views.py
Original file line number Diff line number Diff line change
Expand Up @@ -419,3 +419,32 @@ 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")
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)
hunts = Hunt.objects.values('id','name','url','prize','logo',"starts_on","end_on").filter(is_published=True).order_by("-end_on")
return Response(hunts)

18 changes: 18 additions & 0 deletions website/test_api.py
Original file line number Diff line number Diff line change
Expand Up @@ -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):

Expand Down Expand Up @@ -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")