Skip to content

Commit

Permalink
Merge pull request #678 from drnlm/bugfix/fix_custom_delete
Browse files Browse the repository at this point in the history
Bugfix/fix custom delete
  • Loading branch information
drnlm committed Sep 4, 2023
2 parents 9bc8123 + 2b975f6 commit 72fd987
Show file tree
Hide file tree
Showing 2 changed files with 72 additions and 3 deletions.
62 changes: 61 additions & 1 deletion wafer/talks/tests/test_views.py
Original file line number Diff line number Diff line change
Expand Up @@ -9,7 +9,7 @@
from wafer.tests.utils import create_user, mock_avatar_url
from wafer.talks.models import (
Talk, TalkUrl, ACCEPTED, REJECTED, SUBMITTED, UNDER_CONSIDERATION,
CANCELLED, PROVISIONAL)
CANCELLED, PROVISIONAL, WITHDRAWN)
from wafer.talks.tests.fixtures import create_talk, create_talk_type


Expand Down Expand Up @@ -158,6 +158,66 @@ def test_view_canonicalizes_url_correctly(self):
follow=True)
self.assertEqual(response.status_code, 200)

class TalkDeleteViewTests(TestCase):
def setUp(self):
self.talk_a = create_talk("Talk A", ACCEPTED, "author_a")
self.talk_s = create_talk("Talk S", SUBMITTED, "author_s")
self.talk_u = create_talk("Talk U", UNDER_CONSIDERATION, "author_u")
self.talk_p = create_talk("Talk P", PROVISIONAL, "author_p")
self.client = Client()

def test_delete_permissions_accepted(self):
self.client.login(username='author_a', password='author_a_password')
post_url = reverse('wafer_talk_withdraw', kwargs={'pk': self.talk_a.pk})
response = self.client.post(post_url)
self.assertEqual(response.status_code, 403)

def test_delete_permissions_provisionally_accepted(self):
self.client.login(username='author_p', password='author_p_password')
post_url = reverse('wafer_talk_withdraw', kwargs={'pk': self.talk_p.pk})
response = self.client.post(post_url)
self.assertEqual(response.status_code, 403)

def test_delete_other_talks_provisional(self):
self.client.login(username='author_p', password='author_p_password')
post_url = reverse('wafer_talk_withdraw', kwargs={'pk': self.talk_a.pk})
response = self.client.post(post_url)
self.assertEqual(response.status_code, 403)
post_url = reverse('wafer_talk_withdraw', kwargs={'pk': self.talk_s.pk})
response = self.client.post(post_url)
self.assertEqual(response.status_code, 403)
post_url = reverse('wafer_talk_withdraw', kwargs={'pk': self.talk_u.pk})
response = self.client.post(post_url)
self.assertEqual(response.status_code, 403)

def test_delete_other_talks_submitted(self):
self.client.login(username='author_s', password='author_s_password')
post_url = reverse('wafer_talk_withdraw', kwargs={'pk': self.talk_a.pk})
response = self.client.post(post_url)
self.assertEqual(response.status_code, 403)
post_url = reverse('wafer_talk_withdraw', kwargs={'pk': self.talk_p.pk})
response = self.client.post(post_url)
self.assertEqual(response.status_code, 403)
post_url = reverse('wafer_talk_withdraw', kwargs={'pk': self.talk_u.pk})
response = self.client.post(post_url)
self.assertEqual(response.status_code, 403)

def test_delete_is_withdraw_under_consideration(self):
self.client.login(username='author_u', password='author_u_password')
post_url = reverse('wafer_talk_withdraw', kwargs={'pk': self.talk_u.pk})
response = self.client.post(post_url)
self.assertEqual(response.status_code, 302)
self.talk_u.refresh_from_db()
self.assertEqual(self.talk_u.status, WITHDRAWN)

def test_delete_is_withdraw_submitted(self):
self.client.login(username='author_s', password='author_s_password')
post_url = reverse('wafer_talk_withdraw', kwargs={'pk': self.talk_s.pk})
response = self.client.post(post_url)
self.assertEqual(response.status_code, 302)
self.talk_s.refresh_from_db()
self.assertEqual(self.talk_s.status, WITHDRAWN)


class TalkNoteViewTests(TestCase):
def setUp(self):
Expand Down
13 changes: 11 additions & 2 deletions wafer/talks/views.py
Original file line number Diff line number Diff line change
Expand Up @@ -184,16 +184,25 @@ class TalkWithdraw(EditOwnTalksMixin, DeleteView):
template_name = 'wafer.talks/talk_withdraw.html'
success_url = reverse_lazy('wafer_page')


@revisions.create_revision()
def delete(self, request, *args, **kwargs):
"""Override delete to only withdraw"""
def withdraw_helper(self, request):
"""Handle the logic for withdrawing a talk"""
talk = self.get_object()
talk.status = WITHDRAWN
talk.save()
revisions.set_user(self.request.user)
revisions.set_comment("Talk Withdrawn")
return HttpResponseRedirect(self.success_url)

def delete(self, request, *args, **kwargs):
"""Override delete to only withdraw for Django < 4"""
return self.withdraw_helper(request)

def form_valid(self, request, *args, **kwargs):
"""Override delete to only withdraw for Django >= 4.0"""
return self.withdraw_helper(request)


class TalkReview(PermissionRequiredMixin, CreateView):
model = Review
Expand Down

0 comments on commit 72fd987

Please sign in to comment.