Skip to content

Commit dd190b8

Browse files
committed
Follow replacements when displaying reviews for a draft on the
document page, too. Add a test to check that recursive replacements are handled correctly. Polish the display a bit. - Legacy-Id: 11847
1 parent 16e2848 commit dd190b8

9 files changed

Lines changed: 38 additions & 17 deletions

File tree

ietf/doc/tests_review.py

Lines changed: 19 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -15,8 +15,8 @@
1515
from ietf.review.models import ReviewRequest, ReviewTeamResult, ReviewerSettings
1616
import ietf.review.mailarch
1717
from ietf.person.models import Email, Person
18-
from ietf.name.models import ReviewResultName, ReviewRequestStateName, ReviewTypeName
19-
from ietf.doc.models import DocumentAuthor
18+
from ietf.name.models import ReviewResultName, ReviewRequestStateName, ReviewTypeName, DocRelationshipName
19+
from ietf.doc.models import DocumentAuthor, Document, DocAlias, RelatedDocument
2020
from ietf.utils.test_utils import TestCase
2121
from ietf.utils.test_data import make_test_data, make_review_data
2222
from ietf.utils.test_utils import login_testing_unauthorized, unicontent, reload_db_objects
@@ -70,8 +70,23 @@ def test_request_review(self):
7070
self.assertEqual(doc.latest_event().type, "requested_review")
7171

7272
def test_doc_page(self):
73-
# FIXME: fill in
74-
pass
73+
doc = make_test_data()
74+
review_req = make_review_data(doc)
75+
76+
# move the review request to a doubly-replaced document to
77+
# check we can fish it out
78+
old_doc = Document.objects.get(name="draft-foo-mars-test")
79+
older_doc = Document.objects.create(name="draft-older")
80+
older_docalias = DocAlias.objects.create(name=older_doc.name, document=older_doc)
81+
RelatedDocument.objects.create(source=old_doc, target=older_docalias, relationship=DocRelationshipName.objects.get(slug='replaces'))
82+
review_req.doc = older_doc
83+
review_req.save()
84+
85+
url = urlreverse('doc_view', kwargs={ "name": doc.name })
86+
r = self.client.get(url)
87+
self.assertEqual(r.status_code, 200)
88+
content = unicontent(r)
89+
self.assertTrue("{} Review".format(review_req.type.name) in content)
7590

7691
def test_review_request(self):
7792
doc = make_test_data()

ietf/doc/views_doc.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -581,7 +581,7 @@ def document_main(request, name, rev=None):
581581

582582
other_reviews = []
583583
if review_req:
584-
other_reviews = review_requests_to_list_for_doc(review_req.doc).exclude(pk=review_req.pk)
584+
other_reviews = [r for r in review_requests_to_list_for_doc(review_req.doc) if r != review_req]
585585

586586
return render(request, "doc/document_review.html",
587587
dict(doc=doc,

ietf/group/views.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -662,7 +662,7 @@ def review_requests(request, acronym, group_type=None):
662662
team=group,
663663
).exclude(
664664
state__in=("requested", "accepted")
665-
).prefetch_related("reviewer", "type", "state").order_by("-time", "-id")
665+
).prefetch_related("reviewer", "type", "state", "doc").order_by("-time", "-id")
666666

667667
since_choices = [
668668
(None, "1 month"),

ietf/group/views_review.py

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -82,7 +82,8 @@ def manage_review_requests(request, acronym, group_type=None):
8282
set(r.doc_id for r in review_requests),
8383
)
8484

85-
# we need a mutable query dict
85+
# we need a mutable query dict for resetting upon saving with
86+
# conflicts
8687
query_dict = request.POST.copy() if request.method == "POST" else None
8788
for req in review_requests:
8889
l = []

ietf/review/utils.py

Lines changed: 10 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -34,9 +34,12 @@ def can_manage_review_requests_for_team(user, team, allow_non_team_personnel=Tru
3434
or (allow_non_team_personnel and has_role(user, "Secretariat")))
3535

3636
def review_requests_to_list_for_doc(doc):
37-
return ReviewRequest.objects.filter(doc=doc).exclude(
38-
state__in=["withdrawn", "rejected", "overtaken", "no-response"]
39-
).order_by("-time", "-id")
37+
return extract_revision_ordered_review_requests_for_documents(
38+
ReviewRequest.objects.exclude(
39+
state__in=["withdrawn", "rejected", "overtaken", "no-response"],
40+
).prefetch_related("result"),
41+
[doc.name]
42+
).get(doc.pk, [])
4043

