Ensure that the feedback reminder comment is only posted once

This commit is contained in:
Andy Wilkinson
2015-12-14 12:31:42 +00:00
parent 8519bc4a78
commit bfd0941e6a
5 changed files with 48 additions and 9 deletions

View File

@@ -42,6 +42,7 @@ class FeedbackConfiguration {
new StandardFeedbackListener(gitHub,
feedbackProperties.getProvidedLabel(),
feedbackProperties.getRequiredLabel(),
feedbackProperties.getReminderLabel(),
feedbackProperties.getReminderComment(),
feedbackProperties.getCloseComment()));
}

View File

@@ -42,6 +42,11 @@ final class FeedbackProperties {
*/
private String providedLabel;
/**
* Name of the label that is applied when the feedback reminder comment has been made.
*/
private String reminderLabel;
/**
* The text of the comment that is added as a reminder that feedback is required.
*/

View File

@@ -20,6 +20,7 @@ import java.time.OffsetDateTime;
import io.spring.issuebot.github.GitHubOperations;
import io.spring.issuebot.github.Issue;
import io.spring.issuebot.github.Label;
/**
* Standard implementation of {@link FeedbackListener}.
@@ -34,15 +35,19 @@ final class StandardFeedbackListener implements FeedbackListener {
private final String requiredLabel;
private final String reminderLabel;
private final String reminderComment;
private final String closeComment;
StandardFeedbackListener(GitHubOperations gitHub, String providedLabel,
String requiredLabel, String reminderComment, String closeComment) {
String requiredLabel, String reminderLabel, String reminderComment,
String closeComment) {
this.gitHub = gitHub;
this.providedLabel = providedLabel;
this.requiredLabel = requiredLabel;
this.reminderLabel = reminderLabel;
this.reminderComment = reminderComment;
this.closeComment = closeComment;
}
@@ -59,7 +64,7 @@ final class StandardFeedbackListener implements FeedbackListener {
if (requestTime.plusDays(14).isBefore(now)) {
close(issue);
}
else if (requestTime.plusDays(7).isBefore(now)) {
else if (requestTime.plusDays(7).isBefore(now) && reminderRequired(issue)) {
remind(issue);
}
}
@@ -68,10 +73,23 @@ final class StandardFeedbackListener implements FeedbackListener {
this.gitHub.addComment(issue, this.closeComment);
this.gitHub.close(issue);
this.gitHub.removeLabel(issue, this.requiredLabel);
this.gitHub.removeLabel(issue, this.reminderLabel);
}
private boolean reminderRequired(Issue issue) {
if (issue.getLabels() != null) {
for (Label label : issue.getLabels()) {
if (this.reminderLabel.equals(label.getName())) {
return false;
}
}
}
return true;
}
private void remind(Issue issue) {
this.gitHub.addComment(issue, this.reminderComment);
this.gitHub.addLabel(issue, this.reminderLabel);
}
}

View File

@@ -13,6 +13,7 @@ issuebot:
feedback:
required_label: waiting-for-feedback
provided_label: feedback-provided
reminder_label: feedback-reminder
reminder_comment: >
If you would like us to look at this issue, please provide the requested
information. If the information is not provided within the next 7 days this issue

View File

@@ -17,11 +17,14 @@
package io.spring.issuebot.feedback;
import java.time.OffsetDateTime;
import java.util.Arrays;
import java.util.Collections;
import org.junit.Test;
import io.spring.issuebot.github.GitHubOperations;
import io.spring.issuebot.github.Issue;
import io.spring.issuebot.github.Label;
import static org.mockito.Mockito.mock;
import static org.mockito.Mockito.verify;
@@ -37,15 +40,17 @@ public class StandardFeedbackListenerTests {
private final GitHubOperations gitHub = mock(GitHubOperations.class);
private final FeedbackListener listener = new StandardFeedbackListener(this.gitHub,
"provided", "required", "reminder", "closing");
"feedback-provided", "feedback-required", "feedback-reminder",
"Please provide requested feedback", "Closing due to lack of feedback");
private final Issue issue = new Issue(null, null, null, null, null, null, null, null);
private final Issue issue = new Issue(null, null, null, null, null,
Collections.<Label>emptyList(), null, null);
@Test
public void feedbackProvided() {
this.listener.feedbackProvided(this.issue);
verify(this.gitHub).addLabel(this.issue, "provided");
verify(this.gitHub).removeLabel(this.issue, "required");
verify(this.gitHub).addLabel(this.issue, "feedback-provided");
verify(this.gitHub).removeLabel(this.issue, "feedback-required");
}
@Test
@@ -57,15 +62,24 @@ public class StandardFeedbackListenerTests {
@Test
public void feedbackRequiredAndReminderDue() {
this.listener.feedbackRequired(this.issue, OffsetDateTime.now().minusDays(8));
verify(this.gitHub).addComment(this.issue, "reminder");
verify(this.gitHub).addComment(this.issue, "Please provide requested feedback");
verify(this.gitHub).addLabel(this.issue, "feedback-reminder");
}
@Test
public void feedbackRequiredReminderDueAndAlreadyCommented() {
Issue issue = new Issue(null, null, null, null, null,
Arrays.asList(new Label("feedback-reminder")), null, null);
this.listener.feedbackRequired(issue, OffsetDateTime.now().minusDays(8));
verifyNoMoreInteractions(this.gitHub);
}
@Test
public void feedbackRequiredAndOverdue() {
this.listener.feedbackRequired(this.issue, OffsetDateTime.now().minusDays(15));
verify(this.gitHub).addComment(this.issue, "closing");
verify(this.gitHub).addComment(this.issue, "Closing due to lack of feedback");
verify(this.gitHub).close(this.issue);
verify(this.gitHub).removeLabel(this.issue, "required");
verify(this.gitHub).removeLabel(this.issue, "feedback-required");
}
}