Skip to content

Commit 604287e

Browse files
committed
Support accepting a reviewer assignment
- Legacy-Id: 11237
1 parent b9f4b70 commit 604287e

3 files changed

Lines changed: 49 additions & 10 deletions

File tree

ietf/doc/tests_review.py

Lines changed: 23 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,8 @@
44

55
from django.core.urlresolvers import reverse as urlreverse
66

7+
from pyquery import PyQuery
8+
79
import debug # pyflakes:ignore
810

911
from ietf.review.models import ReviewRequest, Reviewer
@@ -169,6 +171,27 @@ def test_assign_reviewer(self):
169171
self.assertTrue("cancelled your assignment" in unicode(outbox[0]))
170172
self.assertTrue("assigned" in unicode(outbox[1]))
171173

174+
def test_accept_reviewer_assignment(self):
175+
doc = make_test_data()
176+
review_req = make_review_data(doc)
177+
review_req.state = ReviewRequestStateName.objects.get(slug="requested")
178+
review_req.save()
179+
180+
url = urlreverse('ietf.doc.views_review.review_request', kwargs={ "name": doc.name, "request_id": review_req.pk })
181+
username = review_req.reviewer.person.user.username
182+
self.client.login(username=username, password=username + "+password")
183+
r = self.client.get(url)
184+
self.assertEqual(r.status_code, 200)
185+
q = PyQuery(r.content)
186+
self.assertTrue(q("[name=action][value=accept]"))
187+
188+
# accept
189+
r = self.client.post(url, { "action": "accept" })
190+
self.assertEqual(r.status_code, 302)
191+
192+
review_req = reload_db_objects(review_req)
193+
self.assertEqual(review_req.state_id, "accepted")
194+
172195
def test_reject_reviewer_assignment(self):
173196
doc = make_test_data()
174197
review_req = make_review_data(doc)

ietf/doc/views_review.py

Lines changed: 19 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -107,24 +107,36 @@ def review_request(request, name, request_id):
107107
review_req = get_object_or_404(ReviewRequest, pk=request_id)
108108

109109
is_reviewer = review_req.reviewer and user_is_person(request.user, review_req.reviewer.person)
110-
can_manage_req = can_manage_review_requests_for_team(request.user, review_req.team)
110+
can_manage_request = can_manage_review_requests_for_team(request.user, review_req.team)
111111

112112
can_withdraw_request = (review_req.state_id in ["requested", "accepted"]
113-
and is_authorized_in_doc_stream(request.user, doc))
113+
and (is_authorized_in_doc_stream(request.user, doc)
114+
or can_manage_request))
114115

115116
can_assign_reviewer = (review_req.state_id in ["requested", "accepted"]
116117
and is_authorized_in_doc_stream(request.user, doc))
117118

119+
can_accept_reviewer_assignment = (review_req.state_id == "requested"
120+
and review_req.reviewer_id is not None
121+
and (is_reviewer or can_manage_request))
122+
118123
can_reject_reviewer_assignment = (review_req.state_id in ["requested", "accepted"]
119124
and review_req.reviewer_id is not None
120-
and (is_reviewer or can_manage_req))
125+
and (is_reviewer or can_manage_request))
126+
127+
if request.method == "POST" and request.POST.get("action") == "accept" and can_accept_reviewer_assignment:
128+
review_req.state = ReviewRequestStateName.objects.get(slug="accepted")
129+
review_req.save()
130+
131+
return redirect(review_request, name=review_req.doc.name, request_id=review_req.pk)
121132

122133
return render(request, 'doc/review/review_request.html', {
123134
'doc': doc,
124135
'review_req': review_req,
125136
'can_withdraw_request': can_withdraw_request,
126137
'can_reject_reviewer_assignment': can_reject_reviewer_assignment,
127138
'can_assign_reviewer': can_assign_reviewer,
139+
'can_accept_reviewer_assignment': can_accept_reviewer_assignment,
128140
})
129141

130142
def withdraw_request(request, name, request_id):
@@ -183,9 +195,9 @@ def assign_reviewer(request, name, request_id):
183195
doc = get_object_or_404(Document, name=name)
184196
review_req = get_object_or_404(ReviewRequest, pk=request_id, state__in=["requested", "accepted"])
185197

186-
can_manage_req = can_manage_review_requests_for_team(request.user, review_req.team)
198+
can_manage_request = can_manage_review_requests_for_team(request.user, review_req.team)
187199

188-
if not can_manage_req:
200+
if not can_manage_request:
189201
return HttpResponseForbidden("You do not have permission to perform this action")
190202

191203
if request.method == "POST" and request.POST.get("action") == "assign":
@@ -215,9 +227,9 @@ def reject_reviewer_assignment(request, name, request_id):
215227
return redirect(review_request, name=review_req.doc.name, request_id=review_req.pk)
216228

217229
is_reviewer = user_is_person(request.user, review_req.reviewer.person)
218-
can_manage_req = can_manage_review_requests_for_team(request.user, review_req.team)
230+
can_manage_request = can_manage_review_requests_for_team(request.user, review_req.team)
219231

220-
if not (is_reviewer or can_manage_req):
232+
if not (is_reviewer or can_manage_request):
221233
return HttpResponseForbidden("You do not have permission to perform this action")
222234

223235
if request.method == "POST" and request.POST.get("action") == "reject":

ietf/templates/doc/review/review_request.html

Lines changed: 7 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -70,12 +70,16 @@ <h1>Review request<br><small>{{ review_req.doc.name }}</small></h1>
7070
None assigned yet
7171
{% endif %}
7272

73-
{% if can_assign_reviewer %}
74-
<a class="btn btn-default btn-xs" href="{% url "ietf.doc.views_review.assign_reviewer" name=doc.name request_id=review_req.pk %}"><span class="fa fa-user"></span> {% if review_req.reviewer %}Reassign{% else %}Assign{% endif %} reviewer</a>
73+
{% if can_accept_reviewer_assignment %}
74+
<form style="display:inline" method="post" action="{% url "ietf.doc.views_review.review_request" name=doc.name request_id=review_req.pk %}"><button class="btn btn-default btn-xs" type="submit" name="action" value="accept"><span class="fa fa-check"></span> Accept</button></form>
7575
{% endif %}
7676

7777
{% if can_reject_reviewer_assignment %}
78-
<a class="btn btn-default btn-xs" href="{% url "ietf.doc.views_review.reject_reviewer_assignment" name=doc.name request_id=review_req.pk %}"><span class="fa fa-ban"></span> Reject reviewer assignment</a>
78+
<a class="btn btn-default btn-xs" href="{% url "ietf.doc.views_review.reject_reviewer_assignment" name=doc.name request_id=review_req.pk %}"><span class="fa fa-ban"></span> Reject</a>
79+
{% endif %}
80+
81+
{% if can_assign_reviewer %}
82+
<a class="btn btn-default btn-xs" href="{% url "ietf.doc.views_review.assign_reviewer" name=doc.name request_id=review_req.pk %}"><span class="fa fa-user"></span> {% if review_req.reviewer %}Reassign{% else %}Assign{% endif %} reviewer</a>
7983
{% endif %}
8084
</td>
8185
</tr>

0 commit comments

Comments
 (0)