3333from ietf .person .models import Email , Person
3434from ietf .review .factories import ReviewRequestFactory , ReviewAssignmentFactory
3535from ietf .review .models import (ReviewRequest , ReviewerSettings ,
36- ReviewWish , UnavailablePeriod , NextReviewerInTeam )
37- from ietf .review .utils import reviewer_rotation_list , possibly_advance_next_reviewer_for_team
36+ ReviewWish , NextReviewerInTeam )
37+ from ietf .review .policies import get_reviewer_queue_policy
3838
3939from ietf .utils .test_utils import TestCase
40- from ietf .utils .test_data import create_person
4140from ietf .utils .test_utils import login_testing_unauthorized , reload_db_objects
4241from ietf .utils .mail import outbox , empty_outbox , parseaddr , on_behalf_of
4342from ietf .person .factories import PersonFactory
@@ -233,101 +232,14 @@ def test_close_request(self):
233232 self .assertIn ("closed" , mail_content )
234233 self .assertIn ("review_request_close_comment" , mail_content )
235234
236- def test_possibly_advance_next_reviewer_for_team (self ):
237-
238- team = ReviewTeamFactory (acronym = "rotationteam" , name = "Review Team" , list_email = "rotationteam@ietf.org" , parent = Group .objects .get (acronym = "farfut" ))
239- doc = WgDraftFactory ()
240-
241- # make a bunch of reviewers
242- reviewers = [
243- create_person (team , "reviewer" , name = "Test Reviewer{}" .format (i ), username = "testreviewer{}" .format (i ))
244- for i in range (5 )
245- ]
246-
247- self .assertEqual (reviewers , reviewer_rotation_list (team ))
248-
249- def get_skip_next (person ):
250- settings = (ReviewerSettings .objects .filter (team = team , person = person ).first ()
251- or ReviewerSettings (team = team ))
252- return settings .skip_next
253-
254- possibly_advance_next_reviewer_for_team (team , assigned_review_to_person_id = reviewers [0 ].pk , add_skip = False )
255- self .assertEqual (NextReviewerInTeam .objects .get (team = team ).next_reviewer , reviewers [1 ])
256- self .assertEqual (get_skip_next (reviewers [0 ]), 0 )
257- self .assertEqual (get_skip_next (reviewers [1 ]), 0 )
258-
259- possibly_advance_next_reviewer_for_team (team , assigned_review_to_person_id = reviewers [1 ].pk , add_skip = True )
260- self .assertEqual (NextReviewerInTeam .objects .get (team = team ).next_reviewer , reviewers [2 ])
261- self .assertEqual (get_skip_next (reviewers [1 ]), 1 )
262- self .assertEqual (get_skip_next (reviewers [2 ]), 0 )
263-
264- # skip reviewer 2
265- possibly_advance_next_reviewer_for_team (team , assigned_review_to_person_id = reviewers [3 ].pk , add_skip = True )
266- self .assertEqual (NextReviewerInTeam .objects .get (team = team ).next_reviewer , reviewers [2 ])
267- self .assertEqual (get_skip_next (reviewers [0 ]), 0 )
268- self .assertEqual (get_skip_next (reviewers [1 ]), 1 )
269- self .assertEqual (get_skip_next (reviewers [2 ]), 0 )
270- self .assertEqual (get_skip_next (reviewers [3 ]), 1 )
271-
272- # pick reviewer 2, use up reviewer 3's skip_next
273- possibly_advance_next_reviewer_for_team (team , assigned_review_to_person_id = reviewers [2 ].pk , add_skip = False )
274- self .assertEqual (NextReviewerInTeam .objects .get (team = team ).next_reviewer , reviewers [4 ])
275- self .assertEqual (get_skip_next (reviewers [0 ]), 0 )
276- self .assertEqual (get_skip_next (reviewers [1 ]), 1 )
277- self .assertEqual (get_skip_next (reviewers [2 ]), 0 )
278- self .assertEqual (get_skip_next (reviewers [3 ]), 0 )
279- self .assertEqual (get_skip_next (reviewers [4 ]), 0 )
280-
281- # check wrap-around
282- possibly_advance_next_reviewer_for_team (team , assigned_review_to_person_id = reviewers [4 ].pk )
283- self .assertEqual (NextReviewerInTeam .objects .get (team = team ).next_reviewer , reviewers [0 ])
284- self .assertEqual (get_skip_next (reviewers [0 ]), 0 )
285- self .assertEqual (get_skip_next (reviewers [1 ]), 1 )
286- self .assertEqual (get_skip_next (reviewers [2 ]), 0 )
287- self .assertEqual (get_skip_next (reviewers [3 ]), 0 )
288- self .assertEqual (get_skip_next (reviewers [4 ]), 0 )
289-
290- # unavailable
291- today = datetime .date .today ()
292- UnavailablePeriod .objects .create (team = team , person = reviewers [1 ], start_date = today , end_date = today , availability = "unavailable" )
293- possibly_advance_next_reviewer_for_team (team , assigned_review_to_person_id = reviewers [0 ].pk )
294- self .assertEqual (NextReviewerInTeam .objects .get (team = team ).next_reviewer , reviewers [2 ])
295- self .assertEqual (get_skip_next (reviewers [0 ]), 0 )
296- self .assertEqual (get_skip_next (reviewers [1 ]), 1 ) # don't consume that skip while the reviewer is unavailable
297- self .assertEqual (get_skip_next (reviewers [2 ]), 0 )
298- self .assertEqual (get_skip_next (reviewers [3 ]), 0 )
299- self .assertEqual (get_skip_next (reviewers [4 ]), 0 )
300-
301- # pick unavailable anyway
302- possibly_advance_next_reviewer_for_team (team , assigned_review_to_person_id = reviewers [1 ].pk , add_skip = False )
303- self .assertEqual (NextReviewerInTeam .objects .get (team = team ).next_reviewer , reviewers [2 ])
304- self .assertEqual (get_skip_next (reviewers [0 ]), 0 )
305- self .assertEqual (get_skip_next (reviewers [1 ]), 1 )
306- self .assertEqual (get_skip_next (reviewers [2 ]), 0 )
307- self .assertEqual (get_skip_next (reviewers [3 ]), 0 )
308- self .assertEqual (get_skip_next (reviewers [4 ]), 0 )
309-
310- # not through min_interval so advance past reviewer[2]
311- settings , _ = ReviewerSettings .objects .get_or_create (team = team , person = reviewers [2 ])
312- settings .min_interval = 30
313- settings .save ()
314- req = ReviewRequest .objects .create (team = team , doc = doc , type_id = "early" , state_id = "assigned" , deadline = today , requested_by = reviewers [0 ])
315- ReviewAssignmentFactory (review_request = req , state_id = "accepted" , reviewer = reviewers [2 ].email_set .first (),assigned_on = req .time )
316- possibly_advance_next_reviewer_for_team (team , assigned_review_to_person_id = reviewers [3 ].pk )
317- self .assertEqual (NextReviewerInTeam .objects .get (team = team ).next_reviewer , reviewers [4 ])
318- self .assertEqual (get_skip_next (reviewers [0 ]), 0 )
319- self .assertEqual (get_skip_next (reviewers [1 ]), 1 )
320- self .assertEqual (get_skip_next (reviewers [2 ]), 0 )
321- self .assertEqual (get_skip_next (reviewers [3 ]), 0 )
322- self .assertEqual (get_skip_next (reviewers [4 ]), 0 )
323-
324235 def test_assign_reviewer (self ):
325236 doc = WgDraftFactory (pages = 2 )
326237 review_team = ReviewTeamFactory (acronym = "reviewteam" , name = "Review Team" , type_id = "review" , list_email = "reviewteam@ietf.org" , parent = Group .objects .get (acronym = "farfut" ))
327238 rev_role = RoleFactory (group = review_team ,person__user__username = 'reviewer' ,person__user__email = 'reviewer@example.com' ,person__name = 'Some Reviewer' ,name_id = 'reviewer' )
328239 RoleFactory (group = review_team ,person__user__username = 'marschairman' ,person__name = 'WG Cháir Man' ,name_id = 'reviewer' )
329240 secretary = RoleFactory (group = review_team ,person__user__username = 'reviewsecretary' ,person__user__email = 'reviewsecretary@example.com' ,name_id = 'secr' )
330241 ReviewerSettings .objects .create (team = review_team , person = rev_role .person , min_interval = 14 , skip_next = 0 )
242+ queue_policy = get_reviewer_queue_policy (review_team )
331243
332244 # review to assign to
333245 review_req = ReviewRequestFactory (team = review_team ,doc = doc ,state_id = 'requested' )
@@ -369,17 +281,8 @@ def test_assign_reviewer(self):
369281 another_reviewer = PersonFactory .create (name = "Extra TestReviewer" ) # needs to be lexically greater than the existing one
370282 another_reviewer .role_set .create (name_id = 'reviewer' , email = another_reviewer .email (), group = review_req .team )
371283
372- UnavailablePeriod .objects .create (
373- team = review_req .team ,
374- person = reviewer_email .person ,
375- start_date = datetime .date .today () - datetime .timedelta (days = 10 ),
376- availability = "unavailable" ,
377- )
378-
379284 ReviewWish .objects .create (person = reviewer_email .person , team = review_req .team , doc = doc )
380285
381- # pick a non-existing reviewer as next to see that we can
382- # handle reviewers who have left
383286 NextReviewerInTeam .objects .filter (team = review_req .team ).delete ()
384287 NextReviewerInTeam .objects .create (
385288 team = review_req .team ,
@@ -407,14 +310,13 @@ def test_assign_reviewer(self):
407310 self .assertIn ("wishes to review" , reviewer_label )
408311 self .assertIn ("is author" , reviewer_label )
409312 self .assertIn ("regexp matches" , reviewer_label )
410- self .assertIn ("unavailable indefinitely" , reviewer_label )
411313 self .assertIn ("skip next 1" , reviewer_label )
412314 self .assertIn ("#1" , reviewer_label )
413315 self .assertIn ("1 fully completed" , reviewer_label )
414316
415317 # assign
416318 empty_outbox ()
417- rotation_list = reviewer_rotation_list ( review_req . team )
319+ rotation_list = queue_policy . default_reviewer_rotation_list ( )
418320 reviewer = Email .objects .filter (role__name = "reviewer" , role__group = review_req .team , person = rotation_list [0 ]).first ()
419321 r = self .client .post (assign_url , { "action" : "assign" , "reviewer" : reviewer .pk })
420322 self .assertEqual (r .status_code , 302 )
@@ -425,7 +327,6 @@ def test_assign_reviewer(self):
425327 assignment = review_req .reviewassignment_set .first ()
426328 self .assertEqual (assignment .reviewer , reviewer )
427329 self .assertEqual (assignment .state_id , "assigned" )
428- self .assertEqual (NextReviewerInTeam .objects .get (team = review_req .team ).next_reviewer , rotation_list [1 ])
429330
430331 self .assertEqual (len (outbox ), 1 )
431332 self .assertEqual ('"Some Reviewer" <reviewer@example.com>' , outbox [0 ]["To" ])
0 commit comments