From f740adcfc1b28f1ce89c48d17f8d4c252dbe23e6 Mon Sep 17 00:00:00 2001 From: Robert Sparks Date: Thu, 7 Nov 2019 23:02:19 +0000 Subject: [PATCH] Look at the tree of replaces-relationships when determining if some reviewer has reviewed this (or perhaps an ancestor) of this document. Fixes #2821. Commit ready for merge. - Legacy-Id: 16981 --- ietf/doc/factories.py | 3 +++ ietf/doc/tests_review.py | 25 ++++++++++++++++++++++++- ietf/review/utils.py | 2 +- 3 files changed, 28 insertions(+), 2 deletions(-) diff --git a/ietf/doc/factories.py b/ietf/doc/factories.py index 57e9ad610..070e3e41d 100644 --- a/ietf/doc/factories.py +++ b/ietf/doc/factories.py @@ -6,6 +6,7 @@ from __future__ import absolute_import, print_function, unicode_literals import debug # pyflakes:ignore import factory +import factory.fuzzy import datetime import six if six.PY3: @@ -36,6 +37,8 @@ class BaseDocumentFactory(factory.DjangoModelFactory): intended_std_level_id = None time = datetime.datetime.now() expires = factory.LazyAttribute(lambda o: o.time+datetime.timedelta(days=settings.INTERNET_DRAFT_DAYS_TO_EXPIRE)) + pages = factory.fuzzy.FuzzyInteger(2,400) + @factory.lazy_attribute_sequence def name(self, n): diff --git a/ietf/doc/tests_review.py b/ietf/doc/tests_review.py index 90974c5d9..a2b5f3ff1 100644 --- a/ietf/doc/tests_review.py +++ b/ietf/doc/tests_review.py @@ -22,7 +22,7 @@ from pyquery import PyQuery import debug # pyflakes:ignore import ietf.review.mailarch -from ietf.doc.factories import NewRevisionDocEventFactory, WgDraftFactory, WgRfcFactory, ReviewFactory +from ietf.doc.factories import NewRevisionDocEventFactory, IndividualDraftFactory, WgDraftFactory, WgRfcFactory, ReviewFactory from ietf.doc.models import DocumentAuthor, RelatedDocument, DocEvent, ReviewRequestDocEvent, ReviewAssignmentDocEvent from ietf.group.factories import RoleFactory, ReviewTeamFactory from ietf.group.models import Group @@ -433,6 +433,29 @@ class ReviewTests(TestCase): self.assertIn("This team has completed other reviews", message) self.assertIn("{} -01 Serious Issues".format(reviewer_email.person.ascii), message) + def test_previously_reviewed_replaced_doc(self): + review_team = ReviewTeamFactory(acronym="reviewteam", name="Review Team", type_id="review", list_email="reviewteam@ietf.org", parent=Group.objects.get(acronym="farfut")) + rev_role = RoleFactory(group=review_team,person__user__username='reviewer',person__user__email='reviewer@example.com',person__name='Some Reviewer',name_id='reviewer') + RoleFactory(group=review_team,person__user__username='reviewsecretary',person__user__email='reviewsecretary@example.com',name_id='secr') + + ind_doc = IndividualDraftFactory() + old_wg_doc = WgDraftFactory(relations=[('replaces',ind_doc)]) + middle_wg_doc = WgDraftFactory(relations=[('replaces',old_wg_doc)]) + new_wg_doc = WgDraftFactory(relations=[('replaces',middle_wg_doc)]) + + ReviewAssignmentFactory(review_request__team=review_team, review_request__doc=old_wg_doc, reviewer=rev_role.email, state_id='completed') + + review_req=ReviewRequestFactory(team=review_team, doc=new_wg_doc) + + assign_url = urlreverse('ietf.doc.views_review.assign_reviewer', kwargs={ "name": new_wg_doc.name, "request_id": review_req.pk }) + + login_testing_unauthorized(self, "reviewsecretary", assign_url) + r = self.client.get(assign_url) + self.assertEqual(r.status_code, 200) + q = PyQuery(r.content) + reviewer_label = q("option[value=\"{}\"]".format(rev_role.email.address)).text().lower() + self.assertIn("reviewed document before", reviewer_label) + def test_accept_reviewer_assignment(self): doc = WgDraftFactory(group__acronym='mars',rev='01') diff --git a/ietf/review/utils.py b/ietf/review/utils.py index 2dc9002a9..143240bfb 100644 --- a/ietf/review/utils.py +++ b/ietf/review/utils.py @@ -826,7 +826,7 @@ def make_assignment_choices(email_queryset, review_req): # previous review of document has_reviewed_previous = ReviewRequest.objects.filter( - doc=doc, + doc__name__in=set([doc.name]).union(*extract_complete_replaces_ancestor_mapping_for_docs([doc.name]).values()), reviewassignment__reviewer__person__in=possible_person_ids, reviewassignment__state="completed", team=team,