From ec3e247732055dafb46c38cd10cc4b469f8815aa Mon Sep 17 00:00:00 2001 From: Henrik Levkowetz Date: Sun, 28 Sep 2014 19:57:01 +0000 Subject: [PATCH] Merged in [8262] and [8263] from rjsparks@nostrum.com: Changes when returning_item is automatically set to match the current IESGs preferences. Removes several chunks of dead code related to editing telechat dates. Improves returning item tests. Refactored multiple edit_telechat functions into one function in doc_views. Added a helper function for determining if ballots have changed to isolate the implementation. Fixed the issue with update_agenda setting the returning item bit even when the user explicitly said not to. Added prompting to encourage proper setting of the returning item bit to the edit_telechat view. Fixes #1209 - Legacy-Id: 8369 Note: SVN reference [8262] has been migrated to Git commit 9d8d0d63e2338d6fa81a82c553b8c6a1c3a105c1 Note: SVN reference [8263] has been migrated to Git commit 35a7436b782fc45e224ac9ea29bfb535fd3ce959 --- ietf/doc/tests_ballot.py | 2 +- ietf/doc/tests_charter.py | 29 +++++++++++++ ietf/doc/tests_conflict_review.py | 14 +++--- ietf/doc/tests_draft.py | 23 +++++++++- ietf/doc/tests_status_change.py | 14 +++--- ietf/doc/urls.py | 2 +- ietf/doc/urls_charter.py | 2 +- ietf/doc/urls_conflict_review.py | 4 ++ ietf/doc/urls_status_change.py | 6 ++- ietf/doc/utils.py | 22 +++++++--- ietf/doc/utils_charter.py | 28 ------------ ietf/doc/views_charter.py | 46 +------------------- ietf/doc/views_conflict_review.py | 32 +------------- ietf/doc/views_doc.py | 50 +++++++++++++++++++++- ietf/doc/views_draft.py | 43 ------------------- ietf/doc/views_status_change.py | 32 +------------- ietf/templates/doc/edit_telechat_date.html | 7 +++ static/css/base2.css | 2 + 18 files changed, 157 insertions(+), 201 deletions(-) diff --git a/ietf/doc/tests_ballot.py b/ietf/doc/tests_ballot.py index 6799a5bcf..e4ba25e0e 100644 --- a/ietf/doc/tests_ballot.py +++ b/ietf/doc/tests_ballot.py @@ -475,7 +475,7 @@ class DeferUndeferTestCase(TestCase): self.assertEqual(r.status_code, 302) doc = Document.objects.get(name=name) self.assertEqual(doc.telechat_date(), second_date) - self.assertTrue(doc.returning_item()) + self.assertFalse(doc.returning_item()) defer_states = dict(draft=['draft-iesg','defer'],conflrev=['conflrev','defer'],statchg=['statchg','defer']) if doc.type_id in defer_states: self.assertEqual(doc.get_state(defer_states[doc.type_id][0]).slug,defer_states[doc.type_id][1]) diff --git a/ietf/doc/tests_charter.py b/ietf/doc/tests_charter.py index 3c7b58cb0..5e36e6da6 100644 --- a/ietf/doc/tests_charter.py +++ b/ietf/doc/tests_charter.py @@ -138,6 +138,35 @@ class EditCharterTests(TestCase): charter = Document.objects.get(name=charter.name) self.assertTrue(not charter.latest_event(TelechatDocEvent, "scheduled_for_telechat").telechat_date) + def test_no_returning_item_for_different_ballot(self): + make_test_data() + + group = Group.objects.get(acronym="ames") + charter = group.charter + url = urlreverse('charter_telechat_date', kwargs=dict(name=charter.name)) + login_testing_unauthorized(self, "secretary", url) + login = Person.objects.get(user__username="secretary") + + # Make it so that the charter has been through internal review, and passed its external review + # ballot on a previous telechat + last_week = datetime.date.today()-datetime.timedelta(days=7) + BallotDocEvent.objects.create(type='created_ballot',by=login,doc=charter, + ballot_type=BallotType.objects.get(doc_type=charter.type,slug='r-extrev'), + time=last_week) + TelechatDocEvent.objects.create(type='scheduled_for_telechat',doc=charter,by=login,telechat_date=last_week,returning_item=False) + BallotDocEvent.objects.create(type='created_ballot',by=login,doc=charter, + ballot_type=BallotType.objects.get(doc_type=charter.type,slug='approve')) + + # Put the charter onto a future telechat and verify returning item is not set + telechat_date = TelechatDate.objects.active()[1].date + r = self.client.post(url, dict(name=group.name, acronym=group.acronym, telechat_date=telechat_date.isoformat())) + self.assertEqual(r.status_code, 302) + + charter = Document.objects.get(name=charter.name) + telechat_event = charter.latest_event(TelechatDocEvent, "scheduled_for_telechat") + self.assertEqual(telechat_event.telechat_date, telechat_date) + self.assertFalse(telechat_event.returning_item) + def test_edit_notify(self): make_test_data() diff --git a/ietf/doc/tests_conflict_review.py b/ietf/doc/tests_conflict_review.py index 8f669c77f..63557550a 100644 --- a/ietf/doc/tests_conflict_review.py +++ b/ietf/doc/tests_conflict_review.py @@ -224,17 +224,11 @@ class ConflictReviewTests(TestCase): doc = Document.objects.get(name='conflict-review-imaginary-irtf-submission') self.assertEqual(doc.latest_event(TelechatDocEvent, "scheduled_for_telechat").telechat_date,telechat_date) - # move it forward a telechat (this should set the returning item bit) + # move it forward a telechat (this should NOT set the returning item bit) telechat_date = TelechatDate.objects.active().order_by('date')[1].date r = self.client.post(url,dict(telechat_date=telechat_date.isoformat())) self.assertEqual(r.status_code,302) doc = Document.objects.get(name='conflict-review-imaginary-irtf-submission') - self.assertTrue(doc.returning_item()) - - # clear the returning item bit - r = self.client.post(url,dict(telechat_date=telechat_date.isoformat())) - self.assertEqual(r.status_code,302) - doc = Document.objects.get(name='conflict-review-imaginary-irtf-submission') self.assertFalse(doc.returning_item()) # set the returning item bit without changing the date @@ -243,6 +237,12 @@ class ConflictReviewTests(TestCase): doc = Document.objects.get(name='conflict-review-imaginary-irtf-submission') self.assertTrue(doc.returning_item()) + # clear the returning item bit + r = self.client.post(url,dict(telechat_date=telechat_date.isoformat())) + self.assertEqual(r.status_code,302) + doc = Document.objects.get(name='conflict-review-imaginary-irtf-submission') + self.assertFalse(doc.returning_item()) + # Take the doc back off any telechat r = self.client.post(url,dict(telechat_date="")) self.assertEqual(r.status_code, 302) diff --git a/ietf/doc/tests_draft.py b/ietf/doc/tests_draft.py index 4bf91fb36..afc314256 100644 --- a/ietf/doc/tests_draft.py +++ b/ietf/doc/tests_draft.py @@ -10,7 +10,8 @@ from django.conf import settings import debug # pyflakes:ignore from ietf.doc.models import ( Document, DocAlias, DocReminder, DocumentAuthor, DocEvent, - ConsensusDocEvent, LastCallDocEvent, RelatedDocument, State, TelechatDocEvent, WriteupDocEvent ) + ConsensusDocEvent, LastCallDocEvent, RelatedDocument, State, TelechatDocEvent, + WriteupDocEvent, BallotDocEvent) from ietf.doc.utils import get_tags_for_stream_id from ietf.name.models import StreamName, IntendedStdLevelName, DocTagName from ietf.group.models import Group @@ -255,7 +256,25 @@ class EditInfoTests(TestCase): self.assertEqual(r.status_code, 302) draft = Document.objects.get(name=draft.name) - self.assertEqual(draft.latest_event(TelechatDocEvent, type="scheduled_for_telechat").telechat_date, TelechatDate.objects.active()[1].date) + telechat_event = draft.latest_event(TelechatDocEvent, type="scheduled_for_telechat") + self.assertEqual(telechat_event.telechat_date, TelechatDate.objects.active()[1].date) + self.assertFalse(telechat_event.returning_item) + + # change to a telechat that should cause returning item to be auto-detected + # First, make it appear that the previous telechat has already passed + telechat_event.telechat_date = datetime.date.today()-datetime.timedelta(days=7) + telechat_event.save() + ballot = draft.latest_event(BallotDocEvent, type="created_ballot") + ballot.time = telechat_event.telechat_date + ballot.save() + + r = self.client.post(url, data) + self.assertEqual(r.status_code, 302) + + draft = Document.objects.get(name=draft.name) + telechat_event = draft.latest_event(TelechatDocEvent, type="scheduled_for_telechat") + self.assertEqual(telechat_event.telechat_date, TelechatDate.objects.active()[1].date) + self.assertTrue(telechat_event.returning_item) # remove from agenda data["telechat_date"] = "" diff --git a/ietf/doc/tests_status_change.py b/ietf/doc/tests_status_change.py index 6d5b3c05f..0ca2768f7 100644 --- a/ietf/doc/tests_status_change.py +++ b/ietf/doc/tests_status_change.py @@ -204,17 +204,11 @@ class StatusChangeTests(TestCase): doc = Document.objects.get(name='status-change-imaginary-mid-review') self.assertEqual(doc.latest_event(TelechatDocEvent, "scheduled_for_telechat").telechat_date,telechat_date) - # move it forward a telechat (this should set the returning item bit) + # move it forward a telechat (this should NOT set the returning item bit) telechat_date = TelechatDate.objects.active().order_by('date')[1].date r = self.client.post(url,dict(telechat_date=telechat_date.isoformat())) self.assertEqual(r.status_code,302) doc = Document.objects.get(name='status-change-imaginary-mid-review') - self.assertTrue(doc.returning_item()) - - # clear the returning item bit - r = self.client.post(url,dict(telechat_date=telechat_date.isoformat())) - self.assertEqual(r.status_code,302) - doc = Document.objects.get(name='status-change-imaginary-mid-review') self.assertFalse(doc.returning_item()) # set the returning item bit without changing the date @@ -223,6 +217,12 @@ class StatusChangeTests(TestCase): doc = Document.objects.get(name='status-change-imaginary-mid-review') self.assertTrue(doc.returning_item()) + # clear the returning item bit + r = self.client.post(url,dict(telechat_date=telechat_date.isoformat())) + self.assertEqual(r.status_code,302) + doc = Document.objects.get(name='status-change-imaginary-mid-review') + self.assertFalse(doc.returning_item()) + # Take the doc back off any telechat r = self.client.post(url,dict(telechat_date="")) self.assertEqual(r.status_code, 302) diff --git a/ietf/doc/urls.py b/ietf/doc/urls.py index 8b7a253af..940307d2a 100644 --- a/ietf/doc/urls.py +++ b/ietf/doc/urls.py @@ -76,7 +76,7 @@ urlpatterns = patterns('', url(r'^(?P[A-Za-z0-9._+-]+)/edit/replaces/$', views_draft.replaces, name='doc_change_replaces'), url(r'^(?P[A-Za-z0-9._+-]+)/edit/notify/$', views_draft.edit_notices, name='doc_change_notify'), url(r'^(?P[A-Za-z0-9._+-]+)/edit/status/$', views_draft.change_intention, name='doc_change_intended_status'), - url(r'^(?P[A-Za-z0-9._+-]+)/edit/telechat/$', views_draft.telechat_date, name='doc_change_telechat_date'), + url(r'^(?P[A-Za-z0-9._+-]+)/edit/telechat/$', views_doc.telechat_date, name='doc_change_telechat_date'), url(r'^(?P[A-Za-z0-9._+-]+)/edit/iesgnote/$', views_draft.edit_iesg_note, name='doc_change_iesg_note'), url(r'^(?P[A-Za-z0-9._+-]+)/edit/ad/$', views_draft.edit_ad, name='doc_change_ad'), url(r'^(?P[A-Za-z0-9._+-]+)/edit/consensus/$', views_draft.edit_consensus, name='doc_edit_consensus'), diff --git a/ietf/doc/urls_charter.py b/ietf/doc/urls_charter.py index 7a0df28e9..372a4a1b1 100644 --- a/ietf/doc/urls_charter.py +++ b/ietf/doc/urls_charter.py @@ -5,7 +5,7 @@ from django.conf.urls import patterns, url urlpatterns = patterns('', url(r'^state/$', "ietf.doc.views_charter.change_state", name='charter_change_state'), url(r'^(?P