Skip to content

Commit 29d1a0b

Browse files
committed
Merged in [18533] from rjsparks@nostrum.com:
Replaced review name collision resolution code with a decision to not save when it occurs. Fixes ietf-tools#3092. - Legacy-Id: 18559 Note: SVN reference [18533] has been migrated to Git commit 0ff5172
1 parent 1a7aa21 commit 29d1a0b

2 files changed

Lines changed: 29 additions & 59 deletions

File tree

ietf/doc/tests_review.py

Lines changed: 0 additions & 31 deletions
Original file line numberDiff line numberDiff line change
@@ -894,8 +894,6 @@ def test_partially_complete_review(self):
894894
})
895895
self.assertEqual(r.status_code, 302)
896896

897-
898-
899897
assignment = reload_db_objects(assignment)
900898
self.assertEqual(assignment.state_id, "part-completed")
901899
self.assertTrue(assignment.review_request.doc.rev in assignment.review.name)
@@ -915,35 +913,6 @@ def test_partially_complete_review(self):
915913
self.assertTrue(not any( len(line) > 100 for line in body.splitlines() ))
916914
self.assertTrue(any( len(line) > 80 for line in body.splitlines() ))
917915

918-
first_review = assignment.review
919-
920-
# complete
921-
assignment = assignment.review_request.reviewassignment_set.create(state_id="assigned", reviewer=assignment.reviewer)
922-
923-
url = urlreverse('ietf.doc.views_review.complete_review', kwargs={ "name": assignment.review_request.doc.name, "assignment_id": assignment.pk })
924-
925-
r = self.client.post(url, data={
926-
"result": ReviewResultName.objects.get(reviewteamsettings_review_results_set__group=assignment.review_request.team, slug="ready").pk,
927-
"state": ReviewAssignmentStateName.objects.get(slug="completed").pk,
928-
"reviewed_rev": assignment.review_request.doc.rev,
929-
"review_submission": "enter",
930-
"review_content": "This is another review with a really, really, really, really, really, really, really, really, really, really long line.",
931-
})
932-
self.assertEqual(r.status_code, 302)
933-
934-
assignment = reload_db_objects(assignment)
935-
self.assertEqual(assignment.state_id, "completed")
936-
self.assertTrue(assignment.review_request.doc.rev in assignment.review.name)
937-
second_review = assignment.review
938-
self.assertTrue(first_review.name != second_review.name)
939-
self.assertTrue(second_review.name.endswith("-2")) # uniquified
940-
941-
# This review has a line longer than 100; it should be wrapped to less
942-
# than 80.
943-
body = get_payload_text(outbox[2])
944-
self.assertIn('really, really, really', body)
945-
self.assertTrue(all( len(line) <= 80 for line in body.splitlines() ))
946-
947916

948917
def test_revise_review_enter_content(self):
949918
assignment, url = self.setup_complete_review_test()

ietf/doc/views_review.py

