From 83abd8a1d64ce7e7ea798054ac154c2fead137b7 Mon Sep 17 00:00:00 2001 From: Michael Kimberlin Date: Thu, 14 Nov 2024 06:59:12 -0600 Subject: [PATCH 1/2] Restrict feedback to within the review period --- .../services/reports/ReportDataCollation.java | 4 ++- .../fixture/FeedbackRequestFixture.java | 25 +++++++++++++++++-- .../services/fixture/ReviewPeriodFixture.java | 8 +++--- .../reports/ReportDataControllerTest.java | 2 +- 4 files changed, 31 insertions(+), 8 deletions(-) diff --git a/server/src/main/java/com/objectcomputing/checkins/services/reports/ReportDataCollation.java b/server/src/main/java/com/objectcomputing/checkins/services/reports/ReportDataCollation.java index d762263318..c26ad9c31b 100644 --- a/server/src/main/java/com/objectcomputing/checkins/services/reports/ReportDataCollation.java +++ b/server/src/main/java/com/objectcomputing/checkins/services/reports/ReportDataCollation.java @@ -260,7 +260,9 @@ private List getFeedbackType(FeedbackType type) { reviewPeriod.getReviewTemplateId()); break; case FeedbackType.feedback: - use = !template.getIsReview(); + use = !template.getIsReview() && request.getStatus().equalsIgnoreCase("submitted") && + request.getSendDate() != null && request.getSendDate().isAfter(reviewPeriod.getPeriodStartDate().toLocalDate()) && + request.getSubmitDate() != null && request.getSubmitDate().isBefore(reviewPeriod.getCloseDate().toLocalDate()); break; } if (use) { diff --git a/server/src/test/java/com/objectcomputing/checkins/services/fixture/FeedbackRequestFixture.java b/server/src/test/java/com/objectcomputing/checkins/services/fixture/FeedbackRequestFixture.java index 8b1b1c6cc6..201a67023e 100644 --- a/server/src/test/java/com/objectcomputing/checkins/services/fixture/FeedbackRequestFixture.java +++ b/server/src/test/java/com/objectcomputing/checkins/services/fixture/FeedbackRequestFixture.java @@ -3,11 +3,18 @@ import com.objectcomputing.checkins.services.feedback_template.FeedbackTemplate; import com.objectcomputing.checkins.services.memberprofile.MemberProfile; import com.objectcomputing.checkins.services.reviews.ReviewPeriod; +import jnr.constants.platform.Local; import java.time.LocalDate; +import java.time.LocalDateTime; +import java.time.temporal.ChronoUnit; +import java.time.temporal.TemporalField; +import java.util.Date; +import java.util.Random; import java.util.UUID; import java.util.List; +import java.util.concurrent.ThreadLocalRandom; public interface FeedbackRequestFixture extends RepositoryFixture, FeedbackTemplateFixture { @@ -51,6 +58,15 @@ default FeedbackRequest saveSampleFeedbackRequest(MemberProfile creator, MemberP return getFeedbackRequestRepository().save(new FeedbackRequest(creator.getId(), requestee.getId(), recipient.getId(), templateId, testDate, null, "pending", null, null)); } + default LocalDate getRandomLocalDateTime(LocalDateTime start, LocalDateTime end) { + LocalDate startDate = start.toLocalDate(); + long daysBetween = ChronoUnit.DAYS.between(startDate, end.toLocalDate()); + Random random = new Random(); + long randomDays = random.nextLong(daysBetween); + + return startDate.plusDays(randomDays); + } + /** * Saves a sample feedback request * @param creator The {@link MemberProfile} of the creator of the feedback request @@ -60,8 +76,13 @@ default FeedbackRequest saveSampleFeedbackRequest(MemberProfile creator, MemberP * @return The saved {@link FeedbackRequest} */ default FeedbackRequest saveSampleFeedbackRequest(MemberProfile creator, MemberProfile requestee, MemberProfile recipient, UUID templateId, ReviewPeriod reviewPeriod) { - LocalDate testDate = LocalDate.of(2010, 10, 8); - return getFeedbackRequestRepository().save(new FeedbackRequest(creator.getId(), requestee.getId(), recipient.getId(), templateId, testDate, null, "pending", null, reviewPeriod.getId())); + return saveSampleFeedbackRequest(creator, requestee, recipient, templateId, reviewPeriod, "pending"); + } + + default FeedbackRequest saveSampleFeedbackRequest(MemberProfile creator, MemberProfile requestee, MemberProfile recipient, UUID templateId, ReviewPeriod reviewPeriod, String status) { + LocalDate submitDate = getRandomLocalDateTime(reviewPeriod.getPeriodStartDate(), reviewPeriod.getCloseDate()); + LocalDate sendDate = getRandomLocalDateTime(reviewPeriod.getPeriodStartDate(), submitDate.atStartOfDay()); + return getFeedbackRequestRepository().save(new FeedbackRequest(creator.getId(), requestee.getId(), recipient.getId(), templateId, sendDate, null, status, submitDate, reviewPeriod.getId())); } default FeedbackRequest saveSampleFeedbackRequestWithStatus(MemberProfile creator, MemberProfile requestee, MemberProfile recipient, UUID templateId, String status) { diff --git a/server/src/test/java/com/objectcomputing/checkins/services/fixture/ReviewPeriodFixture.java b/server/src/test/java/com/objectcomputing/checkins/services/fixture/ReviewPeriodFixture.java index 905ed7d64d..cd2cf0eded 100644 --- a/server/src/test/java/com/objectcomputing/checkins/services/fixture/ReviewPeriodFixture.java +++ b/server/src/test/java/com/objectcomputing/checkins/services/fixture/ReviewPeriodFixture.java @@ -81,10 +81,10 @@ default ReviewPeriod createAClosedReviewPeriod() { default ReviewPeriod createAClosedReviewPeriod( LocalDateTime periodStart, LocalDateTime periodEnd) { - LocalDateTime launchDate = LocalDateTime.now().plusMinutes(1) - .truncatedTo(ChronoUnit.MILLIS); - LocalDateTime selfReviewCloseDate = launchDate.plusDays(1); - LocalDateTime closeDate = selfReviewCloseDate.plusDays(1); + LocalDateTime launchDate = periodEnd.plusMinutes(1) + .truncatedTo(ChronoUnit.MILLIS).plusDays(1); + LocalDateTime selfReviewCloseDate = launchDate.plusDays(3); + LocalDateTime closeDate = selfReviewCloseDate.plusDays(7); return getReviewPeriodRepository().save( new ReviewPeriod( "Period of Closure", ReviewStatus.CLOSED, null, null, diff --git a/server/src/test/java/com/objectcomputing/checkins/services/reports/ReportDataControllerTest.java b/server/src/test/java/com/objectcomputing/checkins/services/reports/ReportDataControllerTest.java index 07ffd0854c..d88012c0b9 100644 --- a/server/src/test/java/com/objectcomputing/checkins/services/reports/ReportDataControllerTest.java +++ b/server/src/test/java/com/objectcomputing/checkins/services/reports/ReportDataControllerTest.java @@ -75,7 +75,7 @@ void createRolesAndPermissions() { questionTwo = saveAnotherTemplateQuestion(feedbackTemplate, 2); feedbackRequest = saveSampleFeedbackRequest(admin, regular, admin, feedbackTemplate.getId(), - reviewPeriod); + reviewPeriod, "submitted"); saveSampleFeedbackAnswer(questionOne.getId(), feedbackRequest.getId()); saveSampleFeedbackAnswer(questionTwo.getId(), feedbackRequest.getId()); From 2094d1fa0f749e4e595ff7f4cb6a47f8d89a4725 Mon Sep 17 00:00:00 2001 From: Michael Kimberlin Date: Thu, 14 Nov 2024 07:23:11 -0600 Subject: [PATCH 2/2] Adjust the inclusion to only rely on the request being sent after the period start date and before the close of the review --- .../checkins/services/reports/ReportDataCollation.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/server/src/main/java/com/objectcomputing/checkins/services/reports/ReportDataCollation.java b/server/src/main/java/com/objectcomputing/checkins/services/reports/ReportDataCollation.java index c26ad9c31b..73913bffa4 100644 --- a/server/src/main/java/com/objectcomputing/checkins/services/reports/ReportDataCollation.java +++ b/server/src/main/java/com/objectcomputing/checkins/services/reports/ReportDataCollation.java @@ -262,7 +262,7 @@ private List getFeedbackType(FeedbackType type) { case FeedbackType.feedback: use = !template.getIsReview() && request.getStatus().equalsIgnoreCase("submitted") && request.getSendDate() != null && request.getSendDate().isAfter(reviewPeriod.getPeriodStartDate().toLocalDate()) && - request.getSubmitDate() != null && request.getSubmitDate().isBefore(reviewPeriod.getCloseDate().toLocalDate()); + request.getSendDate().isBefore(reviewPeriod.getCloseDate().toLocalDate()); break; } if (use) {