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
This commit is contained in:
Robert Sparks 2015-11-17 04:33:35 +00:00
parent 7e08303c33
commit 5a591bb263
2 changed files with 35 additions and 1 deletions

View file

@ -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()

View file

@ -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)