Removed the creation of duplicate new revision doc events. Corrected the timestamp on approval docevents. Changed where the submission upload docevent is created, to avoid spurious events for cancelled uploads. Adjusted the person associated with some events from submitter to (System). Added tests for the sequence of events associated with a submission.

- Legacy-Id: 12072
This commit is contained in:
Henrik Levkowetz 2016-10-01 21:16:04 +00:00
parent a9f879cd0e
commit 72cfe4cf68
3 changed files with 64 additions and 34 deletions

View file

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

View file

@ -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: <b>%s-%s.txt</b>" % (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)

View file

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