Skip to content

Commit d54459b

Browse files
committed
Add tests of suggested review requests, make suggestions take more
things into account - Legacy-Id: 11528
1 parent 4542b26 commit d54459b

4 files changed

Lines changed: 102 additions & 11 deletions

File tree

ietf/group/tests_review.py

Lines changed: 63 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -6,11 +6,73 @@
66

77
from ietf.utils.test_data import make_test_data, make_review_data
88
from ietf.utils.test_utils import login_testing_unauthorized, TestCase, unicontent, reload_db_objects
9-
from ietf.review.models import ReviewRequest
9+
from ietf.review.models import ReviewRequest, ReviewRequestStateName
10+
from ietf.doc.models import TelechatDocEvent
11+
from ietf.iesg.models import TelechatDate
1012
from ietf.person.models import Email, Person
13+
from ietf.review.utils import suggested_review_requests_for_team
1114
import ietf.group.views_review
1215

1316
class ReviewTests(TestCase):
17+
def test_suggested_review_requests(self):
18+
doc = make_test_data()
19+
review_req = make_review_data(doc)
20+
team = review_req.team
21+
22+
# put on telechat
23+
TelechatDocEvent.objects.create(
24+
type="scheduled_for_telechat",
25+
by=Person.objects.get(name="(System)"),
26+
doc=doc,
27+
telechat_date=TelechatDate.objects.all().first().date,
28+
)
29+
doc.rev = "10"
30+
doc.save()
31+
32+
prev_rev = "{:02}".format(int(doc.rev) - 1)
33+
34+
# blocked by existing request
35+
review_req.requested_rev = ""
36+
review_req.save()
37+
38+
self.assertEqual(len(suggested_review_requests_for_team(team)), 0)
39+
40+
# ... but not to previous version
41+
review_req.requested_rev = prev_rev
42+
review_req.save()
43+
suggestions = suggested_review_requests_for_team(team)
44+
self.assertEqual(len(suggestions), 1)
45+
self.assertEqual(suggestions[0].doc, doc)
46+
self.assertEqual(suggestions[0].team, team)
47+
48+
# blocked by non-versioned refusal
49+
review_req.requested_rev = ""
50+
review_req.state = ReviewRequestStateName.objects.get(slug="no-review-document")
51+
review_req.save()
52+
53+
self.assertEqual(list(suggested_review_requests_for_team(team)), [])
54+
55+
# blocked by versioned refusal
56+
review_req.reviewed_rev = doc.rev
57+
review_req.state = ReviewRequestStateName.objects.get(slug="no-review-document")
58+
review_req.save()
59+
60+
self.assertEqual(list(suggested_review_requests_for_team(team)), [])
61+
62+
# blocked by completion
63+
review_req.state = ReviewRequestStateName.objects.get(slug="completed")
64+
review_req.save()
65+
66+
self.assertEqual(list(suggested_review_requests_for_team(team)), [])
67+
68+
# ... but not to previous version
69+
review_req.reviewed_rev = prev_rev
70+
review_req.state = ReviewRequestStateName.objects.get(slug="completed")
71+
review_req.save()
72+
73+
self.assertEqual(len(suggested_review_requests_for_team(team)), 1)
74+
75+
1476
def test_manage_review_requests(self):
1577
doc = make_test_data()
1678
review_req1 = make_review_data(doc)

ietf/group/views_review.py

Lines changed: 2 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,7 @@
33
from django.contrib.auth.decorators import login_required
44
from django import forms
55

6-
from ietf.review.models import ReviewRequest, ReviewRequestStateName
6+
from ietf.review.models import ReviewRequest
77
from ietf.review.utils import (can_manage_review_requests_for_team, close_review_request_states,
88
extract_revision_ordered_review_requests_for_documents,
99
assign_review_request_to_reviewer,
@@ -62,11 +62,8 @@ def __init__(self, review_req, *args, **kwargs):
6262
self.fields["reviewer"].widget.attrs["class"] = "form-control input-sm"
6363

6464
if self.is_bound:
65-
action = self.data.get("action")
66-
if action == "close":
65+
if self.data.get("action") == "close":
6766
self.fields["close"].required = True
68-
elif action == "assign":
69-
self.fields["reviewer"].required = True
7067

7168

7269
@login_required

ietf/name/fixtures/names.json

Lines changed: 21 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1827,6 +1827,26 @@
18271827
"fields": {
18281828
"order": 7,
18291829
"used": true,
1830+
"name": "No Review of Version",
1831+
"desc": ""
1832+
},
1833+
"model": "name.reviewrequeststatename",
1834+
"pk": "no-review-version"
1835+
},
1836+
{
1837+
"fields": {
1838+
"order": 8,
1839+
"used": true,
1840+
"name": "No Review of Document",
1841+
"desc": ""
1842+
},
1843+
"model": "name.reviewrequeststatename",
1844+
"pk": "no-review-document"
1845+
},
1846+
{
1847+
"fields": {
1848+
"order": 9,
1849+
"used": true,
18301850
"name": "Partially Completed",
18311851
"desc": ""
18321852
},
@@ -1835,7 +1855,7 @@
18351855
},
18361856
{
18371857
"fields": {
1838-
"order": 8,
1858+
"order": 10,
18391859
"used": true,
18401860
"name": "Completed",
18411861
"desc": ""

ietf/review/utils.py

Lines changed: 16 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -153,6 +153,8 @@ def fixup_deadline(d):
153153

154154
requests = {}
155155

156+
requested_state = ReviewRequestStateName.objects.get(slug="requested", used=True)
157+
156158
if True: # FIXME
157159
# in Last Call
158160
last_call_type = ReviewTypeName.objects.get(slug="lc")
@@ -171,6 +173,7 @@ def fixup_deadline(d):
171173
team=team,
172174
deadline=deadline,
173175
requested_by=system_person,
176+
state=requested_state,
174177
)
175178

176179
seen_deadlines[doc.pk] = deadline
@@ -200,6 +203,7 @@ def fixup_deadline(d):
200203
team=team,
201204
deadline=deadline,
202205
requested_by=system_person,
206+
state=requested_state,
203207
)
204208

205209
seen_deadlines[doc.pk] = deadline
@@ -210,11 +214,19 @@ def fixup_deadline(d):
210214
existing_requests[r.doc_id].append(r)
211215

212216
def blocks(existing, request):
213-
return (existing.doc_id == request.doc_id
214-
and existing.reviewed_rev == request.doc.rev
215-
and existing.state_id not in ("part-completed", "rejected", "overtaken"))
217+
if existing.doc_id != request.doc_id:
218+
return False
219+
220+
no_review_document = existing.state_id == "no-review-document"
221+
pending = (existing.state_id in ("requested", "accepted")
222+
and (not existing.requested_rev or existing.requested_rev == request.doc.rev))
223+
completed_or_closed = (existing.state_id not in ("part-completed", "rejected", "overtaken", "no-response")
224+
and existing.reviewed_rev == request.doc.rev)
225+
226+
return no_review_document or pending or completed_or_closed
216227

217-
res = [r for r in requests.itervalues() if not any(blocks(e, r) for e in existing_requests[r.doc_id])]
228+
res = [r for r in requests.itervalues()
229+
if not any(blocks(e, r) for e in existing_requests[r.doc_id])]
218230
res.sort(key=lambda r: (r.deadline, r.doc_id))
219231
return res
220232

0 commit comments

Comments
 (0)