|
4 | 4 |
|
5 | 5 | from ietf.doc.factories import WgDraftFactory |
6 | 6 | from ietf.group.factories import ReviewTeamFactory |
7 | | -from ietf.group.models import Group |
| 7 | +from ietf.group.models import Group, Role |
8 | 8 | from ietf.review.factories import ReviewAssignmentFactory |
9 | 9 | from ietf.review.models import ReviewerSettings, NextReviewerInTeam, UnavailablePeriod, \ |
10 | 10 | ReviewRequest |
|
14 | 14 |
|
15 | 15 |
|
16 | 16 | class RotateWithSkipReviewerPolicyTests(TestCase): |
17 | | - def test_possibly_advance_next_reviewer_for_team(self): |
| 17 | + def test_default_reviewer_rotation_list(self): |
| 18 | + team = ReviewTeamFactory(acronym="rotationteam", name="Review Team", list_email="rotationteam@ietf.org", parent=Group.objects.get(acronym="farfut")) |
| 19 | + policy = get_reviewer_queue_policy(team) |
| 20 | + |
| 21 | + reviewers = [ |
| 22 | + create_person(team, "reviewer", name="Test Reviewer{}".format(i), username="testreviewer{}".format(i)) |
| 23 | + for i in range(5) |
| 24 | + ] |
| 25 | + reviewers_pks = [r.pk for r in reviewers] |
| 26 | + |
| 27 | + # This reviewer should never be included. |
| 28 | + unavailable_reviewer = create_person(team, "reviewer", name="unavailable reviewer", username="unavailablereviewer") |
| 29 | + UnavailablePeriod.objects.create( |
| 30 | + team=team, |
| 31 | + person=unavailable_reviewer, |
| 32 | + start_date='2000-01-01', |
| 33 | + end_date='3000-01-01', |
| 34 | + availability=UnavailablePeriod.AVAILABILITY_CHOICES[0], |
| 35 | + ) |
| 36 | + |
| 37 | + # Default policy without a NextReviewerInTeam |
| 38 | + rotation = policy.default_reviewer_rotation_list(skip_unavailable=True) |
| 39 | + self.assertNotIn(unavailable_reviewer.pk, rotation) |
| 40 | + self.assertEqual(rotation, reviewers_pks) |
| 41 | + |
| 42 | + # Policy with a current NextReviewerInTeam |
| 43 | + NextReviewerInTeam.objects.create(team=team, next_reviewer=reviewers[3]) |
| 44 | + rotation = policy.default_reviewer_rotation_list(skip_unavailable=True) |
| 45 | + self.assertNotIn(unavailable_reviewer.pk, rotation) |
| 46 | + self.assertEqual(rotation, reviewers_pks[3:] + reviewers_pks[:3]) |
| 47 | + |
| 48 | + # Policy with a NextReviewerInTeam that has left the team. |
| 49 | + Role.objects.get(person=reviewers[1]).delete() |
| 50 | + NextReviewerInTeam.objects.filter(team=team).update(next_reviewer=reviewers[1]) |
| 51 | + rotation = policy.default_reviewer_rotation_list(skip_unavailable=True) |
| 52 | + self.assertNotIn(unavailable_reviewer.pk, rotation) |
| 53 | + self.assertEqual(rotation, reviewers_pks[2:] + reviewers_pks[:1]) |
| 54 | + |
| 55 | + def test_update_policy_state_for_assignment(self): |
18 | 56 |
|
19 | 57 | team = ReviewTeamFactory(acronym="rotationteam", name="Review Team", list_email="rotationteam@ietf.org", parent=Group.objects.get(acronym="farfut")) |
20 | 58 | policy = get_reviewer_queue_policy(team) |
|
0 commit comments