diff options
author | Stephen Finucane <stephen@that.guru> | 2018-10-28 13:31:34 +0000 |
---|---|---|
committer | Stephen Finucane <stephen@that.guru> | 2018-12-22 16:13:26 +0000 |
commit | 3b12675c88ce81800df9e0921f299cf2a082b2aa (patch) | |
tree | d3fd442e6b935eb6fc6e5e07f86a6fd3370384ae | |
parent | 93ce847c359234f987285edbecedc534c7cde50e (diff) | |
download | patchwork-3b12675c88ce81800df9e0921f299cf2a082b2aa.tar patchwork-3b12675c88ce81800df9e0921f299cf2a082b2aa.tar.gz |
REST: Ensure submission exists for comment listing
Signed-off-by: Stephen Finucane <stephen@that.guru>
Closes: #225
-rw-r--r-- | patchwork/api/comment.py | 5 | ||||
-rw-r--r-- | patchwork/tests/api/test_comment.py | 12 | ||||
-rw-r--r-- | releasenotes/notes/issue-225-94215600c1b23f6e.yaml | 6 |
3 files changed, 23 insertions, 0 deletions
diff --git a/patchwork/api/comment.py b/patchwork/api/comment.py index 214a943..57b3711 100644 --- a/patchwork/api/comment.py +++ b/patchwork/api/comment.py @@ -5,6 +5,7 @@ import email.parser +from django.http import Http404 from rest_framework.generics import ListAPIView from rest_framework.serializers import SerializerMethodField @@ -12,6 +13,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): @@ -64,6 +66,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 a0aec59..77ac7e7 100644 --- a/patchwork/tests/api/test_comment.py +++ b/patchwork/tests/api/test_comment.py @@ -61,6 +61,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): @@ -99,3 +105,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 0000000..035e38d --- /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. |