Checkpoint. Most tests do not fail. Oddness with an API resource, and with one template's coverage
- Legacy-Id: 16031
This commit is contained in:
parent
a4db66564c
commit
0856990683
|
@ -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 })
|
||||
|
||||
|
|
|
@ -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
|
||||
|
|
|
@ -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)
|
||||
|
|
|
@ -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)
|
||||
|
|
|
@ -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:
|
||||
|
|
|
@ -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,
|
||||
|
|
|
@ -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,
|
||||
|
|
|
@ -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())
|
||||
|
|
|
@ -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')
|
||||
|
|
|
@ -17,7 +17,7 @@
|
|||
|
||||
<h2>Assigned reviews</h2>
|
||||
|
||||
{% if open_review_requests %}
|
||||
{% if open_review_assignments %}
|
||||
<table class="table table-condensed table-striped">
|
||||
<thead>
|
||||
<tr>
|
||||
|
@ -30,15 +30,15 @@
|
|||
</tr>
|
||||
</thead>
|
||||
<tbody>
|
||||
{% for r in open_review_requests %}
|
||||
{% for r in open_review_assignments %}
|
||||
<tr>
|
||||
<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 }}</a></td>
|
||||
<td>{% if r.requested_rev %}{{ r.requested_rev }}{% else %}Current{% endif %}</td>
|
||||
<td>{{r.doc.rev}}</td>
|
||||
<td><a href="{% url 'ietf.group.views.review_requests' acronym=r.team.acronym %}">{{ r.team.acronym }}</a></td>
|
||||
<td>{{ r.type.name }}</td>
|
||||
<td><a {% if r.pk != None %}href="{% url "ietf.doc.views_review.review_request" name=r.review_request.doc.name request_id=r.review_request.pk %}"{% endif %}>{{ r.review_request.doc.name }}</a></td>
|
||||
<td>{% if r.review_request.requested_rev %}{{ r.review_request.requested_rev }}{% else %}Current{% endif %}</td>
|
||||
<td>{{r.review_request.doc.rev}}</td>
|
||||
<td><a href="{% url 'ietf.group.views.review_requests' acronym=r.review_request.team.acronym %}">{{ r.review_request.team.acronym }}</a></td>
|
||||
<td>{{ r.review_request.type.name }}</td>
|
||||
<td>
|
||||
{{ r.deadline|date:"Y-m-d" }}
|
||||
{{ r.review_request.deadline|date:"Y-m-d" }}
|
||||
{% if r.due %}<span class="label label-warning">{{ r.due }} day{{ r.due|pluralize }}</span>{% endif %}
|
||||
</td>
|
||||
</tr>
|
||||
|
@ -50,9 +50,9 @@
|
|||
{% endif %}
|
||||
|
||||
|
||||
<h2>Latest closed review requests</h2>
|
||||
<h2>Latest closed review assignments</h2>
|
||||
|
||||
{% if closed_review_requests %}
|
||||
{% if closed_review_assignments %}
|
||||
<table class="table table-condensed table-striped">
|
||||
<thead>
|
||||
<tr>
|
||||
|
@ -66,14 +66,14 @@
|
|||
</tr>
|
||||
</thead>
|
||||
<tbody>
|
||||
{% for r in closed_review_requests %}
|
||||
{% for r in closed_review_assignments %}
|
||||
<tr>
|
||||
<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 }}</a></td>
|
||||
<td>{{r.reviewed_rev|default:"See review"}}{% if r.requested_rev %}{% if r.requested_rev != r.reviewed_rev %}({{ r.requested_rev }} requested){% endif %}{% endif %}</td>
|
||||
<td><a href="{% url 'ietf.group.views.review_requests' acronym=r.team.acronym %}">{{ r.team.acronym }}</a></td>
|
||||
<td>{{ r.type.name }}</td>
|
||||
<td><a {% if r.pk != None %}href="{% url "ietf.doc.views_review.review_request" name=r.review_request.doc.name request_id=r.review_request.pk %}"{% endif %}>{{ r.review_request.doc.name }}</a></td>
|
||||
<td>{{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 %}</td>
|
||||
<td><a href="{% url 'ietf.group.views.review_requests' acronym=r.review_request.team.acronym %}">{{ r.review_request.team.acronym }}</a></td>
|
||||
<td>{{ r.review_request.type.name }}</td>
|
||||
<td>
|
||||
{{ r.deadline|date:"Y-m-d" }}
|
||||
{{ r.review_request.deadline|date:"Y-m-d" }}
|
||||
{% if r.due %}<span class="label label-warning">{{ r.due }} day{{ r.due|pluralize }}</span>{% endif %}
|
||||
</td>
|
||||
<td><span class="{% if r.state_id == "completed" or r.state_id == "part-completed" %}bg-success{% endif %}">{{ r.state.name }}</span></td>
|
||||
|
|
Loading…
Reference in a new issue