3636from ietf .name .models import DocTagName , GroupStateName , GroupTypeName
3737from ietf .person .models import Person , Email
3838from ietf .person .factories import PersonFactory
39- from ietf .review .factories import ReviewRequestFactory
39+ from ietf .review .factories import ReviewRequestFactory , ReviewAssignmentFactory
4040from ietf .utils .mail import outbox , empty_outbox
4141from ietf .utils .test_utils import login_testing_unauthorized , TestCase , unicontent , reload_db_objects
4242
@@ -666,7 +666,8 @@ def test_edit_field(self):
666666
667667 def test_edit_reviewers (self ):
668668 group = GroupFactory (type_id = 'review' ,parent = GroupFactory (type_id = 'area' ))
669- ReviewRequestFactory (team = group )
669+ review_req = ReviewRequestFactory (team = group )
670+ ad_email = Email .objects .get (address = 'ad2@example.org' )
670671
671672 url = urlreverse ('ietf.group.views.edit' , kwargs = dict (group_type = group .type_id , acronym = group .acronym , action = "edit" ))
672673 login_testing_unauthorized (self , "secretary" , url )
@@ -679,23 +680,48 @@ def test_edit_reviewers(self):
679680
680681 # set reviewers
681682 empty_outbox ()
682- r = self . client . post ( url ,
683- dict ( name = group .name ,
684- acronym = group .acronym ,
685- parent = group .parent_id ,
686- ad = Person .objects .get (name = "Areað Irector" ).pk ,
687- state = group .state_id ,
688- reviewer_roles = "ad2@example.org" ,
689- list_email = group .list_email ,
690- list_subscribe = group .list_subscribe ,
691- list_archive = group . list_archive ,
692- urls = ""
693- ))
683+ post_data = dict (
684+ name = group .name ,
685+ acronym = group .acronym ,
686+ parent = group .parent_id ,
687+ ad = Person .objects .get (name = "Areað Irector" ).pk ,
688+ state = group .state_id ,
689+ list_email = group . list_email ,
690+ list_subscribe = group .list_subscribe ,
691+ list_archive = group .list_archive ,
692+ urls = ""
693+ )
694+ r = self . client . post ( url , dict ( post_data , reviewer_roles = ad_email . address ))
694695 self .assertEqual (r .status_code , 302 )
695696
696697 group = reload_db_objects (group )
697- self .assertEqual (list (group .role_set .filter (name = "reviewer" ).values_list ("email" , flat = True )), ["ad2@example.org" ])
698+ self .assertEqual (list (group .role_set .filter (name = "reviewer" ).values_list ("email" , flat = True )), [ad_email . address ])
698699 self .assertTrue ('Personnel change' in outbox [0 ]['Subject' ])
700+
701+ # Assign a review to the reviewer, then remove the reviewer from the group
702+ # As the request deadline has not passed, the assignment should be set to rejected
703+ review_assignment = ReviewAssignmentFactory (review_request = review_req , state_id = 'assigned' , reviewer = ad_email )
704+ r = self .client .post (url , post_data )
705+ self .assertEqual (r .status_code , 302 )
706+
707+ group = reload_db_objects (group )
708+ self .assertFalse (group .role_set .filter (name = "reviewer" ))
709+ review_assignment = reload_db_objects (review_assignment )
710+ self .assertEqual (review_assignment .state_id , 'rejected' )
711+
712+ # Repeat after adding reviewer again, but now beyond request deadline
713+ r = self .client .post (url , dict (post_data , reviewer_roles = ad_email .address ))
714+ self .assertEqual (r .status_code , 302 )
715+ review_assignment .state_id = 'accepted'
716+ review_assignment .save ()
717+ review_req .deadline = datetime .date .today () - datetime .timedelta (days = 1 )
718+ review_req .save ()
719+
720+ r = self .client .post (url , post_data )
721+ self .assertEqual (r .status_code , 302 )
722+
723+ review_assignment = reload_db_objects (review_assignment )
724+ self .assertEqual (review_assignment .state_id , 'no-response' )
699725
700726 def test_conclude (self ):
701727 group = GroupFactory (acronym = "mars" )
0 commit comments