Lines changed: 29 additions & 28 deletions
Original file line numberDiff line numberDiff line change
@@ -19,6 +19,7 @@
1919
from django.shortcuts import render, get_object_or_404, redirect
2020
from django import forms
2121
from django.conf import settings
22+
from django.contrib import messages
2223
from django.contrib.auth.decorators import login_required
2324
from django.utils.html import mark_safe # type:ignore
2425
from django.core.exceptions import ValidationError
@@ -28,7 +29,7 @@
2829
from ietf.doc.models import (Document, NewRevisionDocEvent, State, DocAlias,
2930
LastCallDocEvent, ReviewRequestDocEvent, ReviewAssignmentDocEvent, DocumentAuthor)
3031
from ietf.name.models import (ReviewRequestStateName, ReviewAssignmentStateName, ReviewResultName,
31-
DocTypeName, ReviewTypeName)
32+
ReviewTypeName)
3233
from ietf.person.models import Person
3334
from ietf.review.models import ReviewRequest, ReviewAssignment, ReviewWish
3435
from ietf.group.models import Group
@@ -655,6 +656,7 @@ def complete_review(request, name, assignment_id=None, acronym=None):
655656
team = assignment.review_request.team
656657
team_acronym = assignment.review_request.team.acronym.lower()
657658
request_type = assignment.review_request.type
659+
reviewer = assignment.reviewer
658660
mailtrigger_slug = 'review_completed_{}_{}'.format(team_acronym, request_type.slug)
659661
# Description is only used if the mailtrigger does not exist yet.
660662
mailtrigger_desc = 'Recipients when a {} {} review is completed'.format(team_acronym, request_type)
@@ -679,7 +681,31 @@ def complete_review(request, name, assignment_id=None, acronym=None):
679681
request.POST, request.FILES)
680682
if form.is_valid():
681683
review_submission = form.cleaned_data['review_submission']
682-
684+
if not assignment:
685+
request_type = form.cleaned_data['review_type']
686+
reviewer = form.cleaned_data['reviewer'].role_email('reviewer',group=team)
687+
688+
if assignment and assignment.review:
689+
review = assignment.review
690+
else:
691+
# create review doc
692+
name_components = [
693+
"review",
694+
strip_prefix(doc.name, "draft-"),
695+
form.cleaned_data["reviewed_rev"],
696+
team.acronym,
697+
request_type.slug,
698+
xslugify(reviewer.person.ascii_parts()[3]),
699+
datetime.date.today().isoformat(),
700+
]
701+
review_name = "-".join(c for c in name_components if c).lower()
702+
if not Document.objects.filter(name=review_name).exists():
703+
review = Document.objects.create(name=review_name,type_id='review',group=team)
704+
DocAlias.objects.create(name=review_name).docs.add(review)
705+
else:
706+
messages.warning(message='Attempt to save review failed: review document already exists. This most likely occurred because the review was submitted twice in quick succession. If you intended to submit a new review, rather than update an existing one, things are probably OK. Please verify that the shown review is what you expected.')
707+
return redirect("ietf.doc.views_doc.document_main", name=review_name)
708+
683709
if not assignment:
684710
# If this is an unsolicited review, create a new request and assignment.
685711
# The assignment will be immediately closed after, sharing the usual
@@ -698,33 +724,8 @@ def complete_review(request, name, assignment_id=None, acronym=None):
698724
state_id='assigned',
699725
reviewer=form.cleaned_data['reviewer'].role_email('reviewer', group=team),
700726
assigned_on=datetime.datetime.now(),
727+
review = review,
701728
)
702-
request_type = form.cleaned_data['review_type']
703-
704-
review = assignment.review
705-
if not review:
706-
# create review doc
707-
for i in range(1, 100):
708-
name_components = [
709-
"review",
710-
strip_prefix(assignment.review_request.doc.name, "draft-"),
711-
form.cleaned_data["reviewed_rev"],
712-
assignment.review_request.team.acronym,
713-
request_type.slug,
714-
xslugify(assignment.reviewer.person.ascii_parts()[3]),
715-
datetime.date.today().isoformat(),
716-
]
717-
if i > 1:
718-
name_components.append(str(i))
719-
720-
name = "-".join(c for c in name_components if c).lower()
721-
if not Document.objects.filter(name=name).exists():
722-
review = Document.objects.create(name=name)
723-
DocAlias.objects.create(name=review.name).docs.add(review)
724-
break
725-
726-
review.type = DocTypeName.objects.get(slug="review")
727-
review.group = assignment.review_request.team
728729

729730
review.rev = "00" if not review.rev else "{:02}".format(int(review.rev) + 1)
730731
review.title = "{} Review of {}-{}".format(assignment.review_request.type.name, assignment.review_request.doc.name, form.cleaned_data["reviewed_rev"])

0 commit comments

Comments
 (0)