From 085699068331b1df2e5b7353e8ffb2e7695f3ba4 Mon Sep 17 00:00:00 2001 From: Robert Sparks Date: Thu, 14 Mar 2019 18:39:40 +0000 Subject: [PATCH] Checkpoint. Most tests do not fail. Oddness with an API resource, and with one template's coverage - Legacy-Id: 16031 --- ietf/doc/tests_review.py | 15 +++++---- ietf/doc/views_doc.py | 4 +-- ietf/doc/views_review.py | 8 ++--- ietf/group/tests_review.py | 9 +++--- ietf/iesg/agenda.py | 2 +- ietf/ietfauth/tests.py | 9 +++--- ietf/ietfauth/views.py | 18 +++++------ ietf/name/resources.py | 28 ++++++++--------- ietf/stats/tests.py | 5 +-- ietf/templates/ietfauth/review_overview.html | 32 ++++++++++---------- 10 files changed, 65 insertions(+), 65 deletions(-) diff --git a/ietf/doc/tests_review.py b/ietf/doc/tests_review.py index 4799afea2..67a8341a6 100644 --- a/ietf/doc/tests_review.py +++ b/ietf/doc/tests_review.py @@ -18,11 +18,11 @@ import debug # pyflakes:ignore import ietf.review.mailarch from ietf.doc.factories import NewRevisionDocEventFactory, WgDraftFactory, WgRfcFactory -from ietf.doc.models import DocumentAuthor, RelatedDocument, DocEvent, ReviewRequestDocEvent, ReviewAssignmentDocEvent +from ietf.doc.models import DocumentAuthor, RelatedDocument, DocEvent, ReviewAssignmentDocEvent from ietf.group.factories import RoleFactory, ReviewTeamFactory from ietf.group.models import Group from ietf.message.models import Message -from ietf.name.models import ReviewResultName, ReviewRequestStateName, ReviewAssignmentStateName, ReviewTypeName +from ietf.name.models import ReviewResultName, ReviewRequestStateName, ReviewAssignmentStateName from ietf.person.models import Email, Person from ietf.review.factories import ReviewRequestFactory, ReviewAssignmentFactory from ietf.review.models import (ReviewRequest, ReviewerSettings, @@ -137,7 +137,7 @@ class ReviewTests(TestCase): 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',name_id='reviewer') review_req = ReviewRequestFactory(doc=doc,team=review_team,type_id='early',state_id='assigned',requested_by=rev_role.person,deadline=datetime.datetime.now()+datetime.timedelta(days=20)) - assignment = ReviewAssignmentFactory(review_request=review_req, reviewer=rev_role.person.email_set.first(), state_id='accepted') + ReviewAssignmentFactory(review_request=review_req, reviewer=rev_role.person.email_set.first(), state_id='accepted') # move the review request to a doubly-replaced document to # check we can fish it out @@ -160,7 +160,7 @@ class ReviewTests(TestCase): 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',name_id='reviewer') review_req = ReviewRequestFactory(doc=doc,team=review_team,type_id='early',state_id='assigned',requested_by=rev_role.person,deadline=datetime.datetime.now()+datetime.timedelta(days=20)) - assignment = ReviewAssignmentFactory(review_request = review_req, reviewer = rev_role.person.email_set.first(), state_id='accepted') + ReviewAssignmentFactory(review_request = review_req, reviewer = rev_role.person.email_set.first(), state_id='accepted') url = urlreverse('ietf.doc.views_review.review_request', kwargs={ "name": doc.name, "request_id": review_req.pk }) @@ -403,7 +403,7 @@ class ReviewTests(TestCase): self.assertEqual(review_req.reviewassignment_set.count(),1) assignment = review_req.reviewassignment_set.first() self.assertEqual(assignment.reviewer, reviewer) - self.assertEqual(assignment.state_id, "requested") + self.assertEqual(assignment.state_id, "assigned") self.assertEqual(len(outbox), 1) self.assertTrue("assigned" in outbox[0].get_payload(decode=True).decode("utf-8")) self.assertEqual(NextReviewerInTeam.objects.get(team=review_req.team).next_reviewer, rotation_list[1]) @@ -812,7 +812,6 @@ class ReviewTests(TestCase): self.assertTrue(any( len(line) > 80 for line in body.splitlines() )) first_review = assignment.review - first_reviewer = assignment.reviewer # complete assignment = assignment.review_request.reviewassignment_set.create(state_id="requested", reviewer=assignment.reviewer) @@ -902,7 +901,7 @@ class ReviewTests(TestCase): rev_role = RoleFactory(group=review_team,person__user__username='reviewer',person__user__email='reviewer@example.com',name_id='reviewer') RoleFactory(group=review_team,person__user__username='reviewsecretary',person__user__email='reviewsecretary@example.com',name_id='secr') review_req = ReviewRequestFactory(doc=doc,team=review_team,type_id='early',state_id='assigned',requested_by=rev_role.person,deadline=datetime.datetime.now()+datetime.timedelta(days=20)) - assignment = ReviewAssignmentFactory(review_request = review_req, reviewer = rev_role.person.email_set.first(), state_id='accepted') + ReviewAssignmentFactory(review_request = review_req, reviewer = rev_role.person.email_set.first(), state_id='accepted') url = urlreverse('ietf.doc.views_review.edit_comment', kwargs={ "name": doc.name, "request_id": review_req.pk }) @@ -924,7 +923,7 @@ class ReviewTests(TestCase): rev_role = RoleFactory(group=review_team,person__user__username='reviewer',person__user__email='reviewer@example.com',name_id='reviewer') RoleFactory(group=review_team,person__user__username='reviewsecretary',person__user__email='reviewsecretary@example.com',name_id='secr') review_req = ReviewRequestFactory(doc=doc,team=review_team,type_id='early',state_id='accepted',requested_by=rev_role.person,deadline=datetime.datetime.now()+datetime.timedelta(days=20)) - assignment = ReviewAssignmentFactory(review_request = review_req, reviewer = rev_role.person.email_set.first(), state_id='accepted') + ReviewAssignmentFactory(review_request = review_req, reviewer = rev_role.person.email_set.first(), state_id='accepted') url = urlreverse('ietf.doc.views_review.edit_deadline', kwargs={ "name": doc.name, "request_id": review_req.pk }) diff --git a/ietf/doc/views_doc.py b/ietf/doc/views_doc.py index d01e20bd1..e9597a506 100644 --- a/ietf/doc/views_doc.py +++ b/ietf/doc/views_doc.py @@ -64,8 +64,8 @@ from ietf.doc.mails import email_comment from ietf.mailtrigger.utils import gather_relevant_expansions from ietf.meeting.models import Session from ietf.meeting.utils import group_sessions, get_upcoming_manageable_sessions, sort_sessions -from ietf.review.models import ReviewRequest, ReviewAssignment -from ietf.review.utils import can_request_review_of_doc, review_requests_to_list_for_docs, review_assignments_to_list_for_docs +from ietf.review.models import ReviewAssignment +from ietf.review.utils import can_request_review_of_doc, review_assignments_to_list_for_docs from ietf.review.utils import no_review_from_teams_on_doc from ietf.utils import markup_txt, log from ietf.utils.text import maybe_split diff --git a/ietf/doc/views_review.py b/ietf/doc/views_review.py index 9f9f9f3a4..706afe5d5 100644 --- a/ietf/doc/views_review.py +++ b/ietf/doc/views_review.py @@ -31,7 +31,7 @@ from ietf.person.fields import PersonEmailChoiceField, SearchablePersonField from ietf.review.utils import (active_review_teams, assign_review_request_to_reviewer, can_request_review_of_doc, can_manage_review_requests_for_team, email_review_assignment_change, email_review_request_change, - make_new_review_request_from_existing, close_review_request_states, + close_review_request_states, close_review_request, setup_reviewer_field) from ietf.review import mailarch from ietf.utils.fields import DatepickerDateField @@ -201,13 +201,13 @@ def review_request(request, name, request_id): for assignment in assignments: assignment.is_reviewer = user_is_person(request.user, assignment.reviewer.person) - assignment.can_accept_reviewer_assignment = (assignment.state_id == "requested" + assignment.can_accept_reviewer_assignment = (assignment.state_id == "assigned" and (assignment.is_reviewer or can_manage_request)) - assignment.can_reject_reviewer_assignment = (assignment.state_id in ["requested", "accepted"] + assignment.can_reject_reviewer_assignment = (assignment.state_id in ["assigned", "accepted"] and (assignment.is_reviewer or can_manage_request)) - assignment.can_complete_review = (assignment.state_id in ["requested", "accepted", "overtaken", "no-response", "part-completed", "completed"] + assignment.can_complete_review = (assignment.state_id in ["assigned", "accepted", "overtaken", "no-response", "part-completed", "completed"] and (assignment.is_reviewer or can_manage_request)) # This implementation means if a reviewer accepts one assignment for a review_request, he accepts all assigned to him (for that request) diff --git a/ietf/group/tests_review.py b/ietf/group/tests_review.py index 7bc6c86ac..564d11d83 100644 --- a/ietf/group/tests_review.py +++ b/ietf/group/tests_review.py @@ -9,15 +9,15 @@ from ietf.utils.test_utils import login_testing_unauthorized, TestCase, uniconte from ietf.doc.models import TelechatDocEvent from ietf.group.models import Role from ietf.iesg.models import TelechatDate -from ietf.person.models import Email, Person -from ietf.review.models import ReviewRequest, ReviewerSettings, UnavailablePeriod, ReviewSecretarySettings +from ietf.person.models import Person +from ietf.review.models import ReviewerSettings, UnavailablePeriod, ReviewSecretarySettings from ietf.review.utils import ( suggested_review_requests_for_team, review_assignments_needing_reviewer_reminder, email_reviewer_reminder, review_assignments_needing_secretary_reminder, email_secretary_reminder, reviewer_rotation_list, ) -from ietf.name.models import ReviewTypeName, ReviewResultName, ReviewRequestStateName, ReviewAssignmentStateName +from ietf.name.models import ReviewResultName, ReviewRequestStateName, ReviewAssignmentStateName import ietf.group.views from ietf.utils.mail import outbox, empty_outbox from ietf.dbtemplate.factories import DBTemplateFactory @@ -173,13 +173,12 @@ class ReviewTests(TestCase): def test_manage_review_requests(self): group = ReviewTeamFactory() - reviewer = RoleFactory(name_id='reviewer',group=group,person__user__username='reviewer').person + RoleFactory(name_id='reviewer',group=group,person__user__username='reviewer').person marsperson = RoleFactory(name_id='reviewer',group=group,person=PersonFactory(name=u"Mars Anders Chairman",user__username='marschairman')).person review_req1 = ReviewRequestFactory(doc__pages=2,doc__shepherd=marsperson.email(),team=group) review_req2 = ReviewRequestFactory(team=group) review_req3 = ReviewRequestFactory(team=group) RoleFactory(name_id='chair',group=review_req1.doc.group,person=marsperson) - doc = review_req1.doc unassigned_url = urlreverse(ietf.group.views.manage_review_requests, kwargs={ 'acronym': group.acronym, 'group_type': group.type_id, "assignment_status": "unassigned" }) login_testing_unauthorized(self, "secretary", unassigned_url) diff --git a/ietf/iesg/agenda.py b/ietf/iesg/agenda.py index f161ed3c0..46a22adf3 100644 --- a/ietf/iesg/agenda.py +++ b/ietf/iesg/agenda.py @@ -12,7 +12,7 @@ import debug # pyflakes:ignore from ietf.doc.models import Document, LastCallDocEvent, ConsensusDocEvent from ietf.doc.utils_search import fill_in_telechat_date from ietf.iesg.models import TelechatDate, TelechatAgendaItem -from ietf.review.utils import review_requests_to_list_for_docs +from ietf.review.utils import review_assignments_to_list_for_docs def get_agenda_date(date=None): if not date: diff --git a/ietf/ietfauth/tests.py b/ietf/ietfauth/tests.py index fbc5831ee..e1ff2ed50 100644 --- a/ietf/ietfauth/tests.py +++ b/ietf/ietfauth/tests.py @@ -22,7 +22,7 @@ from ietf.ietfauth.htpasswd import update_htpasswd_file from ietf.mailinglists.models import Subscribed from ietf.person.models import Person, Email, PersonalApiKey, PERSON_API_KEY_ENDPOINTS from ietf.person.factories import PersonFactory, EmailFactory -from ietf.review.factories import ReviewRequestFactory +from ietf.review.factories import ReviewRequestFactory, ReviewAssignmentFactory from ietf.review.models import ReviewWish, UnavailablePeriod from ietf.utils.decorators import skip_coverage @@ -358,11 +358,12 @@ class IetfAuthTests(TestCase): self.assertTrue(self.username_in_htpasswd_file(user.username)) def test_review_overview(self): - review_req = ReviewRequestFactory(reviewer=EmailFactory(person__user__username='reviewer')) - RoleFactory(name_id='reviewer',group=review_req.team,person=review_req.reviewer.person) + review_req = ReviewRequestFactory() + assignment = ReviewAssignmentFactory(review_request=review_req,reviewer=EmailFactory(person__user__username='reviewer')) + RoleFactory(name_id='reviewer',group=review_req.team,person=assignment.reviewer.person) doc = review_req.doc - reviewer = review_req.reviewer.person + reviewer = assignment.reviewer.person UnavailablePeriod.objects.create( team=review_req.team, diff --git a/ietf/ietfauth/views.py b/ietf/ietfauth/views.py index e92b6e438..9a7748396 100644 --- a/ietf/ietfauth/views.py +++ b/ietf/ietfauth/views.py @@ -65,7 +65,7 @@ from ietf.ietfauth.htpasswd import update_htpasswd_file from ietf.ietfauth.utils import role_required from ietf.mailinglists.models import Subscribed, Whitelisted from ietf.person.models import Person, Email, Alias, PersonalApiKey -from ietf.review.models import ReviewRequest, ReviewerSettings, ReviewWish +from ietf.review.models import ReviewerSettings, ReviewWish, ReviewAssignment from ietf.review.utils import unavailable_periods_to_list, get_default_filter_re from ietf.doc.fields import SearchableDocumentField from ietf.utils.decorators import person_required @@ -433,18 +433,18 @@ class AddReviewWishForm(forms.Form): @login_required def review_overview(request): - open_review_requests = ReviewRequest.objects.filter( + open_review_assignments = ReviewAssignment.objects.filter( reviewer__person__user=request.user, - state__in=["requested", "accepted"], + state__in=["assigned", "accepted"], ) today = Date.today() - for r in open_review_requests: - r.due = max(0, (today - r.deadline).days) + for r in open_review_assignments: + r.due = max(0, (today - r.review_request.deadline).days) - closed_review_requests = ReviewRequest.objects.filter( + closed_review_assignments = ReviewAssignment.objects.filter( reviewer__person__user=request.user, state__in=["no-response", "part-completed", "completed"], - ).order_by("-time")[:20] + ).order_by("-review_request__time")[:20] teams = Group.objects.filter(role__name="reviewer", role__person__user=request.user, state="active") @@ -483,8 +483,8 @@ def review_overview(request): review_wishes = ReviewWish.objects.filter(person__user=request.user).prefetch_related("team") return render(request, 'ietfauth/review_overview.html', { - 'open_review_requests': open_review_requests, - 'closed_review_requests': closed_review_requests, + 'open_review_assignments': open_review_assignments, + 'closed_review_assignments': closed_review_assignments, 'teams': teams, 'review_wishes': review_wishes, 'review_wish_form': review_wish_form, diff --git a/ietf/name/resources.py b/ietf/name/resources.py index dca6b8d94..83f8d0b6f 100644 --- a/ietf/name/resources.py +++ b/ietf/name/resources.py @@ -429,6 +429,20 @@ class ReviewRequestStateNameResource(ModelResource): } api.name.register(ReviewRequestStateNameResource()) +class ReviewAssignmentStateNameResource(ModelResource): + class Meta: + cache = SimpleCache() + queryset = ReviewAssignmentStateName.objects.all() + #resource_name = 'reviewassignmentstatename' + filtering = { + "slug": ALL, + "name": ALL, + "desc": ALL, + "used": ALL, + "order": ALL, + } +api.name.register(ReviewAssignmentStateNameResource()) + class ReviewTypeNameResource(ModelResource): class Meta: cache = SimpleCache() @@ -570,17 +584,3 @@ class AgendaTypeNameResource(ModelResource): api.name.register(AgendaTypeNameResource()) -class ReviewAssignmentStateNameResource(ModelResource): - class Meta: - queryset = ReviewAssignmentStateName.objects.all() - serializer = api.Serializer() - cache = SimpleCache() - #resource_name = 'reviewassignmentstatename' - filtering = { - "slug": ALL, - "name": ALL, - "desc": ALL, - "used": ALL, - "order": ALL, - } -api.name.register(ReviewAssignmentStateNameResource()) diff --git a/ietf/stats/tests.py b/ietf/stats/tests.py index 69880ed10..8ad46ab49 100644 --- a/ietf/stats/tests.py +++ b/ietf/stats/tests.py @@ -18,7 +18,7 @@ from ietf.meeting.factories import MeetingFactory from ietf.person.factories import PersonFactory from ietf.person.models import Person, Email from ietf.name.models import FormalLanguageName, DocRelationshipName, CountryName -from ietf.review.factories import ReviewRequestFactory, ReviewerSettingsFactory +from ietf.review.factories import ReviewRequestFactory, ReviewerSettingsFactory, ReviewAssignmentFactory from ietf.stats.models import MeetingRegistration, CountryAlias from ietf.stats.utils import get_meeting_registration_data @@ -157,7 +157,8 @@ class StatisticsTests(TestCase): def test_review_stats(self): reviewer = PersonFactory() - review_req = ReviewRequestFactory(reviewer=reviewer.email_set.first()) + review_req = ReviewRequestFactory() + ReviewAssignmentFactory(review_request=review_req, reviewer=reviewer.email_set.first()) RoleFactory(group=review_req.team,name_id='reviewer',person=reviewer) ReviewerSettingsFactory(team=review_req.team, person=reviewer) PersonFactory(user__username='plain') diff --git a/ietf/templates/ietfauth/review_overview.html b/ietf/templates/ietfauth/review_overview.html index 1451f5458..e79259a5b 100644 --- a/ietf/templates/ietfauth/review_overview.html +++ b/ietf/templates/ietfauth/review_overview.html @@ -17,7 +17,7 @@