4144
def make_new_review_request_from_existing(review_req):
4245
obj = ReviewRequest()
@@ -234,13 +237,15 @@ def blocks(existing, request):
234237
res.sort(key=lambda r: (r.deadline, r.doc_id), reverse=True)
235238
return res
236239

237-
def extract_revision_ordered_review_requests_for_documents(queryset, names):
240+
def extract_revision_ordered_review_requests_for_documents(review_request_queryset, names):
241+
"""Extracts all review requests for document names (including replaced ancestors)."""
242+
238243
names = set(names)
239244

240245
replaces = extract_complete_replaces_ancestor_mapping_for_docs(names)
241246

242247
requests_for_each_doc = defaultdict(list)
243-
for r in queryset.filter(doc__in=set(e for l in replaces.itervalues() for e in l) | names).order_by("-reviewed_rev", "-time", "-id").iterator():
248+
for r in review_request_queryset.filter(doc__in=set(e for l in replaces.itervalues() for e in l) | names).order_by("-reviewed_rev", "-time", "-id").iterator():
244249
requests_for_each_doc[r.doc_id].append(r)
245250

246251
# now collect in breadth-first order to keep the revision order intact

ietf/templates/doc/document_draft.html

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -199,7 +199,7 @@
199199
<td class="edit"></td>
200200
<td>
201201
{% for review_request in review_requests %}
202-
{% include "doc/review_request_summary.html" with current_rev=doc.rev %}
202+
{% include "doc/review_request_summary.html" with current_doc_name=doc.name current_rev=doc.rev %}
203203
{% endfor %}
204204

205205
{% if can_request_review %}

ietf/templates/doc/document_review.html

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -100,7 +100,7 @@
100100
<td class="edit"></td>
101101
<td>
102102
{% for review_request in other_reviews %}
103-
{% include "doc/review_request_summary.html" with current_rev=review_req.reviewed_rev %}
103+
{% include "doc/review_request_summary.html" with current_doc_name=review_req.doc_id current_rev=review_req.reviewed_rev %}
104104
{% endfor %}
105105
</td>
106106
</tr>

ietf/templates/doc/review_request_summary.html

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
<div class="review-request-summary">
22
{% if review_request.state_id == "completed" or review_request.state_id == "part-completed" %}
33
<a href="{% if review_request.review %}{% url "doc_view" review_request.review.name %}{% else %}{% url "ietf.doc.views_review.review_request" review_request.doc_id review_request.pk %}{% endif %}">
4-
{{ review_request.team.acronym|upper }} {{ review_request.type.name }} Review{% if review_request.reviewed_rev and review_request.reviewed_rev != current_rev %} (of -{{ review_request.reviewed_rev }}){% endif %}:
4+
{{ review_request.team.acronym|upper }} {{ review_request.type.name }} Review{% if review_request.reviewed_rev and review_request.reviewed_rev != current_rev or review_request.doc_id != current_doc_name %} (of {% if review_request.doc_id != current_doc_name %}{{ review_request.doc_id }}{% endif %}-{{ review_request.reviewed_rev }}){% endif %}:
55
{{ review_request.result.name }} {% if review_request.state_id == "part-completed" %}(partially completed){% endif %}
66
- reviewer: {{ review_request.reviewer.person }}</a>
77
{% else %}

ietf/templates/group/review_requests.html

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,7 @@
44

55
{% load ietf_filters staticfiles bootstrap3 %}
66

7-
{% block group_subtitle %}Reviews for {{ group.name }}{% endblock %}
7+
{% block group_subtitle %}Review requests{% endblock %}
88

99
{% block pagehead %}
1010
<link rel="stylesheet" href="{% static "jquery.tablesorter/css/theme.bootstrap.min.css" %}">
@@ -29,7 +29,7 @@ <h2>Open review requests</h2>
2929
<tbody>
3030
{% for r in open_review_requests %}
3131
<tr>
32-
<td><a {% if r.pk != None %}href="{% url "ietf.doc.views_review.review_request" name=r.doc.name request_id=r.pk %}"{% endif %}>{{ r.doc.name }}{% if r.requested_rev %}-{{ r.requested_rev }}{% endif %}</a></td>
32+
<td><a {% if r.pk != None %}href="{% url "ietf.doc.views_review.review_request" name=r.doc.name request_id=r.pk %}"{% endif %}>{{ r.doc.name }}-{% if r.requested_rev %}{{ r.requested_rev }}{% else %}{{ r.doc.rev }}{% endif %}</a></td>
3333
<td>{{ r.type.name }}</td>
3434
<td>{% if r.time %}{{ r.time|date:"Y-m-d" }}{% else %}<em>auto-suggested</em>{% endif %}</td>
3535
<td>

0 commit comments

Comments
 (0)