From: Stephen Finucane Date: Sun, 28 Oct 2018 13:31:34 +0000 (+0000) Subject: REST: Ensure submission exists for comment listing X-Git-Tag: v2.1.2~15 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=62b0f040689526ea06c8923afcacf08593be999d;p=thirdparty%2Fpatchwork.git REST: Ensure submission exists for comment listing Signed-off-by: Stephen Finucane Closes: #225 (cherry picked from commit 3b12675c88ce81800df9e0921f299cf2a082b2aa) --- diff --git a/patchwork/api/comment.py b/patchwork/api/comment.py index 5a5adb1d..e0068353 100644 --- a/patchwork/api/comment.py +++ b/patchwork/api/comment.py @@ -19,6 +19,7 @@ import email.parser +from django.http import Http404 from rest_framework.generics import ListAPIView from rest_framework.serializers import SerializerMethodField @@ -26,6 +27,7 @@ from patchwork.api.base import BaseHyperlinkedModelSerializer from patchwork.api.base import PatchworkPermission from patchwork.api.embedded import PersonSerializer from patchwork.models import Comment +from patchwork.models import Submission class CommentListSerializer(BaseHyperlinkedModelSerializer): @@ -78,6 +80,9 @@ class CommentList(ListAPIView): lookup_url_kwarg = 'pk' def get_queryset(self): + if not Submission.objects.filter(pk=self.kwargs['pk']).exists(): + raise Http404 + return Comment.objects.filter( submission=self.kwargs['pk'] ).select_related('submitter') diff --git a/patchwork/tests/api/test_comment.py b/patchwork/tests/api/test_comment.py index f79ea469..5fcb9463 100644 --- a/patchwork/tests/api/test_comment.py +++ b/patchwork/tests/api/test_comment.py @@ -75,6 +75,12 @@ class TestCoverComments(APITestCase): with self.assertRaises(NoReverseMatch): self.client.get(self.api_url(cover_obj, version='1.0')) + def test_list_invalid_cover(self): + """Ensure we get a 404 for a non-existent cover letter.""" + resp = self.client.get( + reverse('api-cover-comment-list', kwargs={'pk': '99999'})) + self.assertEqual(status.HTTP_404_NOT_FOUND, resp.status_code) + @unittest.skipUnless(settings.ENABLE_REST_API, 'requires ENABLE_REST_API') class TestPatchComments(APITestCase): @@ -113,3 +119,9 @@ class TestPatchComments(APITestCase): # check we can't access comments using the old version of the API with self.assertRaises(NoReverseMatch): self.client.get(self.api_url(patch_obj, version='1.0')) + + def test_list_invalid_patch(self): + """Ensure we get a 404 for a non-existent patch.""" + resp = self.client.get( + reverse('api-patch-comment-list', kwargs={'pk': '99999'})) + self.assertEqual(status.HTTP_404_NOT_FOUND, resp.status_code) diff --git a/releasenotes/notes/issue-225-94215600c1b23f6e.yaml b/releasenotes/notes/issue-225-94215600c1b23f6e.yaml new file mode 100644 index 00000000..035e38d8 --- /dev/null +++ b/releasenotes/notes/issue-225-94215600c1b23f6e.yaml @@ -0,0 +1,6 @@ +--- +fixes: + - | + Showing comments for a non-existant patch or cover letter was returning an + empty response instead of a HTTP 404. This issue is resolved for both + resources.