Browse Source

return perm to recreate poll instead of generic nomessage from delete poll endpoint

Rafał Pitoń 8 years ago
parent
commit
8815ae8d71

+ 6 - 3
misago/threads/api/threadpoll.py

@@ -9,7 +9,8 @@ from misago.acl import add_acl
 from misago.core.shortcuts import get_int_or_404
 from misago.core.shortcuts import get_int_or_404
 
 
 from ..models import Poll, PollVote
 from ..models import Poll, PollVote
-from ..permissions.polls import allow_start_poll, allow_edit_poll, allow_delete_poll
+from ..permissions.polls import (
+    allow_start_poll, allow_edit_poll, allow_delete_poll, can_start_poll)
 from ..serializers import PollSerializer, NewPollSerializer, EditPollSerializer
 from ..serializers import PollSerializer, NewPollSerializer, EditPollSerializer
 from ..viewmodels.thread import ForumThread
 from ..viewmodels.thread import ForumThread
 
 
@@ -90,9 +91,11 @@ class ViewSet(viewsets.ViewSet):
 
 
         allow_delete_poll(request.user, instance)
         allow_delete_poll(request.user, instance)
 
 
-        instance.delete()
+        thread.poll.delete()
 
 
-        return Response({'detail': 'ok'})
+        return Response({
+            'can_start_poll': can_start_poll(request.user, thread)
+        })
 
 
 
 
 class ThreadPollViewSet(ViewSet):
 class ThreadPollViewSet(ViewSet):

+ 1 - 1
misago/threads/permissions/polls.py

@@ -129,7 +129,7 @@ def allow_start_poll(user, target):
         if target.is_closed:
         if target.is_closed:
             raise PermissionDenied(_("This thread is closed. You can't start polls in it."))
             raise PermissionDenied(_("This thread is closed. You can't start polls in it."))
     try:
     try:
-        if target.poll:
+        if target.poll and target.poll.pk:
             raise PermissionDenied(_("There's already a poll in this thread."))
             raise PermissionDenied(_("There's already a poll in this thread."))
     except Poll.DoesNotExist:
     except Poll.DoesNotExist:
         pass
         pass

+ 3 - 0
misago/threads/tests/test_thread_polldelete_api.py

@@ -148,7 +148,9 @@ class ThreadPollDeleteTests(ThreadPollApiTestCase):
     def test_poll_delete(self):
     def test_poll_delete(self):
         """api deletes poll and associated votes"""
         """api deletes poll and associated votes"""
         response = self.client.delete(self.api_link)
         response = self.client.delete(self.api_link)
+
         self.assertEqual(response.status_code, 200)
         self.assertEqual(response.status_code, 200)
+        self.assertEqual(response.json(), {'can_start_poll': True})
 
 
         self.assertEqual(Poll.objects.count(), 0)
         self.assertEqual(Poll.objects.count(), 0)
         self.assertEqual(PollVote.objects.count(), 0)
         self.assertEqual(PollVote.objects.count(), 0)
@@ -167,6 +169,7 @@ class ThreadPollDeleteTests(ThreadPollApiTestCase):
 
 
         response = self.client.delete(self.api_link)
         response = self.client.delete(self.api_link)
         self.assertEqual(response.status_code, 200)
         self.assertEqual(response.status_code, 200)
+        self.assertEqual(response.json(), {'can_start_poll': True})
 
 
         self.assertEqual(Poll.objects.count(), 0)
         self.assertEqual(Poll.objects.count(), 0)
         self.assertEqual(PollVote.objects.count(), 0)
         self.assertEqual(PollVote.objects.count(), 0)