diff --git a/lego/apps/joblistings/tests/test_joblistings_api.py b/lego/apps/joblistings/tests/test_joblistings_api.py index 3844373a6..968ebbb86 100644 --- a/lego/apps/joblistings/tests/test_joblistings_api.py +++ b/lego/apps/joblistings/tests/test_joblistings_api.py @@ -98,12 +98,12 @@ 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) @@ -111,7 +111,7 @@ 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) @@ -119,9 +119,23 @@ 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 = [ diff --git a/lego/apps/joblistings/views.py b/lego/apps/joblistings/views.py index 3aa041626..94c731834 100644 --- a/lego/apps/joblistings/views.py +++ b/lego/apps/joblistings/views.py @@ -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): @@ -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