Fix issue where queue might not advance correctly while managing

unassigned reviews, when some reviewers have a skip count.
 - Legacy-Id: 17060
This commit is contained in:
Sasha Romijn 2019-11-19 11:53:12 +00:00
parent b1eb2643f0
commit 3db8a0f39d
2 changed files with 10 additions and 4 deletions

View file

@ -1542,13 +1542,13 @@ def manage_review_requests(request, acronym, group_type=None, assignment_status=
# of the rotation queue are processed first so that the queue
# rotates before any more assignments are processed
reviewer_policy = get_reviewer_queue_policy(group)
head_of_rotation = reviewer_policy.default_reviewer_rotation_list()[0]
head_of_rotation = reviewer_policy.default_reviewer_rotation_list_without_skipped()[0]
while head_of_rotation in assignments_by_person:
for review_req in assignments_by_person[head_of_rotation]:
assign_review_request_to_reviewer(request, review_req, review_req.form.cleaned_data["reviewer"],review_req.form.cleaned_data["add_skip"])
reqs_to_assign.remove(review_req)
del assignments_by_person[head_of_rotation]
head_of_rotation = reviewer_policy.default_reviewer_rotation_list()[0]
head_of_rotation = reviewer_policy.default_reviewer_rotation_list_without_skipped()[0]
for review_req in reqs_to_assign:
assign_review_request_to_reviewer(request, review_req, review_req.form.cleaned_data["reviewer"],review_req.form.cleaned_data["add_skip"])

View file

@ -57,6 +57,13 @@ class AbstractReviewerQueuePolicy:
and should retroactively not have been rotated over.
"""
raise NotImplementedError # pragma: no cover
def default_reviewer_rotation_list_without_skipped(self):
"""
Return a list of reviewers (Person objects) in the default reviewer rotation for a policy,
while skipping those with a skip_next>0.
"""
return [r for r in self.default_reviewer_rotation_list() if not self._reviewer_settings_for(r).skip_next]
def update_policy_state_for_assignment(self, assignee_person, add_skip=False):
"""
@ -78,8 +85,7 @@ class AbstractReviewerQueuePolicy:
if not rotation_list:
return
rotation_list_without_skip = [r for r in rotation_list if
not self._reviewer_settings_for(r).skip_next]
rotation_list_without_skip = self.default_reviewer_rotation_list_without_skipped()
# In order means: assigned to the first person in the rotation list with skip_next=0
# If the assignment is not in order, skip_next and NextReviewerInTeam are not modified.
in_order_assignment = rotation_list_without_skip[0] == assignee_person