@@ -762,11 +762,20 @@ def _test_field(group, field_name, field_content, prohibited_form_names):
762762
763763 def test_edit_reviewers (self ):
764764 group = GroupFactory (type_id = 'review' ,parent = GroupFactory (type_id = 'area' ))
765+ other_group = GroupFactory (type_id = 'review' ,parent = GroupFactory (type_id = 'area' ))
765766 review_req = ReviewRequestFactory (team = group )
766- ad_email = Email . objects . get ( address = 'ad2@example.org' )
767+ other_review_req = ReviewRequestFactory ( team = other_group )
767768
768- url = urlreverse ('ietf.group.views.edit' , kwargs = dict (group_type = group .type_id , acronym = group .acronym , action = "edit" ))
769- login_testing_unauthorized (self , "secretary" , url )
769+ # Set up a reviewer that has two email addresses
770+ reviewer = PersonFactory ()
771+ EmailFactory (person = reviewer )
772+ first_email = reviewer .email_set .first ()
773+ last_email = reviewer .email_set .last ()
774+
775+ RoleFactory (group = other_group , name_id = 'reviewer' , person = reviewer , email = first_email )
776+
777+ url = urlreverse ('ietf.group.views.edit' , kwargs = dict (group_type = group .type_id , acronym = group .acronym , action = 'edit' ))
778+ login_testing_unauthorized (self , 'secretary' , url )
770779
771780 # normal get
772781 r = self .client .get (url )
@@ -780,33 +789,36 @@ def test_edit_reviewers(self):
780789 name = group .name ,
781790 acronym = group .acronym ,
782791 parent = group .parent_id ,
783- ad = Person .objects .get (name = " Areað Irector" ).pk ,
792+ ad = Person .objects .get (name = ' Areað Irector' ).pk ,
784793 state = group .state_id ,
785794 list_email = group .list_email ,
786795 list_subscribe = group .list_subscribe ,
787796 list_archive = group .list_archive ,
788- urls = ""
797+ urls = ''
789798 )
790- r = self .client .post (url , dict (post_data , reviewer_roles = ad_email .address ))
799+ r = self .client .post (url , dict (post_data , reviewer_roles = first_email .address ))
791800 self .assertEqual (r .status_code , 302 )
792801
793- group = reload_db_objects (group )
794- self .assertEqual (list (group .role_set .filter (name = "reviewer" ).values_list ("email" , flat = True )), [ad_email .address ])
802+ self .assertEqual (group .role_set .get (name = 'reviewer' ).email .address , first_email .address )
795803 self .assertTrue ('Personnel change' in outbox [0 ]['Subject' ])
796804
797- # Assign a review to the reviewer, then remove the reviewer from the group
798- # As the request deadline has not passed, the assignment should be set to rejected
799- review_assignment = ReviewAssignmentFactory (review_request = review_req , state_id = 'assigned' , reviewer = ad_email )
805+ # Assign reviews to the reviewer, then remove the reviewer from the group
806+ # As the request deadline has not passed, the assignment should be set to withdrawn
807+ # Reviews assigned to other groups must not be affected
808+ review_assignment = ReviewAssignmentFactory (review_request = review_req , state_id = 'assigned' , reviewer = first_email )
809+ other_review_assignment = ReviewAssignmentFactory (review_request = other_review_req , state_id = 'assigned' , reviewer = first_email )
800810 r = self .client .post (url , post_data )
801811 self .assertEqual (r .status_code , 302 )
802812
803- group = reload_db_objects (group )
804- self .assertFalse (group .role_set .filter (name = "reviewer" ))
805- review_assignment = reload_db_objects (review_assignment )
806- self .assertEqual (review_assignment .state_id , 'rejected' )
813+ self .assertFalse (group .role_set .filter (name = 'reviewer' ).exists ())
814+ self .assertEqual (other_group .role_set .get (name = 'reviewer' ).email .address , first_email .address )
815+
816+ review_assignment , other_review_assignment = reload_db_objects (review_assignment , other_review_assignment )
817+ self .assertEqual (review_assignment .state_id , 'withdrawn' )
818+ self .assertEqual (other_review_assignment .state_id , 'assigned' )
807819
808820 # Repeat after adding reviewer again, but now beyond request deadline
809- r = self .client .post (url , dict (post_data , reviewer_roles = ad_email .address ))
821+ r = self .client .post (url , dict (post_data , reviewer_roles = first_email .address ))
810822 self .assertEqual (r .status_code , 302 )
811823 review_assignment .state_id = 'accepted'
812824 review_assignment .save ()
@@ -816,8 +828,23 @@ def test_edit_reviewers(self):
816828 r = self .client .post (url , post_data )
817829 self .assertEqual (r .status_code , 302 )
818830
819- review_assignment = reload_db_objects (review_assignment )
831+ review_assignment , other_review_assignment = reload_db_objects (review_assignment , other_review_assignment )
820832 self .assertEqual (review_assignment .state_id , 'no-response' )
833+ self .assertEqual (other_review_assignment .state_id , 'assigned' )
834+
835+ # Configure group with two reviewer Roles for the same person with different email addresses
836+ # then remove one of the roles. The result should be no change to the review assignments
837+ group .role_set .filter (name_id = 'reviewer' ).delete ()
838+ for email in reviewer .email_set .all ():
839+ group .role_set .create (name_id = 'reviewer' , person = reviewer , email = email )
840+ review_assignment .state_id = 'accepted'
841+ review_assignment .save ()
842+ r = self .client .post (url , dict (post_data , reviewer_roles = last_email .address ))
843+ self .assertEqual (group .role_set .get (name = 'reviewer' ).email .address , last_email .address )
844+ review_assignment , other_review_assignment = reload_db_objects (review_assignment , other_review_assignment )
845+ self .assertEqual (review_assignment .state_id , 'accepted' )
846+ self .assertEqual (other_review_assignment .state_id , 'assigned' )
847+
821848
822849 def test_conclude (self ):
823850 group = GroupFactory (acronym = "mars" )
0 commit comments