From 1d9e9e7745c03f28a36a25c4a8fbf7f43fb77647 Mon Sep 17 00:00:00 2001
From: Henrik Levkowetz <henrik@levkowetz.com>
Date: Wed, 16 Apr 2014 18:45:55 +0000
Subject: [PATCH] Merged [7589] from rjsparks@nostrum.com: Functional changes
 allowing consensus to be set back to Unknown. Fixes ticket #1150.  -
 Legacy-Id: 7611 Note: SVN reference [7589] has been migrated to Git commit
 7fb3e913e5377aa4e38c369aeefe2449e07e3c4e

---
 ietf/doc/tests_draft.py |  6 ++++++
 ietf/doc/views_draft.py | 10 +++++-----
 ietf/iesg/agenda.py     |  2 +-
 3 files changed, 12 insertions(+), 6 deletions(-)

diff --git a/ietf/doc/tests_draft.py b/ietf/doc/tests_draft.py
index 85f63cf8f..4bf91fb36 100644
--- a/ietf/doc/tests_draft.py
+++ b/ietf/doc/tests_draft.py
@@ -365,6 +365,12 @@ class EditInfoTests(TestCase):
 
         self.assertEqual(draft.latest_event(ConsensusDocEvent, type="changed_consensus").consensus, True)
 
+        # reset
+        r = self.client.post(url, dict(consensus="Unknown"))
+        self.assertEqual(r.status_code, 302)
+
+        self.assertEqual(draft.latest_event(ConsensusDocEvent, type="changed_consensus").consensus, None)
+
 
 class ResurrectTests(TestCase):
     def test_request_resurrect(self):
diff --git a/ietf/doc/views_draft.py b/ietf/doc/views_draft.py
index 33128ae07..bc47e441e 100644
--- a/ietf/doc/views_draft.py
+++ b/ietf/doc/views_draft.py
@@ -1139,7 +1139,7 @@ def edit_ad(request, name):
                               context_instance = RequestContext(request))
 
 class ConsensusForm(forms.Form):
-    consensus = forms.ChoiceField(choices=(("", "Unknown"), ("Yes", "Yes"), ("No", "No")), required=True)
+    consensus = forms.ChoiceField(choices=(("Unknown", "Unknown"), ("Yes", "Yes"), ("No", "No")), required=True)
 
 def edit_consensus(request, name):
     """Change whether the draft is a consensus document or not."""
@@ -1156,9 +1156,9 @@ def edit_consensus(request, name):
     if request.method == 'POST':
         form = ConsensusForm(request.POST)
         if form.is_valid():
-            if form.cleaned_data["consensus"] != bool(prev_consensus):
+            if form.cleaned_data["consensus"] != prev_consensus:
                 e = ConsensusDocEvent(doc=doc, type="changed_consensus", by=request.user.person)
-                e.consensus = form.cleaned_data["consensus"] == "Yes"
+                e.consensus = {"Unknown":None,"Yes":True,"No":False}[form.cleaned_data["consensus"]]
 
                 e.desc = "Changed consensus to <b>%s</b> from %s" % (nice_consensus(e.consensus),
                                                                      nice_consensus(prev_consensus))
@@ -1168,7 +1168,7 @@ def edit_consensus(request, name):
             return redirect('doc_view', name=doc.name)
 
     else:
-        form = ConsensusForm(initial=dict(consensus=nice_consensus(prev_consensus).replace("Unknown", "")))
+        form = ConsensusForm(initial=dict(consensus=nice_consensus(prev_consensus)))
 
     return render_to_response('doc/draft/change_consensus.html',
                               {'form': form,
@@ -1260,7 +1260,7 @@ def request_publication(request, name):
                                    doc=doc,
                                    message=m,
                                    next_state=next_state,
-                                   consensus_filled_in=consensus_event != None,
+                                   consensus_filled_in= ( (consensus_event != None) and (consensus_event.consensus != None) ),
                                    ),
                               context_instance = RequestContext(request))
 
diff --git a/ietf/iesg/agenda.py b/ietf/iesg/agenda.py
index 0c4734964..ade06bc02 100644
--- a/ietf/iesg/agenda.py
+++ b/ietf/iesg/agenda.py
@@ -172,7 +172,7 @@ def fill_in_agenda_docs(date, sections, matches=None):
             if doc.stream_id in ("ietf", "irtf", "iab"):
                 doc.consensus = "Unknown"
                 e = doc.latest_event(ConsensusDocEvent, type="changed_consensus")
-                if e:
+                if e and (e.consensus != None):
                     doc.consensus = "Yes" if e.consensus else "No"
         elif doc.type_id == "conflrev":
             doc.conflictdoc = doc.relateddocument_set.get(relationship__slug='conflrev').target.document