|
33 | 33 | from ietf.review.factories import ReviewRequestFactory, ReviewAssignmentFactory |
34 | 34 | from ietf.review.models import (ReviewRequest, ReviewerSettings, |
35 | 35 | ReviewWish, UnavailablePeriod, NextReviewerInTeam) |
36 | | -from ietf.review.utils import reviewer_rotation_list, possibly_advance_next_reviewer_for_team |
| 36 | +from ietf.review.policies import policy_for_team |
37 | 37 |
|
38 | 38 | from ietf.utils.test_utils import TestCase |
39 | | -from ietf.utils.test_data import create_person |
40 | 39 | from ietf.utils.test_utils import login_testing_unauthorized, reload_db_objects |
41 | 40 | from ietf.utils.mail import outbox, empty_outbox, parseaddr, on_behalf_of |
42 | 41 | from ietf.person.factories import PersonFactory |
@@ -232,95 +231,8 @@ def test_close_request(self): |
232 | 231 | self.assertIn("closed", mail_content) |
233 | 232 | self.assertIn("review_request_close_comment", mail_content) |
234 | 233 |
|
235 | | - def test_possibly_advance_next_reviewer_for_team(self): |
236 | | - |
237 | | - team = ReviewTeamFactory(acronym="rotationteam", name="Review Team", list_email="rotationteam@ietf.org", parent=Group.objects.get(acronym="farfut")) |
238 | | - doc = WgDraftFactory() |
239 | | - |
240 | | - # make a bunch of reviewers |
241 | | - reviewers = [ |
242 | | - create_person(team, "reviewer", name="Test Reviewer{}".format(i), username="testreviewer{}".format(i)) |
243 | | - for i in range(5) |
244 | | - ] |
245 | | - |
246 | | - self.assertEqual(reviewers, reviewer_rotation_list(team)) |
247 | | - |
248 | | - def get_skip_next(person): |
249 | | - settings = (ReviewerSettings.objects.filter(team=team, person=person).first() |
250 | | - or ReviewerSettings(team=team)) |
251 | | - return settings.skip_next |
252 | | - |
253 | | - possibly_advance_next_reviewer_for_team(team, assigned_review_to_person_id=reviewers[0].pk, add_skip=False) |
254 | | - self.assertEqual(NextReviewerInTeam.objects.get(team=team).next_reviewer, reviewers[1]) |
255 | | - self.assertEqual(get_skip_next(reviewers[0]), 0) |
256 | | - self.assertEqual(get_skip_next(reviewers[1]), 0) |
257 | | - |
258 | | - possibly_advance_next_reviewer_for_team(team, assigned_review_to_person_id=reviewers[1].pk, add_skip=True) |
259 | | - self.assertEqual(NextReviewerInTeam.objects.get(team=team).next_reviewer, reviewers[2]) |
260 | | - self.assertEqual(get_skip_next(reviewers[1]), 1) |
261 | | - self.assertEqual(get_skip_next(reviewers[2]), 0) |
262 | | - |
263 | | - # skip reviewer 2 |
264 | | - possibly_advance_next_reviewer_for_team(team, assigned_review_to_person_id=reviewers[3].pk, add_skip=True) |
265 | | - self.assertEqual(NextReviewerInTeam.objects.get(team=team).next_reviewer, reviewers[2]) |
266 | | - self.assertEqual(get_skip_next(reviewers[0]), 0) |
267 | | - self.assertEqual(get_skip_next(reviewers[1]), 1) |
268 | | - self.assertEqual(get_skip_next(reviewers[2]), 0) |
269 | | - self.assertEqual(get_skip_next(reviewers[3]), 1) |
270 | | - |
271 | | - # pick reviewer 2, use up reviewer 3's skip_next |
272 | | - possibly_advance_next_reviewer_for_team(team, assigned_review_to_person_id=reviewers[2].pk, add_skip=False) |
273 | | - self.assertEqual(NextReviewerInTeam.objects.get(team=team).next_reviewer, reviewers[4]) |
274 | | - self.assertEqual(get_skip_next(reviewers[0]), 0) |
275 | | - self.assertEqual(get_skip_next(reviewers[1]), 1) |
276 | | - self.assertEqual(get_skip_next(reviewers[2]), 0) |
277 | | - self.assertEqual(get_skip_next(reviewers[3]), 0) |
278 | | - self.assertEqual(get_skip_next(reviewers[4]), 0) |
279 | | - |
280 | | - # check wrap-around |
281 | | - possibly_advance_next_reviewer_for_team(team, assigned_review_to_person_id=reviewers[4].pk) |
282 | | - self.assertEqual(NextReviewerInTeam.objects.get(team=team).next_reviewer, reviewers[0]) |
283 | | - self.assertEqual(get_skip_next(reviewers[0]), 0) |
284 | | - self.assertEqual(get_skip_next(reviewers[1]), 1) |
285 | | - self.assertEqual(get_skip_next(reviewers[2]), 0) |
286 | | - self.assertEqual(get_skip_next(reviewers[3]), 0) |
287 | | - self.assertEqual(get_skip_next(reviewers[4]), 0) |
288 | | - |
289 | | - # unavailable |
290 | | - today = datetime.date.today() |
291 | | - UnavailablePeriod.objects.create(team=team, person=reviewers[1], start_date=today, end_date=today, availability="unavailable") |
292 | | - possibly_advance_next_reviewer_for_team(team, assigned_review_to_person_id=reviewers[0].pk) |
293 | | - self.assertEqual(NextReviewerInTeam.objects.get(team=team).next_reviewer, reviewers[2]) |
294 | | - self.assertEqual(get_skip_next(reviewers[0]), 0) |
295 | | - self.assertEqual(get_skip_next(reviewers[1]), 1) # don't consume that skip while the reviewer is unavailable |
296 | | - self.assertEqual(get_skip_next(reviewers[2]), 0) |
297 | | - self.assertEqual(get_skip_next(reviewers[3]), 0) |
298 | | - self.assertEqual(get_skip_next(reviewers[4]), 0) |
299 | | - |
300 | | - # pick unavailable anyway |
301 | | - possibly_advance_next_reviewer_for_team(team, assigned_review_to_person_id=reviewers[1].pk, add_skip=False) |
302 | | - self.assertEqual(NextReviewerInTeam.objects.get(team=team).next_reviewer, reviewers[2]) |
303 | | - self.assertEqual(get_skip_next(reviewers[0]), 0) |
304 | | - self.assertEqual(get_skip_next(reviewers[1]), 1) |
305 | | - self.assertEqual(get_skip_next(reviewers[2]), 0) |
306 | | - self.assertEqual(get_skip_next(reviewers[3]), 0) |
307 | | - self.assertEqual(get_skip_next(reviewers[4]), 0) |
308 | | - |
309 | | - # not through min_interval so advance past reviewer[2] |
310 | | - settings, _ = ReviewerSettings.objects.get_or_create(team=team, person=reviewers[2]) |
311 | | - settings.min_interval = 30 |
312 | | - settings.save() |
313 | | - req = ReviewRequest.objects.create(team=team, doc=doc, type_id="early", state_id="assigned", deadline=today, requested_by=reviewers[0]) |
314 | | - ReviewAssignmentFactory(review_request=req, state_id="accepted", reviewer = reviewers[2].email_set.first(),assigned_on = req.time) |
315 | | - possibly_advance_next_reviewer_for_team(team, assigned_review_to_person_id=reviewers[3].pk) |
316 | | - self.assertEqual(NextReviewerInTeam.objects.get(team=team).next_reviewer, reviewers[4]) |
317 | | - self.assertEqual(get_skip_next(reviewers[0]), 0) |
318 | | - self.assertEqual(get_skip_next(reviewers[1]), 1) |
319 | | - self.assertEqual(get_skip_next(reviewers[2]), 0) |
320 | | - self.assertEqual(get_skip_next(reviewers[3]), 0) |
321 | | - self.assertEqual(get_skip_next(reviewers[4]), 0) |
322 | | - |
323 | 234 | def test_assign_reviewer(self): |
| 235 | + # TODO: this test overlaps way too much with the reviewer policy |
324 | 236 | doc = WgDraftFactory(pages=2) |
325 | 237 | review_team = ReviewTeamFactory(acronym="reviewteam", name="Review Team", type_id="review", list_email="reviewteam@ietf.org", parent=Group.objects.get(acronym="farfut")) |
326 | 238 | rev_role = RoleFactory(group=review_team,person__user__username='reviewer',person__user__email='reviewer@example.com',person__name='Some Reviewer',name_id='reviewer') |
@@ -413,7 +325,7 @@ def test_assign_reviewer(self): |
413 | 325 |
|
414 | 326 | # assign |
415 | 327 | empty_outbox() |
416 | | - rotation_list = reviewer_rotation_list(review_req.team) |
| 328 | + rotation_list = policy_for_team(review_req.team).reviewer_rotation_list(review_req.team) |
417 | 329 | reviewer = Email.objects.filter(role__name="reviewer", role__group=review_req.team, person=rotation_list[0]).first() |
418 | 330 | r = self.client.post(assign_url, { "action": "assign", "reviewer": reviewer.pk }) |
419 | 331 | self.assertEqual(r.status_code, 302) |
|
0 commit comments