Skip to content

Commit 47a6527

Browse files
committed
Use the FeedbackRequestRepository to avoid the login requirement of the FeedbackRequestServices. This allows us to automatically test the self-review notification.
1 parent 291027d commit 47a6527

File tree

3 files changed

+125
-4
lines changed

3 files changed

+125
-4
lines changed

server/src/main/java/com/objectcomputing/checkins/services/reviews/ReviewPeriodServicesImpl.java

Lines changed: 9 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -7,6 +7,7 @@
77
import com.objectcomputing.checkins.notifications.email.EmailSender;
88
import com.objectcomputing.checkins.notifications.email.MailJetFactory;
99
import com.objectcomputing.checkins.services.feedback_request.FeedbackRequestServices;
10+
import com.objectcomputing.checkins.services.feedback_request.FeedbackRequestRepository;
1011
import com.objectcomputing.checkins.services.feedback_request.FeedbackRequest;
1112
import com.objectcomputing.checkins.services.memberprofile.MemberProfileRepository;
1213
import com.objectcomputing.checkins.services.memberprofile.MemberProfile;
@@ -42,6 +43,7 @@ class ReviewPeriodServicesImpl implements ReviewPeriodServices {
4243
private final ReviewAssignmentRepository reviewAssignmentRepository;
4344
private final MemberProfileRepository memberProfileRepository;
4445
private final FeedbackRequestServices feedbackRequestServices;
46+
private final FeedbackRequestRepository feedbackRequestRepository;
4547
private final ReviewStatusTransitionValidator reviewStatusTransitionValidator;
4648
private EmailSender emailSender;
4749
private final Environment environment;
@@ -61,6 +63,7 @@ private enum SelfReviewDate { LAUNCH, THREE_DAYS, ONE_DAY }
6163
ReviewAssignmentRepository reviewAssignmentRepository,
6264
MemberProfileRepository memberProfileRepository,
6365
FeedbackRequestServices feedbackRequestServices,
66+
FeedbackRequestRepository feedbackRequestRepository,
6467
ReviewStatusTransitionValidator reviewStatusTransitionValidator,
6568
@Named(MailJetFactory.MJML_FORMAT) EmailSender emailSender,
6669
Environment environment,
@@ -69,6 +72,7 @@ private enum SelfReviewDate { LAUNCH, THREE_DAYS, ONE_DAY }
6972
this.reviewAssignmentRepository = reviewAssignmentRepository;
7073
this.memberProfileRepository = memberProfileRepository;
7174
this.feedbackRequestServices = feedbackRequestServices;
75+
this.feedbackRequestRepository = feedbackRequestRepository;
7276
this.reviewStatusTransitionValidator = reviewStatusTransitionValidator;
7377
this.emailSender = emailSender;
7478
this.environment = environment;
@@ -401,7 +405,7 @@ void sendSelfReviewEmail(UUID reviewPeriodId, SelfReviewDate date) {
401405
return;
402406
}
403407

404-
// Determine which email template and subject we need to use.
408+
// Determine which subject we need to use.
405409
String subject = "";
406410
switch(date) {
407411
case SelfReviewDate.LAUNCH:
@@ -425,10 +429,11 @@ void sendSelfReviewEmail(UUID reviewPeriodId, SelfReviewDate date) {
425429

426430
// Get the set of self-reviewer email addresses.
427431
Set<MemberProfile> recipients = new HashSet<>();
432+
String templateId = null;
428433
List<FeedbackRequest> requests =
429-
feedbackRequestServices.findByValues(null, null, null, null,
430-
reviewPeriodId,
431-
null, null);
434+
feedbackRequestRepository.findByValues(null, null, null, null,
435+
reviewPeriodId.toString(),
436+
templateId);
432437
for (FeedbackRequest request : requests) {
433438
if (request.getRecipientId().equals(request.getRequesteeId())) {
434439
Optional<MemberProfile> requesteeProfile =

server/src/test/java/com/objectcomputing/checkins/services/fixture/ReviewPeriodFixture.java

Lines changed: 17 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -39,6 +39,23 @@ default ReviewPeriod createADefaultReviewPeriod(ReviewStatus reviewStatus, UUID
3939
startDate, endDate));
4040
}
4141

42+
default ReviewPeriod createADefaultReviewPeriod(
43+
LocalDateTime launchDate,
44+
ReviewStatus reviewStatus,
45+
UUID templateId, UUID selfReviewTemplateId) {
46+
launchDate = launchDate.truncatedTo(ChronoUnit.MILLIS);
47+
48+
LocalDateTime selfReviewCloseDate = launchDate.plusDays(4);
49+
LocalDateTime closeDate = selfReviewCloseDate.plusDays(1);
50+
LocalDateTime startDate = launchDate.minusDays(30);
51+
LocalDateTime endDate = closeDate.minusDays(1);
52+
return getReviewPeriodRepository().save(
53+
new ReviewPeriod("Specific Launch Date", reviewStatus, templateId,
54+
selfReviewTemplateId,
55+
launchDate, selfReviewCloseDate, closeDate,
56+
startDate, endDate));
57+
}
58+
4259
default ReviewPeriod createASecondaryReviewPeriod() {
4360
LocalDateTime launchDate = LocalDateTime.now().plusMinutes(1)
4461
.truncatedTo(ChronoUnit.MILLIS);

server/src/test/java/com/objectcomputing/checkins/services/reviews/ReviewPeriodControllerTest.java

Lines changed: 99 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -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

Comments
 (0)