2727from ietf .group .factories import RoleFactory , ReviewTeamFactory
2828from ietf .group .models import Group
2929from ietf .message .models import Message
30- from ietf .name .models import ReviewResultName , ReviewRequestStateName , ReviewAssignmentStateName
30+ from ietf .name .models import ReviewResultName , ReviewRequestStateName , ReviewAssignmentStateName , \
31+ ReviewTypeName
3132from ietf .person .models import Email , Person
3233from ietf .review .factories import ReviewRequestFactory , ReviewAssignmentFactory
3334from ietf .review .models import (ReviewRequest , ReviewerSettings ,
@@ -564,7 +565,7 @@ def test_search_mail_archive(self):
564565 assignment = ReviewAssignmentFactory (review_request = review_req , reviewer = rev_role .person .email_set .first (), state_id = 'accepted' )
565566
566567 # test URL construction
567- query_urls = ietf .review .mailarch .construct_query_urls (review_req )
568+ query_urls = ietf .review .mailarch .construct_query_urls (doc , review_team )
568569 self .assertTrue (review_req .doc .name in query_urls ["query_data_url" ])
569570
570571 # test parsing
@@ -575,16 +576,21 @@ def test_search_mail_archive(self):
575576 # to work, the module (and not the function) must be
576577 # imported in the view
577578 real_fn = ietf .review .mailarch .construct_query_urls
578- ietf .review .mailarch .construct_query_urls = lambda review_req , query = None : { "query_data_url" : "file://" + os .path .abspath (mbox_path ) }
579-
579+ ietf .review .mailarch .construct_query_urls = lambda doc , team , query = None : { "query_data_url" : "file://" + os .path .abspath (mbox_path ) }
580580 url = urlreverse ('ietf.doc.views_review.search_mail_archive' , kwargs = { "name" : doc .name , "assignment_id" : assignment .pk })
581+ url2 = urlreverse ('ietf.doc.views_review.search_mail_archive' , kwargs = { "name" : doc .name , "acronym" : review_team .acronym })
581582 login_testing_unauthorized (self , "reviewsecretary" , url )
582583
583584 r = self .client .get (url )
584585 self .assertEqual (r .status_code , 200 )
585586 messages = r .json ()["messages" ]
586587 self .assertEqual (len (messages ), 2 )
587588
589+ r = self .client .get (url2 )
590+ self .assertEqual (r .status_code , 200 )
591+ messages = r .json ()["messages" ]
592+ self .assertEqual (len (messages ), 2 )
593+
588594 today = datetime .date .today ()
589595
590596 self .assertEqual (messages [0 ]["url" ], "https://www.example.com/testmessage" )
@@ -605,7 +611,7 @@ def test_search_mail_archive(self):
605611 no_result_path = os .path .join (self .review_dir , "mailarch_no_result.html" )
606612 with io .open (no_result_path , "w" ) as f :
607613 f .write ('Content-Type: text/html\n \n <html><body><div class="xtr"><div class="xtd no-results">No results found</div></div>' )
608- ietf .review .mailarch .construct_query_urls = lambda review_req , query = None : { "query_data_url" : "file://" + os .path .abspath (no_result_path ) }
614+ ietf .review .mailarch .construct_query_urls = lambda doc , team , query = None : { "query_data_url" : "file://" + os .path .abspath (no_result_path ) }
609615
610616 url = urlreverse ('ietf.doc.views_review.search_mail_archive' , kwargs = { "name" : doc .name , "assignment_id" : assignment .pk })
611617
@@ -618,6 +624,27 @@ def test_search_mail_archive(self):
618624 finally :
619625 ietf .review .mailarch .construct_query_urls = real_fn
620626
627+ def test_submit_unsolicited_review_choose_team (self ):
628+ doc = WgDraftFactory (group__acronym = 'mars' , rev = '01' )
629+ review_team = ReviewTeamFactory (acronym = "reviewteam" , name = "Review Team" , type_id = "review" , list_email = "reviewteam@ietf.org" , parent = Group .objects .get (acronym = "farfut" ))
630+ secretary = RoleFactory (group = review_team ,person__user__username = 'reviewsecretary' ,person__user__email = 'reviewsecretary@example.com' , name_id = 'secr' )
631+
632+ url = urlreverse ('ietf.doc.views_review.submit_unsolicited_review_choose_team' ,
633+ kwargs = {'name' : doc .name })
634+ redirect_url = urlreverse ("ietf.doc.views_review.complete_review" ,
635+ kwargs = {'name' : doc .name , 'acronym' : review_team .acronym })
636+ login_testing_unauthorized (self , secretary .person .user .username , url )
637+
638+ r = self .client .get (url )
639+ self .assertEqual (r .status_code , 200 )
640+ self .assertContains (r , review_team .name )
641+
642+ r = self .client .post (url , data = {'team' : review_team .pk })
643+ self .assertRedirects (r , redirect_url )
644+
645+ r = self .client .post (url , data = {'team' : review_team .pk + 5 })
646+ self .assertEqual (r .status_code , 200 )
647+
621648 def setup_complete_review_test (self ):
622649 doc = WgDraftFactory (group__acronym = 'mars' ,rev = '01' )
623650 NewRevisionDocEventFactory (doc = doc ,rev = '01' )
@@ -873,6 +900,56 @@ def test_complete_review_link_to_mailing_list(self, mock):
873900 self .assertEqual (len (outbox ), 0 )
874901 self .assertTrue ("http://example.com" in assignment .review .external_url )
875902
903+ @patch ('requests.get' )
904+ def test_complete_unsolicited_review_link_to_mailing_list_by_secretary (self , mock ):
905+ # Mock up the url response for the request.get() call to retrieve the mailing list url
906+ response = Response ()
907+ response .status_code = 200
908+ response ._content = b"This is a review\n with two lines"
909+ mock .return_value = response
910+
911+ # Run the test
912+ doc = WgDraftFactory (group__acronym = 'mars' , rev = '01' )
913+ NewRevisionDocEventFactory (doc = doc , rev = '01' )
914+ review_team = ReviewTeamFactory (acronym = "reviewteam" , name = "Review Team" , type_id = "review" , list_email = "reviewteam@ietf.org" , parent = Group .objects .get (acronym = "farfut" ))
915+ rev_role = RoleFactory (group = review_team , person__user__username = 'reviewer' , person__user__email = 'reviewer@example.com' , name_id = 'reviewer' )
916+ secretary_role = RoleFactory (group = review_team , person__user__username = 'reviewsecretary' , person__user__email = 'reviewsecretary@example.com' , name_id = 'secr' )
917+
918+ url = urlreverse ('ietf.doc.views_review.complete_review' ,
919+ kwargs = {"name" : doc .name , "acronym" : review_team .acronym })
920+
921+ login_testing_unauthorized (self , secretary_role .person .user .username , url )
922+
923+ empty_outbox ()
924+
925+ r = self .client .post (url , data = {
926+ "result" : ReviewResultName .objects .get (slug = "ready" ).pk ,
927+ "state" : ReviewAssignmentStateName .objects .get (slug = "completed" ).pk ,
928+ "reviewed_rev" : '01' ,
929+ "review_submission" : "link" ,
930+ "review_content" : response .content .decode (),
931+ "review_url" : "http://example.com/testreview/" ,
932+ "review_file" : "" ,
933+ "review_type" : ReviewTypeName .objects .get (slug = "early" ).pk ,
934+ "reviewer" : rev_role .person .pk ,
935+ "completion_date" : "2012-12-24" ,
936+ "completion_time" : "12:13:14" ,
937+ })
938+ self .assertEqual (r .status_code , 302 )
939+
940+ review_req = doc .reviewrequest_set .get ()
941+ assignment = review_req .reviewassignment_set .get ()
942+ self .assertEqual (review_req .type_id , "early" )
943+ self .assertEqual (review_req .requested_by , secretary_role .person )
944+ self .assertEqual (assignment .reviewer , rev_role .person .role_email ('reviewer' ))
945+ self .assertEqual (assignment .state_id , "completed" )
946+
947+ with io .open (os .path .join (self .review_subdir , assignment .review .name + ".txt" )) as f :
948+ self .assertEqual (f .read (), "This is a review\n with two lines" )
949+
950+ self .assertEqual (len (outbox ), 0 )
951+ self .assertTrue ("http://example.com" in assignment .review .external_url )
952+
876953 def test_partially_complete_review (self ):
877954 assignment , url = self .setup_complete_review_test ()
878955
0 commit comments