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
@@ -235,101 +234,14 @@ def test_close_request(self):
235234 self .assertIn ("closed" , mail_content )
236235 self .assertIn ("review_request_close_comment" , mail_content )
237236
238- def test_possibly_advance_next_reviewer_for_team (self ):
239-
240- team = ReviewTeamFactory (acronym = "rotationteam" , name = "Review Team" , list_email = "rotationteam@ietf.org" , parent = Group .objects .get (acronym = "farfut" ))
241- doc = WgDraftFactory ()
242-
243- # make a bunch of reviewers
244- reviewers = [
245- create_person (team , "reviewer" , name = "Test Reviewer{}" .format (i ), username = "testreviewer{}" .format (i ))
246- for i in range (5 )
247- ]
248-
249- self .assertEqual (reviewers , reviewer_rotation_list (team ))
250-
251- def get_skip_next (person ):
252- settings = (ReviewerSettings .objects .filter (team = team , person = person ).first ()
253- or ReviewerSettings (team = team ))
254- return settings .skip_next
255-
256- possibly_advance_next_reviewer_for_team (team , assigned_review_to_person_id = reviewers [0 ].pk , add_skip = False )
257- self .assertEqual (NextReviewerInTeam .objects .get (team = team ).next_reviewer , reviewers [1 ])
258- self .assertEqual (get_skip_next (reviewers [0 ]), 0 )
259- self .assertEqual (get_skip_next (reviewers [1 ]), 0 )
260-
261- possibly_advance_next_reviewer_for_team (team , assigned_review_to_person_id = reviewers [1 ].pk , add_skip = True )
262- self .assertEqual (NextReviewerInTeam .objects .get (team = team ).next_reviewer , reviewers [2 ])
263- self .assertEqual (get_skip_next (reviewers [1 ]), 1 )
264- self .assertEqual (get_skip_next (reviewers [2 ]), 0 )
265-
266- # skip reviewer 2
267- possibly_advance_next_reviewer_for_team (team , assigned_review_to_person_id = reviewers [3 ].pk , add_skip = True )
268- self .assertEqual (NextReviewerInTeam .objects .get (team = team ).next_reviewer , reviewers [2 ])
269- self .assertEqual (get_skip_next (reviewers [0 ]), 0 )
270- self .assertEqual (get_skip_next (reviewers [1 ]), 1 )
271- self .assertEqual (get_skip_next (reviewers [2 ]), 0 )
272- self .assertEqual (get_skip_next (reviewers [3 ]), 1 )
273-
274- # pick reviewer 2, use up reviewer 3's skip_next
275- possibly_advance_next_reviewer_for_team (team , assigned_review_to_person_id = reviewers [2 ].pk , add_skip = False )
276- self .assertEqual (NextReviewerInTeam .objects .get (team = team ).next_reviewer , reviewers [4 ])
277- self .assertEqual (get_skip_next (reviewers [0 ]), 0 )
278- self .assertEqual (get_skip_next (reviewers [1 ]), 1 )
279- self .assertEqual (get_skip_next (reviewers [2 ]), 0 )
280- self .assertEqual (get_skip_next (reviewers [3 ]), 0 )
281- self .assertEqual (get_skip_next (reviewers [4 ]), 0 )
282-
283- # check wrap-around
284- possibly_advance_next_reviewer_for_team (team , assigned_review_to_person_id = reviewers [4 ].pk )
285- self .assertEqual (NextReviewerInTeam .objects .get (team = team ).next_reviewer , reviewers [0 ])
286- self .assertEqual (get_skip_next (reviewers [0 ]), 0 )
287- self .assertEqual (get_skip_next (reviewers [1 ]), 1 )
288- self .assertEqual (get_skip_next (reviewers [2 ]), 0 )
289- self .assertEqual (get_skip_next (reviewers [3 ]), 0 )
290- self .assertEqual (get_skip_next (reviewers [4 ]), 0 )
291-
292- # unavailable
293- today = datetime .date .today ()
294- UnavailablePeriod .objects .create (team = team , person = reviewers [1 ], start_date = today , end_date = today , availability = "unavailable" )
295- possibly_advance_next_reviewer_for_team (team , assigned_review_to_person_id = reviewers [0 ].pk )
296- self .assertEqual (NextReviewerInTeam .objects .get (team = team ).next_reviewer , reviewers [2 ])
297- self .assertEqual (get_skip_next (reviewers [0 ]), 0 )
298- self .assertEqual (get_skip_next (reviewers [1 ]), 1 ) # don't consume that skip while the reviewer is unavailable
299- self .assertEqual (get_skip_next (reviewers [2 ]), 0 )
300- self .assertEqual (get_skip_next (reviewers [3 ]), 0 )
301- self .assertEqual (get_skip_next (reviewers [4 ]), 0 )
302-
303- # pick unavailable anyway
304- possibly_advance_next_reviewer_for_team (team , assigned_review_to_person_id = reviewers [1 ].pk , add_skip = False )
305- self .assertEqual (NextReviewerInTeam .objects .get (team = team ).next_reviewer , reviewers [2 ])
306- self .assertEqual (get_skip_next (reviewers [0 ]), 0 )
307- self .assertEqual (get_skip_next (reviewers [1 ]), 1 )
308- self .assertEqual (get_skip_next (reviewers [2 ]), 0 )
309- self .assertEqual (get_skip_next (reviewers [3 ]), 0 )
310- self .assertEqual (get_skip_next (reviewers [4 ]), 0 )
311-
312- # not through min_interval so advance past reviewer[2]
313- settings , _ = ReviewerSettings .objects .get_or_create (team = team , person = reviewers [2 ])
314- settings .min_interval = 30
315- settings .save ()
316- req = ReviewRequest .objects .create (team = team , doc = doc , type_id = "early" , state_id = "assigned" , deadline = today , requested_by = reviewers [0 ])
317- ReviewAssignmentFactory (review_request = req , state_id = "accepted" , reviewer = reviewers [2 ].email_set .first (),assigned_on = req .time )
318- possibly_advance_next_reviewer_for_team (team , assigned_review_to_person_id = reviewers [3 ].pk )
319- self .assertEqual (NextReviewerInTeam .objects .get (team = team ).next_reviewer , reviewers [4 ])
320- self .assertEqual (get_skip_next (reviewers [0 ]), 0 )
321- self .assertEqual (get_skip_next (reviewers [1 ]), 1 )
322- self .assertEqual (get_skip_next (reviewers [2 ]), 0 )
323- self .assertEqual (get_skip_next (reviewers [3 ]), 0 )
324- self .assertEqual (get_skip_next (reviewers [4 ]), 0 )
325-
326237 def test_assign_reviewer (self ):
327238 doc = WgDraftFactory (pages = 2 )
328239 review_team = ReviewTeamFactory (acronym = "reviewteam" , name = "Review Team" , type_id = "review" , list_email = "reviewteam@ietf.org" , parent = Group .objects .get (acronym = "farfut" ))
329240 rev_role = RoleFactory (group = review_team ,person__user__username = 'reviewer' ,person__user__email = 'reviewer@example.com' ,person__name = 'Some Reviewer' ,name_id = 'reviewer' )
330241 RoleFactory (group = review_team ,person__user__username = 'marschairman' ,person__name = 'WG Cháir Man' ,name_id = 'reviewer' )
331242 secretary = RoleFactory (group = review_team ,person__user__username = 'reviewsecretary' ,person__user__email = 'reviewsecretary@example.com' ,name_id = 'secr' )
332243 ReviewerSettings .objects .create (team = review_team , person = rev_role .person , min_interval = 14 , skip_next = 0 )
244+ queue_policy = get_reviewer_queue_policy (review_team )
333245
334246 # review to assign to
335247 review_req = ReviewRequestFactory (team = review_team ,doc = doc ,state_id = 'requested' )
@@ -371,17 +283,8 @@ def test_assign_reviewer(self):
371283 another_reviewer = PersonFactory .create (name = "Extra TestReviewer" ) # needs to be lexically greater than the existing one
372284 another_reviewer .role_set .create (name_id = 'reviewer' , email = another_reviewer .email (), group = review_req .team )
373285
374- UnavailablePeriod .objects .create (
375- team = review_req .team ,
376- person = reviewer_email .person ,
377- start_date = datetime .date .today () - datetime .timedelta (days = 10 ),
378- availability = "unavailable" ,
379- )
380-
381286 ReviewWish .objects .create (person = reviewer_email .person , team = review_req .team , doc = doc )
382287
383- # pick a non-existing reviewer as next to see that we can
384- # handle reviewers who have left
385288 NextReviewerInTeam .objects .filter (team = review_req .team ).delete ()
386289 NextReviewerInTeam .objects .create (
387290 team = review_req .team ,
@@ -409,14 +312,13 @@ def test_assign_reviewer(self):
409312 self .assertIn ("wishes to review" , reviewer_label )
410313 self .assertIn ("is author" , reviewer_label )
411314 self .assertIn ("regexp matches" , reviewer_label )
412- self .assertIn ("unavailable indefinitely" , reviewer_label )
413315 self .assertIn ("skip next 1" , reviewer_label )
414316 self .assertIn ("#1" , reviewer_label )
415317 self .assertIn ("1 fully completed" , reviewer_label )
416318
417319 # assign
418320 empty_outbox ()
419- rotation_list = reviewer_rotation_list ( review_req . team )
321+ rotation_list = queue_policy . default_reviewer_rotation_list ( )
420322 reviewer = Email .objects .filter (role__name = "reviewer" , role__group = review_req .team , person = rotation_list [0 ]).first ()
421323 r = self .client .post (assign_url , { "action" : "assign" , "reviewer" : reviewer .pk })
422324 self .assertEqual (r .status_code , 302 )
@@ -427,7 +329,6 @@ def test_assign_reviewer(self):
427329 assignment = review_req .reviewassignment_set .first ()
428330 self .assertEqual (assignment .reviewer , reviewer )
429331 self .assertEqual (assignment .state_id , "assigned" )
430- self .assertEqual (NextReviewerInTeam .objects .get (team = review_req .team ).next_reviewer , rotation_list [1 ])
431332
432333 self .assertEqual (len (outbox ), 1 )
433334 self .assertEqual ('"Some Reviewer" <reviewer@example.com>' , outbox [0 ]["To" ])
0 commit comments