Assigned reviews

- {% if open_review_requests %} + {% if open_review_assignments %} @@ -30,15 +30,15 @@ - {% for r in open_review_requests %} + {% for r in open_review_assignments %} - - - - - + + + + + @@ -50,9 +50,9 @@ {% endif %} -

Latest closed review requests

+

Latest closed review assignments

- {% if closed_review_requests %} + {% if closed_review_assignments %}
{{ r.doc.name }}{% if r.requested_rev %}{{ r.requested_rev }}{% else %}Current{% endif %}{{r.doc.rev}}{{ r.team.acronym }}{{ r.type.name }}{{ r.review_request.doc.name }}{% if r.review_request.requested_rev %}{{ r.review_request.requested_rev }}{% else %}Current{% endif %}{{r.review_request.doc.rev}}{{ r.review_request.team.acronym }}{{ r.review_request.type.name }} - {{ r.deadline|date:"Y-m-d" }} + {{ r.review_request.deadline|date:"Y-m-d" }} {% if r.due %}{{ r.due }} day{{ r.due|pluralize }}{% endif %}
@@ -66,14 +66,14 @@ - {% for r in closed_review_requests %} + {% for r in closed_review_assignments %} - - - - + + + +
{{ r.doc.name }}{{r.reviewed_rev|default:"See review"}}{% if r.requested_rev %}{% if r.requested_rev != r.reviewed_rev %}({{ r.requested_rev }} requested){% endif %}{% endif %}{{ r.team.acronym }}{{ r.type.name }}{{ r.review_request.doc.name }}{{r.reviewed_rev|default:"See review"}}{% if r.review_request.requested_rev %}{% if r.review_request.requested_rev != r.reviewed_rev %}({{ r.review_request.requested_rev }} requested){% endif %}{% endif %}{{ r.review_request.team.acronym }}{{ r.review_request.type.name }} - {{ r.deadline|date:"Y-m-d" }} + {{ r.review_request.deadline|date:"Y-m-d" }} {% if r.due %}{{ r.due }} day{{ r.due|pluralize }}{% endif %} {{ r.state.name }}