From ee346edabad5deadf06526d2c91b20f75bc63393 Mon Sep 17 00:00:00 2001 From: Robert Sparks Date: Wed, 25 Apr 2018 19:52:44 +0000 Subject: [PATCH] Corrected the implementation of clear_ballot. Added a test for it. Restored functionality to ballot popups that was missing because a template variable was not passed in. Commit ready for merge. - Legacy-Id: 15084 --- ietf/doc/tests_ballot.py | 17 +++++++++++++++++ ietf/doc/urls.py | 2 +- ietf/doc/views_ballot.py | 9 ++++----- ietf/doc/views_doc.py | 3 +++ ietf/templates/doc/ballot_popup.html | 2 +- ietf/templates/doc/document_ballot_content.html | 2 +- 6 files changed, 27 insertions(+), 8 deletions(-) diff --git a/ietf/doc/tests_ballot.py b/ietf/doc/tests_ballot.py index 1e2e53a5e..5894f52f9 100644 --- a/ietf/doc/tests_ballot.py +++ b/ietf/doc/tests_ballot.py @@ -644,6 +644,23 @@ class ApproveBallotTests(TestCase): self.assertEqual(len(outbox), mailbox_before + 1) self.assertTrue("NOT be published" in str(outbox[-1])) + def test_clear_ballot(self): + draft = make_test_data() + ad = Person.objects.get(user__username="ad") + ballot = create_ballot_if_not_open(None, draft, ad, 'approve') + old_ballot_id = ballot.id + draft.set_state(State.objects.get(used=True, type="draft-iesg", slug="iesg-eva")) + url = urlreverse('ietf.doc.views_ballot.clear_ballot', kwargs=dict(name=draft.name,ballot_type_slug=draft.ballot_open('approve').ballot_type.slug)) + login_testing_unauthorized(self, "secretary", url) + r = self.client.get(url) + self.assertEqual(r.status_code, 200) + r = self.client.post(url,{}) + self.assertEqual(r.status_code, 302) + ballot = draft.ballot_open('approve') + self.assertIsNotNone(ballot) + self.assertEqual(ballot.ballotpositiondocevent_set.count(),0) + self.assertNotEqual(old_ballot_id, ballot.id) + class MakeLastCallTests(TestCase): def test_make_last_call(self): draft = make_test_data() diff --git a/ietf/doc/urls.py b/ietf/doc/urls.py index 24df5944a..08c08f21e 100644 --- a/ietf/doc/urls.py +++ b/ietf/doc/urls.py @@ -108,7 +108,7 @@ urlpatterns = [ url(r'^%(name)s/edit/adopt/$' % settings.URL_REGEXPS, views_draft.adopt_draft), url(r'^%(name)s/edit/state/(?Pdraft-stream-[a-z]+)/$' % settings.URL_REGEXPS, views_draft.change_stream_state), - url(r'^%(name)s/edit/clearballot/$' % settings.URL_REGEXPS, views_ballot.clear_ballot), + url(r'^%(name)s/edit/clearballot/(?P[\w-]+)/$' % settings.URL_REGEXPS, views_ballot.clear_ballot), url(r'^%(name)s/edit/deferballot/$' % settings.URL_REGEXPS, views_ballot.defer_ballot), url(r'^%(name)s/edit/undeferballot/$' % settings.URL_REGEXPS, views_ballot.undefer_ballot), url(r'^%(name)s/edit/lastcalltext/$' % settings.URL_REGEXPS, views_ballot.lastcalltext), diff --git a/ietf/doc/views_ballot.py b/ietf/doc/views_ballot.py index 64b76e9ef..2a6da4ae6 100644 --- a/ietf/doc/views_ballot.py +++ b/ietf/doc/views_ballot.py @@ -16,7 +16,7 @@ from django.views.decorators.csrf import csrf_exempt import debug # pyflakes:ignore from ietf.doc.models import ( Document, State, DocEvent, BallotDocEvent, BallotPositionDocEvent, - BallotType, LastCallDocEvent, WriteupDocEvent, IESG_SUBSTATE_TAGS ) + LastCallDocEvent, WriteupDocEvent, IESG_SUBSTATE_TAGS ) from ietf.doc.utils import ( add_state_change_event, close_ballot, close_open_ballots, create_ballot_if_not_open, update_telechat ) from ietf.doc.mails import ( email_ballot_deferred, email_ballot_undeferred, @@ -381,14 +381,13 @@ def send_ballot_comment(request, name, ballot_id): )) @role_required('Area Director','Secretariat') -def clear_ballot(request, name): +def clear_ballot(request, name, ballot_type_slug): """Clear all positions and discusses on every open ballot for a document.""" doc = get_object_or_404(Document, name=name) if request.method == 'POST': by = request.user.person - for t in BallotType.objects.filter(doc_type=doc.type_id): - close_ballot(doc, by, t.slug) - create_ballot_if_not_open(request, doc, by, t.slug) + if close_ballot(doc, by, ballot_type_slug): + create_ballot_if_not_open(request, doc, by, ballot_type_slug) if doc.get_state('draft-iesg').slug == 'defer': do_undefer_ballot(request,doc) return redirect("ietf.doc.views_doc.document_main", name=doc.name) diff --git a/ietf/doc/views_doc.py b/ietf/doc/views_doc.py index 6b2f9c3ea..88dfddc87 100644 --- a/ietf/doc/views_doc.py +++ b/ietf/doc/views_doc.py @@ -964,10 +964,13 @@ def document_ballot(request, name, ballot_id=None): def ballot_popup(request, name, ballot_id): doc = get_object_or_404(Document, docalias__name=name) c = document_ballot_content(request, doc, ballot_id=ballot_id, editable=False) + ballot = get_object_or_404(BallotDocEvent,id=ballot_id) return render(request, "doc/ballot_popup.html", dict(doc=doc, ballot_content=c, ballot_id=ballot_id, + ballot_type_slug=ballot.ballot_type.slug, + editable=True, )) diff --git a/ietf/templates/doc/ballot_popup.html b/ietf/templates/doc/ballot_popup.html index d6f2ebe12..d783d5b23 100644 --- a/ietf/templates/doc/ballot_popup.html +++ b/ietf/templates/doc/ballot_popup.html @@ -38,7 +38,7 @@ {% endif %} {% if user|has_role:"Secretariat" %} - Clear ballot + Clear ballot {% endif %} {% endif %} {% endif %} diff --git a/ietf/templates/doc/document_ballot_content.html b/ietf/templates/doc/document_ballot_content.html index 0f394a63e..8b122a394 100644 --- a/ietf/templates/doc/document_ballot_content.html +++ b/ietf/templates/doc/document_ballot_content.html @@ -67,7 +67,7 @@ {% endif %} {% if user|has_role:"Area Director,Secretariat" %} - Clear ballot + Clear ballot {% endif %} {% endif %} {% endif %}