summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorStephen Finucane <stephen@that.guru>2018-10-28 13:31:34 +0000
committerStephen Finucane <stephen@that.guru>2018-12-22 16:13:26 +0000
commit3b12675c88ce81800df9e0921f299cf2a082b2aa (patch)
treed3fd442e6b935eb6fc6e5e07f86a6fd3370384ae
parent93ce847c359234f987285edbecedc534c7cde50e (diff)
downloadpatchwork-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.py5
-rw-r--r--patchwork/tests/api/test_comment.py12
-rw-r--r--releasenotes/notes/issue-225-94215600c1b23f6e.yaml6
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.