Fix #2071 - Add optional comment field for close request. Commit ready for merge.
- Legacy-Id: 16667
This commit is contained in:
parent
ce3368db82
commit
4669b0934b
|
@ -205,7 +205,8 @@ class ReviewTests(TestCase):
|
|||
|
||||
# close
|
||||
empty_outbox()
|
||||
r = self.client.post(close_url, { "close_reason": "withdrawn" })
|
||||
r = self.client.post(close_url, {"close_reason": "withdrawn",
|
||||
"close_comment": "review_request_close_comment"})
|
||||
self.assertEqual(r.status_code, 302)
|
||||
|
||||
review_req = reload_db_objects(review_req)
|
||||
|
@ -214,13 +215,17 @@ class ReviewTests(TestCase):
|
|||
e = doc.latest_event(ReviewRequestDocEvent)
|
||||
self.assertEqual(e.type, "closed_review_request")
|
||||
self.assertTrue("closed" in e.desc.lower())
|
||||
self.assertTrue("review_request_close_comment" in e.desc.lower())
|
||||
|
||||
e = doc.latest_event(ReviewAssignmentDocEvent)
|
||||
self.assertEqual(e.type, "closed_review_assignment")
|
||||
self.assertTrue("closed" in e.desc.lower())
|
||||
self.assertFalse("review_request_close_comment" in e.desc.lower())
|
||||
|
||||
self.assertEqual(len(outbox), 1)
|
||||
self.assertTrue("closed" in outbox[0].get_payload(decode=True).decode("utf-8").lower())
|
||||
mail_content = outbox[0].get_payload(decode=True).decode("utf-8").lower()
|
||||
self.assertTrue("closed" in mail_content)
|
||||
self.assertTrue("review_request_close_comment" in mail_content)
|
||||
|
||||
def test_possibly_advance_next_reviewer_for_team(self):
|
||||
|
||||
|
|
|
@ -236,6 +236,7 @@ def review_request(request, name, request_id):
|
|||
|
||||
class CloseReviewRequestForm(forms.Form):
|
||||
close_reason = forms.ModelChoiceField(queryset=close_review_request_states(), widget=forms.RadioSelect, empty_label=None)
|
||||
close_comment = forms.CharField(label='Comment (optional)', max_length=255, required=False)
|
||||
|
||||
def __init__(self, can_manage_request, *args, **kwargs):
|
||||
super(CloseReviewRequestForm, self).__init__(*args, **kwargs)
|
||||
|
@ -262,7 +263,8 @@ def close_request(request, name, request_id):
|
|||
if request.method == "POST":
|
||||
form = CloseReviewRequestForm(can_manage_request, request.POST)
|
||||
if form.is_valid():
|
||||
close_review_request(request, review_req, form.cleaned_data["close_reason"])
|
||||
close_review_request(request, review_req,form.cleaned_data["close_reason"],
|
||||
form.cleaned_data["close_comment"])
|
||||
|
||||
return redirect(review_request, name=review_req.doc.name, request_id=review_req.pk)
|
||||
else:
|
||||
|
|
|
@ -231,6 +231,7 @@ class ManageReviewRequestForm(forms.Form):
|
|||
|
||||
action = forms.ChoiceField(choices=ACTIONS, widget=forms.HiddenInput, required=False)
|
||||
close = forms.ModelChoiceField(queryset=close_review_request_states(), required=False)
|
||||
close_comment = forms.CharField(max_length=255, required=False)
|
||||
reviewer = PersonEmailChoiceField(empty_label="(None)", required=False, label_with="person")
|
||||
add_skip = forms.BooleanField(required=False)
|
||||
|
||||
|
|
|
@ -1508,7 +1508,8 @@ def manage_review_requests(request, acronym, group_type=None, assignment_status=
|
|||
for review_req in review_requests:
|
||||
action = review_req.form.cleaned_data.get("action")
|
||||
if action=="close":
|
||||
close_review_request(request, review_req, review_req.form.cleaned_data["close"])
|
||||
close_review_request(request, review_req, review_req.form.cleaned_data["close"],
|
||||
review_req.form.cleaned_data["close_comment"])
|
||||
elif action=="assign":
|
||||
reqs_to_assign.append(review_req)
|
||||
|
||||
|
|
|
@ -563,7 +563,7 @@ def possibly_advance_next_reviewer_for_team(team, assigned_review_to_person_id,
|
|||
|
||||
break
|
||||
|
||||
def close_review_request(request, review_req, close_state):
|
||||
def close_review_request(request, review_req, close_state, close_comment=''):
|
||||
suggested_req = review_req.pk is None
|
||||
|
||||
review_req.state = close_state
|
||||
|
@ -573,13 +573,16 @@ def close_review_request(request, review_req, close_state):
|
|||
review_req.save()
|
||||
|
||||
if not suggested_req:
|
||||
descr = "Closed request for {} review by {} with state '{}'".format(
|
||||
review_req.type.name, review_req.team.acronym.upper(), close_state.name)
|
||||
if close_comment:
|
||||
descr += ': ' + close_comment
|
||||
ReviewRequestDocEvent.objects.create(
|
||||
type="closed_review_request",
|
||||
doc=review_req.doc,
|
||||
rev=review_req.doc.rev,
|
||||
by=request.user.person,
|
||||
desc="Closed request for {} review by {} with state '{}'".format(
|
||||
review_req.type.name, review_req.team.acronym.upper(), close_state.name),
|
||||
desc=descr,
|
||||
review_request=review_req,
|
||||
state=review_req.state,
|
||||
)
|
||||
|
@ -597,11 +600,14 @@ def close_review_request(request, review_req, close_state):
|
|||
state=assignment.state,
|
||||
)
|
||||
|
||||
msg = "Review request has been closed by {}.".format(request.user.person)
|
||||
if close_comment:
|
||||
msg += "\nComment: {}".format(close_comment)
|
||||
email_review_request_change(
|
||||
request, review_req,
|
||||
"Closed review request for {}: {}".format(review_req.doc.name, close_state.name),
|
||||
"Review request has been closed by {}.".format(request.user.person),
|
||||
by=request.user.person, notify_secretary=False, notify_reviewer=True, notify_requested_by=True)
|
||||
msg=msg, by=request.user.person, notify_secretary=False,
|
||||
notify_reviewer=True, notify_requested_by=True)
|
||||
|
||||
def suggested_review_requests_for_team(team):
|
||||
|
||||
|
|
|
@ -153,6 +153,8 @@
|
|||
<span class="close-controls form-inline">
|
||||
<label for="{{ r.form.reviewer.id_for_label }}">Close:</label>
|
||||
{{ r.form.close }}
|
||||
<label for="{{ r.form.reviewer.id_for_close_comment }}">Optional comment:</label>
|
||||
{{ r.form.close_comment }}
|
||||
<button type="button" class="btn btn-default undo" title="Cancel closing">Cancel</button>
|
||||
{% if r.form.close.errors %}
|
||||
<br>
|
||||
|
|
Loading…
Reference in a new issue