From 5a591bb263674482a9e7a214794700b24de97ae1 Mon Sep 17 00:00:00 2001 From: Robert Sparks Date: Tue, 17 Nov 2015 04:33:35 +0000 Subject: [PATCH] Allow setting the stream state of a document that has not yet had any stream state set. Fixes #1859. Commit ready for merge. Candidate for patch. - Legacy-Id: 10503 --- ietf/doc/tests_draft.py | 34 ++++++++++++++++++++++++++++++++++ ietf/doc/views_draft.py | 2 +- 2 files changed, 35 insertions(+), 1 deletion(-) diff --git a/ietf/doc/tests_draft.py b/ietf/doc/tests_draft.py index 360145378..18372d313 100644 --- a/ietf/doc/tests_draft.py +++ b/ietf/doc/tests_draft.py @@ -1189,6 +1189,40 @@ class ChangeStreamStateTests(TestCase): self.assertTrue("marsdelegate@ietf.org" in unicode(outbox[-1])) self.assertTrue("plain@example.com" in unicode(outbox[-1])) + def test_set_initial_state(self): + draft = make_test_data() + draft.unset_state("draft-stream-%s"%draft.stream_id) + + url = urlreverse('doc_change_stream_state', kwargs=dict(name=draft.name, state_type="draft-stream-ietf")) + login_testing_unauthorized(self, "marschairman", url) + + # set a state when no state exists + old_state = draft.get_state("draft-stream-%s" % draft.stream_id ) + self.assertEqual(old_state,None) + new_state = State.objects.get(used=True, type="draft-stream-%s" % draft.stream_id, slug="parked") + empty_outbox() + events_before = draft.docevent_set.count() + + r = self.client.post(url, + dict(new_state=new_state.pk, + comment="some comment", + weeks="10", + tags=[t.pk for t in draft.tags.filter(slug__in=get_tags_for_stream_id(draft.stream_id))], + )) + self.assertEqual(r.status_code, 302) + + draft = Document.objects.get(pk=draft.pk) + self.assertEqual(draft.get_state("draft-stream-%s" % draft.stream_id), new_state) + self.assertEqual(draft.docevent_set.count() - events_before, 2) + reminder = DocReminder.objects.filter(event__doc=draft, type="stream-s") + self.assertEqual(len(reminder), 1) + due = datetime.datetime.now() + datetime.timedelta(weeks=10) + self.assertTrue(due - datetime.timedelta(days=1) <= reminder[0].due <= due + datetime.timedelta(days=1)) + self.assertEqual(len(outbox), 1) + self.assertTrue("state changed" in outbox[0]["Subject"].lower()) + self.assertTrue("mars-chairs@ietf.org" in unicode(outbox[0])) + self.assertTrue("marsdelegate@ietf.org" in unicode(outbox[0])) + def test_set_state(self): draft = make_test_data() diff --git a/ietf/doc/views_draft.py b/ietf/doc/views_draft.py index 662846a03..b3b6034b4 100644 --- a/ietf/doc/views_draft.py +++ b/ietf/doc/views_draft.py @@ -1393,7 +1393,7 @@ def change_stream_state(request, name, state_type): prev_state = doc.get_state(state_type.slug) next_states = next_states_for_stream_state(doc, state_type, prev_state) - can_set_sub_pub = has_role(request.user,('Secretariat','Area Director')) or prev_state.slug=='sub-pub' + can_set_sub_pub = has_role(request.user,('Secretariat','Area Director')) or (prev_state and prev_state.slug=='sub-pub') if request.method == 'POST': form = ChangeStreamStateForm(request.POST, doc=doc, state_type=state_type,can_set_sub_pub=can_set_sub_pub,stream=doc.stream)