diff --git a/ietf/doc/tests_ballot.py b/ietf/doc/tests_ballot.py index 3c06ff873..dcd383303 100644 --- a/ietf/doc/tests_ballot.py +++ b/ietf/doc/tests_ballot.py @@ -1,8 +1,10 @@ -#ad Copyright The IETF Trust 2013-2019, All Rights Reserved +# Copyright The IETF Trust 2013-2020, All Rights Reserved # -*- coding: utf-8 -*- import datetime +import mock + from pyquery import PyQuery import debug # pyflakes:ignore @@ -617,7 +619,11 @@ class BallotWriteupsTests(TestCase): verify_can_see(username, url) class ApproveBallotTests(TestCase): - def test_approve_ballot(self): + @mock.patch('ietf.sync.rfceditor.urlopen', autospec=True) + def test_approve_ballot(self, mock_urlopen): + mock_urlopen.return_value.read = lambda :'OK' + mock_urlopen.return_value.getcode = lambda :200 + # ad = Person.objects.get(name="AreaĆ° Irector") draft = IndividualDraftFactory(ad=ad, intended_std_level_id='ps') draft.set_state(State.objects.get(used=True, type="draft-iesg", slug="iesg-eva")) # make sure it's approvable @@ -651,7 +657,7 @@ class ApproveBallotTests(TestCase): # approve mailbox_before = len(outbox) - r = self.client.post(url, dict(skiprfceditorpost="1")) + r = self.client.post(url) self.assertEqual(r.status_code, 302) draft = Document.objects.get(name=draft.name) diff --git a/ietf/doc/tests_draft.py b/ietf/doc/tests_draft.py index 7ce34e7d0..2dd037ef0 100644 --- a/ietf/doc/tests_draft.py +++ b/ietf/doc/tests_draft.py @@ -1,4 +1,4 @@ -# Copyright The IETF Trust 2011-2019, All Rights Reserved +# Copyright The IETF Trust 2011-2020, All Rights Reserved # -*- coding: utf-8 -*- @@ -8,8 +8,10 @@ import os import shutil import datetime import io -from pyquery import PyQuery +import mock + from collections import Counter +from pyquery import PyQuery from django.urls import reverse as urlreverse from django.conf import settings @@ -1197,7 +1199,11 @@ class SubmitToIesgTests(TestCase): class RequestPublicationTests(TestCase): - def test_request_publication(self): + @mock.patch('ietf.sync.rfceditor.urlopen', autospec=True) + def test_request_publication(self, mock_urlopen): + mock_urlopen.return_value.read = lambda :'OK' + mock_urlopen.return_value.getcode = lambda :200 + # draft = IndividualDraftFactory(stream_id='iab',group__acronym='iab',intended_std_level_id='inf',states=[('draft-stream-iab','approved')]) url = urlreverse('ietf.doc.views_draft.request_publication', kwargs=dict(name=draft.name)) @@ -1216,7 +1222,7 @@ class RequestPublicationTests(TestCase): # approve mailbox_before = len(outbox) - r = self.client.post(url, dict(subject=subject, body=body, skiprfceditorpost="1")) + r = self.client.post(url, dict(subject=subject, body=body)) self.assertEqual(r.status_code, 302) draft = Document.objects.get(name=draft.name) diff --git a/ietf/doc/views_ballot.py b/ietf/doc/views_ballot.py index e45020ac3..1722aab30 100644 --- a/ietf/doc/views_ballot.py +++ b/ietf/doc/views_ballot.py @@ -1,4 +1,4 @@ -# Copyright The IETF Trust 2010-2019, All Rights Reserved +# Copyright The IETF Trust 2010-2020, All Rights Reserved # -*- coding: utf-8 -*- # ballot management (voting, commenting, writeups, ...) for Area # Directors and Secretariat @@ -851,7 +851,7 @@ def approve_ballot(request, name): if ballot_writeup_event.pk == None: ballot_writeup_event.save() - if new_state.slug == "ann" and new_state.slug != prev_state.slug and not request.POST.get("skiprfceditorpost"): + if new_state.slug == "ann" and new_state.slug != prev_state.slug: # start by notifying the RFC Editor import ietf.sync.rfceditor response, error = ietf.sync.rfceditor.post_approved_draft(settings.RFC_EDITOR_SYNC_NOTIFICATION_URL, doc.name) diff --git a/ietf/doc/views_draft.py b/ietf/doc/views_draft.py index d99e8ccdd..415973d3d 100644 --- a/ietf/doc/views_draft.py +++ b/ietf/doc/views_draft.py @@ -1282,15 +1282,14 @@ def request_publication(request, name): if form.is_valid(): events = [] - if not request.POST.get("skiprfceditorpost"): - # start by notifying the RFC Editor - import ietf.sync.rfceditor - response, error = ietf.sync.rfceditor.post_approved_draft(settings.RFC_EDITOR_SYNC_NOTIFICATION_URL, doc.name) - if error: - return render(request, 'doc/draft/rfceditor_post_approved_draft_failed.html', - dict(name=doc.name, - response=response, - error=error)) + # start by notifying the RFC Editor + import ietf.sync.rfceditor + response, error = ietf.sync.rfceditor.post_approved_draft(settings.RFC_EDITOR_SYNC_NOTIFICATION_URL, doc.name) + if error: + return render(request, 'doc/draft/rfceditor_post_approved_draft_failed.html', + dict(name=doc.name, + response=response, + error=error)) m.subject = form.cleaned_data["subject"] m.body = form.cleaned_data["body"] diff --git a/ietf/settings.py b/ietf/settings.py index 8465dc994..d38204b33 100644 --- a/ietf/settings.py +++ b/ietf/settings.py @@ -35,7 +35,7 @@ warnings.filterwarnings("ignore", message="'U' mode is deprecated", module="docu warnings.filterwarnings("ignore", message="'U' mode is deprecated", module="xml2rfc") warnings.filterwarnings("ignore", message="'U' mode is deprecated", module="site") warnings.filterwarnings("ignore", message="Flags not at the start of the expression", module="genshi") - +warnings.filterwarnings("ignore", message="encodestring\(\) is a deprecated alias since 3.1, use encodebytes\(\)") try: import syslog diff --git a/ietf/sync/rfceditor.py b/ietf/sync/rfceditor.py index e14890df4..8dd3a758a 100644 --- a/ietf/sync/rfceditor.py +++ b/ietf/sync/rfceditor.py @@ -546,13 +546,10 @@ def post_approved_draft(url, name): password = settings.RFC_EDITOR_SYNC_PASSWORD request.add_header("Authorization", "Basic %s" % force_str(base64.encodestring(smart_bytes("%s:%s" % (username, password)))).replace("\n", "")) - if settings.SERVER_MODE != "production": - return ("OK", "") - log("Posting RFC-Editor notifcation of approved draft '%s' to '%s'" % (name, url)) text = error = "" try: - f = urlopen(request, data=urlencode({ 'draft': name }), timeout=20) + f = urlopen(request, data=smart_bytes(urlencode({ 'draft': name })), timeout=20) text = f.read() status_code = f.getcode() f.close() @@ -567,7 +564,10 @@ def post_approved_draft(url, name): except Exception as e: # catch everything so we don't leak exceptions, convert them # into string instead - log("Exception on RFC-Editor notification for draft '%s': '%s'" % (name, e)) + msg = "Exception on RFC-Editor notification for draft '%s': '%s'" % (name, e) + log(msg) + if settings.SERVER_MODE == 'test': + debug.say(msg) error = six.text_type(e) return text, error