[Patchew-devel] [PATCH v2] rest: add support for series DELETE in the REST API, and a corresponding unit test
Shubham Jain
shubhamjain7495 at gmail.com
Sat Mar 31 12:25:57 UTC 2018
rest: Imporoved series DELETE in the REST API
- Fixed the char limit in line to make code more readable
- overrode perform_destroy function so that that endpoint accepts any message id and not just the series head
- wrote tests for the same
---
api/rest.py | 9 +++++++--
tests/test_rest.py | 19 +++++++++++++++++++
2 files changed, 26 insertions(+), 2 deletions(-)
diff --git a/api/rest.py b/api/rest.py
index 7c131a4..16810bb 100644
--- a/api/rest.py
+++ b/api/rest.py
@@ -14,7 +14,7 @@ from django.template import loader
from mod import dispatch_module_hook
from .models import Project, Message
from .search import SearchEngine
-from rest_framework import permissions, serializers, viewsets, filters, mixins, renderers
+from rest_framework import permissions, serializers, viewsets, filters, mixins, renderers, status
from rest_framework.decorators import detail_route
from rest_framework.fields import SerializerMethodField
from rest_framework.relations import HyperlinkedIdentityField
@@ -231,7 +231,7 @@ class SeriesViewSet(BaseMessageViewSet):
search_fields = (SEARCH_PARAM,)
class ProjectSeriesViewSet(ProjectMessagesViewSetMixin,
- SeriesViewSet):
+ SeriesViewSet, mixins.DestroyModelMixin):
def collect_patches(self, series):
if series.is_patch:
patches = [series]
@@ -265,6 +265,11 @@ class ProjectSeriesViewSet(ProjectMessagesViewSetMixin,
self.collect_replies(i, series.replies)
return series
+ def destroy(self, request, *args, **kwargs):
+ instance = self.get_object()
+ Message.objects.delete_subthread(instance)
+ return Response(status=status.HTTP_204_NO_CONTENT)
+
# Messages
# TODO: add POST endpoint connected to email plugin?
diff --git a/tests/test_rest.py b/tests/test_rest.py
index 28ca10b..d64e047 100755
--- a/tests/test_rest.py
+++ b/tests/test_rest.py
@@ -218,6 +218,25 @@ class RestTest(PatchewTestCase):
resp = self.api_client.get(self.REST_BASE + 'projects/12345/series/?q=project:QEMU')
self.assertEqual(resp.data['count'], 0)
+ def test_series_delete(self):
+ test_message_id = '1469192015-16487-1-git-send-email-berrange at redhat.com'
+ series = self.apply_and_retrieve('0004-multiple-patch-reviewed.mbox.gz',self.p.id,
+ test_message_id)
+ message = series.data['message']
+ resp_before = self.api_client.get(self.REST_BASE + 'projects/' + str(self.p.id)
+ + '/series/' + test_message_id + '/')
+ resp_reply_before = self.api_client.get(message + 'replies/')
+ resp = self.api_client.delete(self.REST_BASE + 'projects/' + str(self.p.id)
+ + '/series/' + test_message_id + '/')
+ resp_after = self.api_client.get(self.REST_BASE + 'projects/' + str(self.p.id)
+ + '/series/' + test_message_id + '/')
+ resp_reply_after = self.api_client.get(message + 'replies/')
+ self.assertEqual(resp_before.status_code, 200)
+ self.assertEqual(resp_reply_before.status_code, 200)
+ self.assertEqual(resp.status_code, 204)
+ self.assertEqual(resp_after.status_code, 404)
+ self.assertEqual(resp_reply_after.status_code, 404)
+
def test_message(self):
series = self.apply_and_retrieve('0001-simple-patch.mbox.gz',
self.p.id, '20160628014747.20971-1-famz at redhat.com')
--
2.14.3 (Apple Git-98)
More information about the Patchew-devel
mailing list