@@ -819,4 +819,103 @@ void testCreateAReviewPeriodWithBadEndDate2() {
819819 assertTrue (exception .getMessage ()
820820 .contains ("end date must be on or before" ));
821821 }
822+
823+ @ Test
824+ void testSelfReviewLaunchDateEmail () {
825+ LocalDateTime launchDate = LocalDateTime .now ().plusMinutes (1 );
826+ checkSelfReviewEmail (launchDate , launchDate ,
827+ " has launched!" );
828+ }
829+
830+ @ Test
831+ void testSelfReviewThreeDaysEmail () {
832+ // When using the version of createADefaultReviewPeriod that takes a
833+ // launch date, the self-review closes 4 days after the launch date.
834+ // So, to get the three day email, we just need to add 1 day to the
835+ // launch date.
836+ LocalDateTime launchDate = LocalDateTime .now ().plusMinutes (1 );
837+ checkSelfReviewEmail (launchDate , launchDate .plusDays (1 ),
838+ " closes in three days!" );
839+ }
840+
841+ @ Test
842+ void testSelfReviewOneDayEmail () {
843+ // When using the version of createADefaultReviewPeriod that takes a
844+ // launch date, the self-review closes 4 days after the launch date.
845+ // So, to get the one day email, we just need to add 3 days to the
846+ // launch date.
847+ LocalDateTime launchDate = LocalDateTime .now ().plusMinutes (1 );
848+ checkSelfReviewEmail (launchDate , launchDate .plusDays (3 ),
849+ " closes in one day!" );
850+ }
851+
852+ @ Test
853+ void testSelfReviewNoEmail () {
854+ MemberProfile supervisor = createADefaultSupervisor ();
855+ MemberProfile member = createADefaultMemberProfile ();
856+
857+ // Launch date must be in the future.
858+ LocalDateTime launchDate = LocalDateTime .now ().plusMinutes (1 );
859+ FeedbackTemplate template =
860+ saveReviewFeedbackTemplate (supervisor .getId ());
861+ ReviewPeriod period = createADefaultReviewPeriod (
862+ launchDate , ReviewStatus .AWAITING_APPROVAL ,
863+ null , template .getId ());
864+
865+ createAReviewAssignmentBetweenMembers (member , supervisor , period , true );
866+ period .setReviewStatus (ReviewStatus .OPEN );
867+
868+ final HttpRequest <ReviewPeriod > request = HttpRequest .
869+ PUT ("/" , period ).basicAuth (supervisor .getWorkEmail (), ADMIN_ROLE );
870+ final HttpResponse <ReviewPeriod > response =
871+ client .toBlocking ().exchange (request , ReviewPeriod .class );
872+ assertEquals (HttpStatus .OK , response .getStatus ());
873+
874+ // None of these should send notification.
875+ reviewPeriodServices .sendNotifications (
876+ launchDate .plusDays (2 ).toLocalDate ());
877+ reviewPeriodServices .sendNotifications (
878+ launchDate .plusDays (4 ).toLocalDate ());
879+ reviewPeriodServices .sendNotifications (
880+ launchDate .plusDays (5 ).toLocalDate ());
881+
882+ // Two due to two reviews.
883+ // Only those being reviewed will have a self-review assignment.
884+ assertEquals (2 , emailSender .events .size ());
885+ }
886+
887+ private void checkSelfReviewEmail (LocalDateTime launchDate ,
888+ LocalDateTime checkDate ,
889+ String subjectSuffix ) {
890+ MemberProfile supervisor = createADefaultSupervisor ();
891+ MemberProfile member = createADefaultMemberProfile ();
892+
893+ FeedbackTemplate template =
894+ saveReviewFeedbackTemplate (supervisor .getId ());
895+ ReviewPeriod period = createADefaultReviewPeriod (
896+ launchDate , ReviewStatus .AWAITING_APPROVAL ,
897+ null , template .getId ());
898+
899+ createAReviewAssignmentBetweenMembers (member , supervisor , period , true );
900+ period .setReviewStatus (ReviewStatus .OPEN );
901+
902+ final HttpRequest <ReviewPeriod > request = HttpRequest .
903+ PUT ("/" , period ).basicAuth (supervisor .getWorkEmail (), ADMIN_ROLE );
904+ final HttpResponse <ReviewPeriod > response =
905+ client .toBlocking ().exchange (request , ReviewPeriod .class );
906+ assertEquals (HttpStatus .OK , response .getStatus ());
907+
908+ // Send the self-review notification.
909+ reviewPeriodServices .sendNotifications (checkDate .toLocalDate ());
910+
911+ // Two due to two reviews and one for launch notification.
912+ // Only those being reviewed will have a self-review assignment.
913+ assertEquals (3 , emailSender .events .size ());
914+
915+ EmailHelper .validateEmail ("SEND_EMAIL" , "null" , "null" ,
916+ period .getName () + subjectSuffix ,
917+ "To access your self-review click the button above" ,
918+ member .getWorkEmail (),
919+ emailSender .events .get (2 ));
920+ }
822921}
0 commit comments