@@ -688,13 +688,59 @@ def test_complete_review_enter_content(self):
688688 "review_content" : "This is a review\n with two lines" ,
689689 "review_url" : "" ,
690690 "review_file" : "" ,
691+ # Custom completion should be ignored - review posted by assignee is always set to now
692+ "completion_date" : "2012-12-24" ,
693+ "completion_time" : "12:13:14" ,
691694 })
692695 self .assertEqual (r .status_code , 302 )
693696
694697 assignment = reload_db_objects (assignment )
695698 self .assertEqual (assignment .state_id , "completed" )
696- self .assertNotEqual (assignment .completed_on , None )
699+ # Completed time should be close to now, but will not be exactly, so check within 10s margin
700+ completed_time_diff = datetime .datetime .now () - assignment .completed_on
701+ self .assertLess (completed_time_diff , datetime .timedelta (seconds = 10 ))
702+
703+ with io .open (os .path .join (self .review_subdir , assignment .review .name + ".txt" )) as f :
704+ self .assertEqual (f .read (), "This is a review\n with two lines" )
705+
706+ self .assertEqual (len (outbox ), 1 )
707+ self .assertTrue (assignment .review_request .team .list_email in outbox [0 ]["To" ])
708+ self .assertTrue ("This is a review" in outbox [0 ].get_payload (decode = True ).decode ("utf-8" ))
709+
710+ self .assertTrue (settings .MAILING_LIST_ARCHIVE_URL in assignment .review .external_url )
711+
712+ def test_complete_review_enter_content_by_secretary (self ):
713+ assignment , url = self .setup_complete_review_test ()
714+ login_testing_unauthorized (self , 'reviewsecretary' , url )
715+
716+ empty_outbox ()
697717
718+ r = self .client .post (url , data = {
719+ "result" : ReviewResultName .objects .get (reviewteamsettings_review_results_set__group = assignment .review_request .team , slug = "ready" ).pk ,
720+ "state" : ReviewAssignmentStateName .objects .get (slug = "completed" ).pk ,
721+ "reviewed_rev" : assignment .review_request .doc .rev ,
722+ "review_submission" : "enter" ,
723+ "review_content" : "This is a review\n with two lines" ,
724+ "review_url" : "" ,
725+ "review_file" : "" ,
726+ "completion_date" : "2012-12-24" ,
727+ "completion_time" : "12:13:14" ,
728+ })
729+ self .assertEqual (r .status_code , 302 )
730+
731+ # The secretary is allowed to set a custom completion date (#2590)
732+ assignment = reload_db_objects (assignment )
733+ self .assertEqual (assignment .state_id , "completed" )
734+ self .assertEqual (assignment .completed_on , datetime .datetime (2012 , 12 , 24 , 12 , 13 , 14 ))
735+
736+ # There should be two events:
737+ # - the event logging when the change when it was entered, i.e. very close to now.
738+ # - the completion of the review, set to the provided date/time
739+ events = ReviewAssignmentDocEvent .objects .filter (doc = assignment .review_request .doc ).order_by ('-time' )
740+ event0_time_diff = datetime .datetime .now () - events [0 ].time
741+ self .assertLess (event0_time_diff , datetime .timedelta (seconds = 10 ))
742+ self .assertEqual (events [1 ].time , datetime .datetime (2012 , 12 , 24 , 12 , 13 , 14 ))
743+
698744 with io .open (os .path .join (self .review_subdir , assignment .review .name + ".txt" )) as f :
699745 self .assertEqual (f .read (), "This is a review\n with two lines" )
700746
@@ -879,8 +925,11 @@ def test_revise_review_enter_content(self):
879925
880926 assignment = reload_db_objects (assignment )
881927 self .assertEqual (assignment .state_id , "completed" )
882- event = ReviewAssignmentDocEvent .objects .get (type = "closed_review_assignment" , review_assignment = assignment )
883- self .assertEqual (event .time , datetime .datetime (2012 , 12 , 24 , 12 , 13 , 14 ))
928+ # The revision event time should be the date the revision was submitted, i.e. not backdated
929+ event1 = assignment .review_request .doc .latest_event (ReviewAssignmentDocEvent )
930+ event_time_diff = datetime .datetime .now () - event1 .time
931+ self .assertLess (event_time_diff , datetime .timedelta (seconds = 10 ))
932+ self .assertTrue ('revised' in event1 .desc .lower ())
884933
885934 with io .open (os .path .join (self .review_subdir , assignment .review .name + ".txt" )) as f :
886935 self .assertEqual (f .read (), "This is a review\n with two lines" )
@@ -904,8 +953,11 @@ def test_revise_review_enter_content(self):
904953
905954 assignment = reload_db_objects (assignment )
906955 self .assertEqual (assignment .review .rev , "01" )
907- event = ReviewAssignmentDocEvent .objects .get (type = "closed_review_assignment" , review_assignment = assignment )
908- self .assertEqual (event .time , datetime .datetime (2013 , 12 , 24 , 11 , 11 , 11 ))
956+ event2 = assignment .review_request .doc .latest_event (ReviewAssignmentDocEvent )
957+ event_time_diff = datetime .datetime .now () - event2 .time
958+ self .assertLess (event_time_diff , datetime .timedelta (seconds = 10 ))
959+ # Ensure that a new event was created for the new revision (#2590)
960+ self .assertNotEqual (event1 .id , event2 .id )
909961
910962 self .assertEqual (len (outbox ), 0 )
911963
0 commit comments