Skip to content

Commit

Permalink
Merge pull request #3574 from webkom/ivarnakken/aba-891-fetch-and-sho…
Browse files Browse the repository at this point in the history
…wcase-older-joblistings

Let the joblistings time filter be optional
  • Loading branch information
ivarnakken authored Mar 23, 2024
2 parents 047b118 + ecd7139 commit b7d74d1
Show file tree
Hide file tree
Showing 2 changed files with 27 additions and 7 deletions.
22 changes: 18 additions & 4 deletions lego/apps/joblistings/tests/test_joblistings_api.py
Original file line number Diff line number Diff line change
Expand Up @@ -98,30 +98,44 @@ def setUp(self):
def test_with_abakus_user(self):
AbakusGroup.objects.get(name="Abakus").add_user(self.abakus_user)
self.client.force_authenticate(self.abakus_user)
joblisting_response = self.client.get(_get_list_url())
joblisting_response = self.client.get(_get_list_url(), {"timeFilter": True})
self.assertEqual(joblisting_response.status_code, status.HTTP_200_OK)
self.assertEqual(len(joblisting_response.json()["results"]), 4)

def test_without_user(self):
joblisting_response = self.client.get(_get_list_url())
joblisting_response = self.client.get(_get_list_url(), {"timeFilter": True})
self.assertEqual(joblisting_response.status_code, status.HTTP_200_OK)
self.assertEqual(len(joblisting_response.json()["results"]), 4)

def test_list_after_visible_to(self):
joblisting = Joblisting.objects.all().first()
joblisting.visible_to = timezone.now() - timedelta(days=2)
joblisting.save()
joblisting_response = self.client.get(_get_list_url())
joblisting_response = self.client.get(_get_list_url(), {"timeFilter": True})
self.assertEqual(joblisting_response.status_code, status.HTTP_200_OK)
self.assertEqual(len(joblisting_response.json()["results"]), 3)

def test_before_visible(self):
joblisting = Joblisting.objects.all().first()
joblisting.visible_from = timezone.now() + timedelta(days=2)
joblisting.save()
joblisting_response = self.client.get(_get_detail_url(1))
joblisting_response = self.client.get(_get_detail_url(1), {"timeFilter": True})
self.assertEqual(joblisting_response.status_code, status.HTTP_404_NOT_FOUND)

def test_with_company_query_param(self):
company_pk = 1
joblisting_response = self.client.get(_get_list_url(), {"company": company_pk})
self.assertEqual(joblisting_response.status_code, status.HTTP_200_OK)
self.assertEqual(len(joblisting_response.json()["results"]), 1)
self.assertEqual(
joblisting_response.json()["results"][0]["company"]["id"], company_pk
)

def test_without_time_filter(self):
joblisting_response = self.client.get(_get_list_url())
self.assertEqual(joblisting_response.status_code, status.HTTP_200_OK)
self.assertEqual(len(joblisting_response.json()["results"]), 5)


class RetrieveJoblistingsTestCase(BaseAPITestCase):
fixtures = [
Expand Down
12 changes: 9 additions & 3 deletions lego/apps/joblistings/views.py
Original file line number Diff line number Diff line change
Expand Up @@ -31,8 +31,10 @@ def get_object(self) -> Joblisting:
self.check_object_permissions(self.request, obj)
except PermissionError:
raise Http404 from None

if obj.visible_from > timezone.now() and self.request.user != obj.created_by:
raise Http404 from None

return obj

def get_serializer_class(self):
Expand All @@ -45,8 +47,12 @@ def get_serializer_class(self):
return JoblistingSerializer

def get_queryset(self):
if self.action == "list":
return Joblisting.objects.filter(
queryset = Joblisting.objects.all()

time_filter = self.request.query_params.get("timeFilter", False)
if time_filter:
queryset = queryset.filter(
visible_from__lte=timezone.now(), visible_to__gte=timezone.now()
)
return Joblisting.objects.all()

return queryset

0 comments on commit b7d74d1

Please sign in to comment.