Skip to content

Commit 8ebef27

Browse files
committed
Related to issue ietf-tools#2186: The issue asked for changing review requests from state 'assigned' back to state 'requested' if the last associated assignment is withdrawn. However, the code to implement this makes the change for all assignment states, and also when there has been no state change. Changed to be more discerning.
- Legacy-Id: 18722
1 parent a0938d9 commit 8ebef27

File tree

2 files changed

+28
-10
lines changed

2 files changed

+28
-10
lines changed

ietf/review/models.py

Lines changed: 17 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -8,6 +8,8 @@
88

99
from django.db import models
1010

11+
import debug # pyflakes:ignore
12+
1113
from ietf.doc.models import Document
1214
from ietf.group.models import Group
1315
from ietf.person.models import Person, Email
@@ -152,6 +154,12 @@ class ReviewAssignment(models.Model):
152154
result = ForeignKey(ReviewResultName, blank=True, null=True)
153155
mailarch_url = models.URLField(blank=True, null = True)
154156

157+
_original_state = None
158+
159+
def __init__(self, *args, **kwargs):
160+
super().__init__(*args, **kwargs)
161+
self._original_state = self.state_id
162+
155163
def __str__(self):
156164
return "Assignment for %s (%s) : %s %s of %s" % (self.reviewer.person, self.state, self.review_request.team.acronym, self.review_request.type, self.review_request.doc)
157165

@@ -161,13 +169,15 @@ def save(self, *args, **kwargs):
161169
If the review request has no other active or completed reviews, the review request
162170
needs to be treated as an unassigned request, as it will need a new reviewer.
163171
"""
164-
super(ReviewAssignment, self).save(*args, **kwargs)
165-
active_states = ['assigned', 'accepted', 'completed']
166-
review_req_has_active_assignments = self.review_request.reviewassignment_set.filter(state__in=active_states)
167-
if self.review_request.state_id == 'assigned' and not review_req_has_active_assignments:
168-
self.review_request.state_id = 'requested'
169-
self.review_request.save()
170-
172+
super().save(*args, **kwargs)
173+
if self._original_state != self.state_id:
174+
if self.state_id in ['withdrawn', 'rejected', 'no-response', 'overtaken']:
175+
active_req_states = ['assigned', 'accepted', 'completed']
176+
review_req_has_active_assignments = self.review_request.reviewassignment_set.filter(state__in=active_req_states)
177+
if self.review_request.state_id == 'assigned' and not review_req_has_active_assignments:
178+
self.review_request.state_id = 'requested'
179+
self.review_request.save()
180+
self._original_state = self.state_id
171181

172182
def get_default_review_types():
173183
return ReviewTypeName.objects.filter(slug__in=['early','lc','telechat'])

ietf/review/tests.py

Lines changed: 11 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -24,15 +24,23 @@ def test_hash_list_message_id(self):
2424

2525

2626
class ReviewAssignmentTest(TestCase):
27-
def test_update_review_req_status(self):
27+
def do_test_update_review_req_status(self, assignment_state, expected_state):
2828
review_req = ReviewRequestFactory(state_id='assigned')
2929
ReviewAssignmentFactory(review_request=review_req, state_id='part-completed')
3030
assignment = ReviewAssignmentFactory(review_request=review_req)
3131

32-
assignment.state_id = 'no-response'
32+
assignment.state_id = assignment_state
3333
assignment.save()
3434
review_req = reload_db_objects(review_req)
35-
self.assertEqual(review_req.state_id, 'requested')
35+
self.assertEqual(review_req.state_id, expected_state)
36+
37+
def test_update_review_req_status(self):
38+
# Test change
39+
for assignment_state in ['no-response', 'rejected', 'withdrawn', 'overtaken']:
40+
self.do_test_update_review_req_status(assignment_state, 'requested')
41+
# Test no-change
42+
for assignment_state in ['accepted', 'assigned', 'completed', 'part-completed', 'unknown', ]:
43+
self.do_test_update_review_req_status('', 'assigned')
3644

3745
def test_no_update_review_req_status_when_other_active_assignment(self):
3846
# If there is another still active assignment, do not update review_req state

0 commit comments

Comments
 (0)