Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Feature/closed issues remove triage label #14

Open
wants to merge 14 commits into
base: main
Choose a base branch
from
Open
Changes from 1 commit
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Prev Previous commit
Next Next commit
Run the spring java format command
nWidart committed May 23, 2019

Verified

This commit was signed with the committer’s verified signature. The key has expired.
nWidart Nicolas Widart
commit 051d008c49e8d7af5fd953873adaad7e49e5fb28
3 changes: 2 additions & 1 deletion src/main/java/io/spring/issuebot/IssueOperation.java
Original file line number Diff line number Diff line change
@@ -5,5 +5,6 @@
@FunctionalInterface
public interface IssueOperation {

void run(Issue issue, IssueListener issueListener);
void run(Issue issue, IssueListener issueListener);

}
24 changes: 16 additions & 8 deletions src/main/java/io/spring/issuebot/RepositoryMonitor.java
Original file line number Diff line number Diff line change
@@ -51,19 +51,24 @@ class RepositoryMonitor {
@Scheduled(fixedRate = 5 * 60 * 1000)
void monitor() {
for (Repository repository : this.repositories) {
log.info("Monitoring {}/{}", repository.getOrganization(), repository.getName());
log.info("Monitoring {}/{}", repository.getOrganization(),
repository.getName());
monitorOpenIssues(repository);
monitorClosedIssues(repository);
log.info("Monitoring of {}/{} completed", repository.getOrganization(), repository.getName());
log.info("Monitoring of {}/{} completed", repository.getOrganization(),
repository.getName());
}
}

private void monitorClosedIssues(Repository repository) {
try {
Page<Issue> page = this.gitHub
.getClosedIssuesWithLabel(repository.getOrganization(), repository.getName(), "status: waiting-for-triage");
monitorIssue(page, (issue, issueListener) -> issueListener.onIssueClosure(repository, issue));
} catch (Exception ex) {
Page<Issue> page = this.gitHub.getClosedIssuesWithLabel(
repository.getOrganization(), repository.getName(),
"status: waiting-for-triage");
monitorIssue(page, (issue, issueListener) -> issueListener
.onIssueClosure(repository, issue));
}
catch (Exception ex) {
log.warn("A failure occurred during monitoring of {}/{}",
repository.getOrganization(), repository.getName(), ex);
}
@@ -73,8 +78,10 @@ private void monitorOpenIssues(Repository repository) {
try {
Page<Issue> page = this.gitHub.getIssues(repository.getOrganization(),
repository.getName());
monitorIssue(page, (issue, issueListener) -> issueListener.onOpenIssue(repository, issue));
} catch (Exception ex) {
monitorIssue(page, (issue, issueListener) -> issueListener
.onOpenIssue(repository, issue));
}
catch (Exception ex) {
log.warn("A failure occurred during monitoring of {}/{}",
repository.getOrganization(), repository.getName(), ex);
}
@@ -96,4 +103,5 @@ private void monitorIssue(Page<Issue> page, IssueOperation issueOperation) {
page = page.next();
}
}

}
Original file line number Diff line number Diff line change
@@ -40,7 +40,8 @@ public interface GitHubOperations {
* @param label the label the issues need to have
* @return the issues
*/
Page<Issue> getClosedIssuesWithLabel(String organization, String repository, String label);
Page<Issue> getClosedIssuesWithLabel(String organization, String repository,
String label);

/**
* Returns the comments that have been made on the given {@code issue}.
10 changes: 5 additions & 5 deletions src/main/java/io/spring/issuebot/github/GitHubTemplate.java
Original file line number Diff line number Diff line change
@@ -114,9 +114,10 @@ public Page<Issue> getIssues(String organization, String repository) {
}

@Override
public Page<Issue> getClosedIssuesWithLabel(String organization, String repository, String label) {
public Page<Issue> getClosedIssuesWithLabel(String organization, String repository,
String label) {
String url = "https://api.github.com/repos/" + organization + "/" + repository
+ "/issues?state=closed&labels=" + label;
+ "/issues?state=closed&labels=" + label;
return getPage(url, Issue[].class);
}

@@ -170,9 +171,8 @@ public Issue removeLabel(Issue issue, String labelName) {
}
URI uri = URI.create(issue.getLabelsUrl().replace("{/name}", "/" + encodedName));
log.info("Removing label {} on {}", labelName, uri);
ResponseEntity<Label[]> response = this.rest.exchange(
new RequestEntity<Void>(HttpMethod.DELETE, uri),
Label[].class);
ResponseEntity<Label[]> response = this.rest
.exchange(new RequestEntity<Void>(HttpMethod.DELETE, uri), Label[].class);
if (response.getStatusCode() != HttpStatus.OK) {
log.warn("Failed to remove label from issue. Response status: "
+ response.getStatusCode());
3 changes: 2 additions & 1 deletion src/main/java/io/spring/issuebot/github/Issue.java
Original file line number Diff line number Diff line change
@@ -111,7 +111,7 @@ public PullRequest getPullRequest() {
}

public String getState() {
return state;
return this.state;
}

public boolean isOpen() {
@@ -126,4 +126,5 @@ public boolean isClosed() {
public String toString() {
return this.url;
}

}
31 changes: 21 additions & 10 deletions src/test/java/io/spring/issuebot/RepositoryMonitorTests.java
Original file line number Diff line number Diff line change
@@ -72,8 +72,10 @@ public void repositoriesWithNoIssues() {
public void oneRepositoryWithOpenIssues() {
@SuppressWarnings("unchecked")
Page<Issue> page = mock(Page.class);
Issue issueOne = new Issue(null, null, null, null, null, null, null, null, "open");
Issue issueTwo = new Issue(null, null, null, null, null, null, null, null, "open");
Issue issueOne = new Issue(null, null, null, null, null, null, null, null,
"open");
Issue issueTwo = new Issue(null, null, null, null, null, null, null, null,
"open");
given(page.getContent()).willReturn(Arrays.asList(issueOne, issueTwo));
given(this.gitHub.getIssues("test", "one")).willReturn(page);
given(this.gitHub.getIssues("test", "two")).willReturn(null);
@@ -88,11 +90,15 @@ public void oneRepositoryWithOpenIssues() {
public void onRepositoryWithClosedIssues() {
@SuppressWarnings("unchecked")
Page<Issue> page = mock(Page.class);
Issue issueOne = new Issue(null, null, null, null, null, null, null, null, "closed");
Issue issueTwo = new Issue(null, null, null, null, null, null, null, null, "closed");
Issue issueOne = new Issue(null, null, null, null, null, null, null, null,
"closed");
Issue issueTwo = new Issue(null, null, null, null, null, null, null, null,
"closed");
given(page.getContent()).willReturn(Arrays.asList(issueOne, issueTwo));
given(this.gitHub.getClosedIssuesWithLabel("test", "one", "status: waiting-for-triage")).willReturn(page);
given(this.gitHub.getClosedIssuesWithLabel("test", "two", "status: waiting-for-triage")).willReturn(null);
given(this.gitHub.getClosedIssuesWithLabel("test", "one",
"status: waiting-for-triage")).willReturn(page);
given(this.gitHub.getClosedIssuesWithLabel("test", "two",
"status: waiting-for-triage")).willReturn(null);
this.repositoryMonitor.monitor();
verify(this.issueListenerOne).onIssueClosure(this.repositoryOne, issueOne);
verify(this.issueListenerOne).onIssueClosure(this.repositoryOne, issueTwo);
@@ -104,8 +110,10 @@ public void onRepositoryWithClosedIssues() {
public void bothRepositoriesWithOpenIssues() {
@SuppressWarnings("unchecked")
Page<Issue> page = mock(Page.class);
Issue issueOne = new Issue(null, null, null, null, null, null, null, null, "open");
Issue issueTwo = new Issue(null, null, null, null, null, null, null, null, "open");
Issue issueOne = new Issue(null, null, null, null, null, null, null, null,
"open");
Issue issueTwo = new Issue(null, null, null, null, null, null, null, null,
"open");
given(page.getContent()).willReturn(Arrays.asList(issueOne, issueTwo));
given(this.gitHub.getIssues("test", "one")).willReturn(page);
given(this.gitHub.getIssues("test", "two")).willReturn(page);
@@ -140,7 +148,8 @@ public void exceptionFromAnIssueListenerIsHandledGracefullyForClosedIssues() {
Page<Issue> page = mock(Page.class);
Issue issue = new Issue(null, null, null, null, null, null, null, null, "closed");
given(page.getContent()).willReturn(Collections.singletonList(issue));
given(this.gitHub.getClosedIssuesWithLabel("test", "one", "status: waiting-for-triage")).willReturn(page);
given(this.gitHub.getClosedIssuesWithLabel("test", "one",
"status: waiting-for-triage")).willReturn(page);
willThrow(new RuntimeException()).given(this.issueListenerOne)
.onOpenIssue(this.repositoryOne, issue);
this.repositoryMonitor.monitor();
@@ -157,8 +166,10 @@ public void exceptionFromGitHubIsHandledGracefully() {

@Test
public void exceptionFromGitHubIsHandledGracefullyForClosedIssues() {
given(this.gitHub.getClosedIssuesWithLabel("test", "one", "status: waiting-for-triage")).willThrow(new RuntimeException());
given(this.gitHub.getClosedIssuesWithLabel("test", "one",
"status: waiting-for-triage")).willThrow(new RuntimeException());
this.repositoryMonitor.monitor();
verify(this.gitHub).getIssues("test", "one");
}

}
27 changes: 16 additions & 11 deletions src/test/java/io/spring/issuebot/github/GitHubTemplateTests.java
Original file line number Diff line number Diff line change
@@ -82,10 +82,12 @@ public void singlePageOfIssues() {

@Test
public void singlePageOfClosedIssues() {
this.server.expect(requestTo("https://api.github.com/repos/org/repo/issues?state=closed&labels=status:%20waiting-for-triage"))
this.server.expect(requestTo(
"https://api.github.com/repos/org/repo/issues?state=closed&labels=status:%20waiting-for-triage"))
.andExpect(method(HttpMethod.GET)).andExpect(basicAuth())
.andRespond(withResource("issues-page-one.json"));
Page<Issue> issues = this.gitHub.getClosedIssuesWithLabel("org", "repo", "status: waiting-for-triage");
Page<Issue> issues = this.gitHub.getClosedIssuesWithLabel("org", "repo",
"status: waiting-for-triage");
assertThat(issues.getContent()).hasSize(15);
assertThat(issues.next()).isNull();
}
@@ -111,13 +113,15 @@ public void multiplePagesOfIssues() {
public void multiplePagesOfClosedIssues() {
HttpHeaders headers = new HttpHeaders();
headers.set("Link", "<page-two>; rel=\"next\"");
this.server.expect(requestTo("https://api.github.com/repos/org/repo/issues?state=closed&labels=status:%20waiting-for-triage"))
this.server.expect(requestTo(
"https://api.github.com/repos/org/repo/issues?state=closed&labels=status:%20waiting-for-triage"))
.andExpect(method(HttpMethod.GET)).andExpect(basicAuth())
.andRespond(withResource("issues-page-one.json",
"Link:<page-two>; rel=\"next\""));
this.server.expect(requestTo("/page-two")).andExpect(method(HttpMethod.GET))
.andExpect(basicAuth()).andRespond(withResource("issues-page-two.json"));
Page<Issue> pageOne = this.gitHub.getClosedIssuesWithLabel("org", "repo", "status: waiting-for-triage");
Page<Issue> pageOne = this.gitHub.getClosedIssuesWithLabel("org", "repo",
"status: waiting-for-triage");
assertThat(pageOne.getContent()).hasSize(15);
Page<Issue> pageTwo = pageOne.next();
assertThat(pageTwo).isNotNull();
@@ -196,8 +200,8 @@ public void removeLabelFromIssue() {
this.server.expect(requestTo("labels/test")).andExpect(method(HttpMethod.DELETE))
.andExpect(basicAuth())
.andRespond(withSuccess("[]", MediaType.APPLICATION_JSON));
Issue issue = new Issue(null, null, null, "labels{/name}", null, null, null,
null, null);
Issue issue = new Issue(null, null, null, "labels{/name}", null, null, null, null,
null);
Issue modifiedIssue = this.gitHub.removeLabel(issue, "test");
assertThat(modifiedIssue.getLabels()).isEmpty();
}
@@ -207,8 +211,8 @@ public void removeLabelWithNameThatRequiresEncodingFromIssue() {
this.server.expect(requestTo("labels/status:%20foo"))
.andExpect(method(HttpMethod.DELETE)).andExpect(basicAuth())
.andRespond(withSuccess("[]", MediaType.APPLICATION_JSON));
Issue issue = new Issue(null, null, null, "labels{/name}", null, null, null,
null, null);
Issue issue = new Issue(null, null, null, "labels{/name}", null, null, null, null,
null);
Issue modifiedIssue = this.gitHub.removeLabel(issue, "status: foo");
assertThat(modifiedIssue.getLabels()).isEmpty();
}
@@ -219,7 +223,8 @@ public void addCommentToIssue() {
.andExpect(basicAuth())
.andExpect(content().string("{\"body\":\"A test comment\"}"))
.andRespond(withResource("new-comment.json"));
Issue issue = new Issue(null, "commentsUrl", null, null, null, null, null, null, null);
Issue issue = new Issue(null, "commentsUrl", null, null, null, null, null, null,
null);
Comment comment = this.gitHub.addComment(issue, "A test comment");
assertThat(comment).isNotNull();
}
@@ -258,8 +263,8 @@ public void closeIssue() {
.andExpect(content().string("{\"state\":\"closed\"}"))
.andRespond(withSuccess("{\"url\":\"updatedIssueUrl\"}",
MediaType.APPLICATION_JSON));
Issue closedIssue = this.gitHub
.close(new Issue("issueUrl", null, null, null, null, null, null, null, null));
Issue closedIssue = this.gitHub.close(
new Issue("issueUrl", null, null, null, null, null, null, null, null));
assertThat(closedIssue.getUrl()).isEqualTo("updatedIssueUrl");
}

Original file line number Diff line number Diff line change
@@ -48,4 +48,5 @@ public void doesNotRequireTriage() {
this.listener.doesNotRequireTriage(issue);
verify(this.gitHub).removeLabel(issue, "test");
}

}
Original file line number Diff line number Diff line change
@@ -39,14 +39,18 @@ public class LabelledTriageFilterTests {

@Test
public void issueWithLabels() {
assertThat(this.filter.triaged(this.repository, new Issue(null, null, null, null,
null, Arrays.asList(new Label("test")), null, null, null))).isTrue();
assertThat(
this.filter.triaged(this.repository,
new Issue(null, null, null, null, null,
Arrays.asList(new Label("test")), null, null, null)))
.isTrue();
}

@Test
public void issueWithNullLabels() {
assertThat(this.filter.triaged(this.repository,
new Issue(null, null, null, null, null, null, null, null, null))).isFalse();
new Issue(null, null, null, null, null, null, null, null, null)))
.isFalse();
}

@Test
Original file line number Diff line number Diff line change
@@ -43,7 +43,8 @@ public void issueWithMilestoneApplied() {
@Test
public void issueWithNoMilestoneApplied() {
assertThat(this.filter.triaged(this.repository,
new Issue(null, null, null, null, null, null, null, null, null))).isFalse();
new Issue(null, null, null, null, null, null, null, null, null)))
.isFalse();
}

}
Original file line number Diff line number Diff line change
@@ -46,16 +46,14 @@ public void setUp() {

@Test
public void openedByCollaborator() {
assertThat(this.filter.triaged(this.repository,
new Issue(null, null, null, null, new User("Alice"), null, null, null, null)))
.isTrue();
assertThat(this.filter.triaged(this.repository, new Issue(null, null, null, null,
new User("Alice"), null, null, null, null))).isTrue();
}

@Test
public void openedByAnotherUser() {
assertThat(this.filter.triaged(this.repository,
new Issue(null, null, null, null, new User("Debbie"), null, null, null, null)))
.isFalse();
assertThat(this.filter.triaged(this.repository, new Issue(null, null, null, null,
new User("Debbie"), null, null, null, null))).isFalse();
}

}