diff --git a/ietf/submit/tests.py b/ietf/submit/tests.py index a03852029..8e599facc 100644 --- a/ietf/submit/tests.py +++ b/ietf/submit/tests.py @@ -382,8 +382,35 @@ class SubmitTests(TestCase): draft = Document.objects.get(docalias__name=name) self.assertEqual(draft.rev, rev) self.assertEqual(draft.group.acronym, name.split("-")[2]) - self.assertEqual(draft.docevent_set.all()[1].type, "new_revision") - self.assertEqual(draft.docevent_set.all()[1].by.name, "Submitter Name") + # + docevents = list(draft.docevent_set.all().order_by("-time", "-id")) + # Latest events are first (this is the default, but we make it explicit) + # Assert event content in chronological order: + self.assertEqual(docevents[4].type, "added_comment") + self.assertIn("Uploaded new revision", docevents[4].desc) + self.assertEqual(docevents[4].by.name, "Submitter Name") + self.assertGreater(docevents[4].id, docevents[5].id) + # + self.assertEqual(docevents[3].type, "added_comment") + self.assertIn("Request for posting confirmation", docevents[3].desc) + self.assertEqual(docevents[3].by.name, "(System)") + self.assertGreater(docevents[3].id, docevents[4].id) + # + self.assertEqual(docevents[2].type, "added_comment") + self.assertIn("New version approved", docevents[2].desc) + self.assertEqual(docevents[2].by.name, "(System)") + self.assertGreater(docevents[2].id, docevents[3].id) + # + self.assertEqual(docevents[1].type, "new_revision") + self.assertIn("New version available", docevents[1].desc) + self.assertEqual(docevents[1].by.name, "Submitter Name") + self.assertGreater(docevents[1].id, docevents[2].id) + # + self.assertEqual(docevents[0].type, "changed_state") + self.assertIn("IANA Review", docevents[0].desc) + self.assertEqual(docevents[0].by.name, "(System)") + self.assertGreater(docevents[0].id, docevents[1].id) + # self.assertTrue(not os.path.exists(os.path.join(self.repository_dir, "%s-%s.txt" % (name, old_rev)))) self.assertTrue(os.path.exists(os.path.join(self.archive_dir, "%s-%s.txt" % (name, old_rev)))) self.assertTrue(not os.path.exists(os.path.join(self.staging_dir, u"%s-%s.txt" % (name, rev)))) diff --git a/ietf/submit/utils.py b/ietf/submit/utils.py index 07eab6120..f443f32b7 100644 --- a/ietf/submit/utils.py +++ b/ietf/submit/utils.py @@ -111,8 +111,7 @@ def create_submission_event(request, submission, desc): SubmissionEvent.objects.create(submission=submission, by=by, desc=desc) - -def docevent_from_submission(request, submission, desc): +def docevent_from_submission(request, submission, desc, who=None): system = Person.objects.get(name="(System)") try: @@ -121,18 +120,22 @@ def docevent_from_submission(request, submission, desc): # Assume this is revision 00 - we'll do this later return - submitter_parsed = submission.submitter_parsed() - if submitter_parsed["name"] and submitter_parsed["email"]: - submitter = ensure_person_email_info_exists(submitter_parsed["name"], submitter_parsed["email"]).person + if who: + by = Person.objects.get(name=who) else: - submitter = system - - e = DocEvent(doc=draft) - e.by = submitter - e.type = "added_comment" - e.desc = desc - e.save() + submitter_parsed = submission.submitter_parsed() + if submitter_parsed["name"] and submitter_parsed["email"]: + by = ensure_person_email_info_exists(submitter_parsed["name"], submitter_parsed["email"]).person + else: + by = system + e = DocEvent.objects.create( + doc=draft, + by = by, + type = "added_comment", + desc = desc, + ) + return e def post_rev00_submission_events(draft, submission, submitter): # Add previous submission events as docevents @@ -213,6 +216,19 @@ def post_submission(request, submission, approvedDesc): events = [] + if draft.rev == '00': + # Add all the previous submission events as docevents + post_rev00_submission_events(draft, submission, submitter) + + # Add an approval docevent + e = DocEvent.objects.create( + type="added_comment", + doc=draft, + by=system, + desc=approvedDesc + ) + events.append(e) + # new revision event e = NewRevisionDocEvent.objects.create( type="new_revision", @@ -234,33 +250,16 @@ def post_submission(request, submission, approvedDesc): if trouble: log('Rebuild_reference_relations trouble: %s'%trouble) - if draft.rev == '00': - # Add all the previous submission events as docevents - post_rev00_submission_events(draft, submission, submitter) - - # Add an approval docevent - e = DocEvent(type="added_comment", doc=draft) - e.time = draft.time #submission.submission_date - e.by = submitter - e.desc = approvedDesc - e.save() - - # new revision event - e = NewRevisionDocEvent(type="new_revision", doc=draft, rev=draft.rev) - e.time = draft.time #submission.submission_date - e.by = submitter - e.desc = "New version available: %s-%s.txt" % (draft.name, draft.rev) - e.save() - if draft.stream_id == "ietf" and draft.group.type_id == "wg" and draft.rev == "00": # automatically set state "WG Document" draft.set_state(State.objects.get(used=True, type="draft-stream-%s" % draft.stream_id, slug="wg-doc")) + # automatic state changes for IANA review if draft.get_state_slug("draft-iana-review") in ("ok-act", "ok-noact", "not-ok"): prev_state = draft.get_state("draft-iana-review") next_state = State.objects.get(used=True, type="draft-iana-review", slug="changed") draft.set_state(next_state) - e = add_state_change_event(draft, submitter, prev_state, next_state) + e = add_state_change_event(draft, system, prev_state, next_state) if e: events.append(e) diff --git a/ietf/submit/views.py b/ietf/submit/views.py index ec09f56fc..bf8f03e08 100644 --- a/ietf/submit/views.py +++ b/ietf/submit/views.py @@ -314,10 +314,14 @@ def submission_status(request, submission_id, access_token=None): return HttpResponseForbidden('You do not have permission to perform this action') # go directly to posting submission + docevent_from_submission(request, submission, desc="Uploaded new revision") + desc = u"Secretariat manually posting. Approvals already received" post_submission(request, submission, desc) create_submission_event(request, submission, desc) else: + docevent_from_submission(request, submission, desc="Uploaded new revision") + if requires_group_approval: submission.state = DraftSubmissionStateName.objects.get(slug="grp-appr") submission.save() @@ -349,7 +353,7 @@ def submission_status(request, submission_id, access_token=None): ", ".join(prettify_std_name(r.name) for r in replaces) if replaces else "(none)", desc) create_submission_event(request, submission, msg) - docevent_from_submission(request, submission, docDesc) + docevent_from_submission(request, submission, docDesc, who="(System)") if access_token: return redirect("ietf.submit.views.submission_status", submission_id=submission.pk, access_token=access_token)