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