Ensure that the feedback reminder comment is only posted once
This commit is contained in:
@@ -42,6 +42,7 @@ class FeedbackConfiguration {
|
||||
new StandardFeedbackListener(gitHub,
|
||||
feedbackProperties.getProvidedLabel(),
|
||||
feedbackProperties.getRequiredLabel(),
|
||||
feedbackProperties.getReminderLabel(),
|
||||
feedbackProperties.getReminderComment(),
|
||||
feedbackProperties.getCloseComment()));
|
||||
}
|
||||
|
||||
@@ -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.
|
||||
*/
|
||||
|
||||
@@ -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);
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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");
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user