Skip to content

Commit

Permalink
Merge remote-tracking branch 'origin/master' into feature-395-improve…
Browse files Browse the repository at this point in the history
…-github-solver-resolver
  • Loading branch information
Nico Peeters committed Jun 25, 2018
2 parents c9cfcf6 + 29747c4 commit d0e6854
Show file tree
Hide file tree
Showing 4 changed files with 86 additions and 43 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -19,32 +19,41 @@ public GithubSolverResolver(final GithubGateway githubGateway) {

public String resolve(final Document document, final String owner, final String repo) {
return document.select(".discussion-item")
.stream()
.filter(this::isPullRequest)
.filter(this::isMerged)
.map(discussionItem -> getAuthor(discussionItem, owner, repo))
.filter(StringUtils::isNotEmpty)
.findFirst()
.orElse(null);
.stream()
.filter(this::isPullRequest)
.filter(this::isMerged)
.map(this::resolvePullRequestNumber)
.map(pullRequestNumber -> fetchAuthorFromPullRequest(pullRequestNumber, owner, repo))
.filter(StringUtils::isNotEmpty)
.findFirst()
.orElse(null);
}

private String getAuthor(final Element discussionItem, final String owner, final String repo) {
final String author = extractAuthorFromDiscussionItem(discussionItem);
return authorFound(author) ? author : fetchAuthorFromPullrequest(discussionItem, owner, repo);
private String resolvePullRequestNumber(final Element discussionItem) {
final String pullRequestNumber;
if (isPullRequestInSingleDiscussionItem(discussionItem)) {
pullRequestNumber = getPullRequestNumberFromSingleDiscussionItem(discussionItem);
} else {
pullRequestNumber = getPullRequestNumberFromInlineDiscussionItem(discussionItem);
}
return pullRequestNumber.replace("#", "");
}

private String extractAuthorFromDiscussionItem(final Element discussionItem) {
return discussionItem.select(".discussion-item a.author").text();
private String getPullRequestNumberFromSingleDiscussionItem(final Element discussionItem) {
return discussionItem.select(".discussion-item [id^=ref-pullrequest-] ~ .discussion-item-ref-title span.issue-num").text();
}

private String fetchAuthorFromPullrequest(final Element discussionItem, final String owner, final String repo) {
final String pullRequestNumber = discussionItem.select(".discussion-item [id^=ref-pullrequest-] span.issue-num").text();
final GithubResult pullrequest = githubGateway.getPullrequest(owner, repo, pullRequestNumber.replace("#", ""));
return pullrequest.getUser().getLogin();
private String getPullRequestNumberFromInlineDiscussionItem(final Element discussionItem) {
return discussionItem.select(".discussion-item [id^=ref-pullrequest-] span.issue-num").text();
}

private boolean authorFound(final String author) {
return StringUtils.isNotEmpty(author);
private String fetchAuthorFromPullRequest(final String pullRequestNumber, final String owner, final String repo) {
final GithubResult pullRequest = githubGateway.getPullrequest(owner, repo, pullRequestNumber);
return pullRequest.getUser().getLogin();
}

private boolean isPullRequestInSingleDiscussionItem(final Element discussionItem) {
return discussionItem.select(".discussion-item .discussion-item-rollup-ref [id^=ref-pullrequest-]").isEmpty();
}

private boolean isPullRequest(final Element discussionItem) {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -55,14 +55,6 @@ public DiscussionItemBuilder isPullRequest(boolean isPullRequest) {
return this;
}

public DiscussionItemBuilder isPullRequest(boolean isPullRequest, final String number) {
isPullRequest(isPullRequest);
final Elements pullRequestElements = mock(Elements.class);
when(pullRequestElements.text()).thenReturn(number);
when(element.select(".discussion-item [id^=ref-pullrequest-] span.issue-num")).thenReturn(pullRequestElements);
return this;
}

public DiscussionItemBuilder isMerged(boolean isMerged) {
final Elements mergedElements = mock(Elements.class);
when(mergedElements.isEmpty()).thenReturn(!isMerged);
Expand All @@ -77,6 +69,23 @@ public DiscussionItemBuilder withAuthor(final String author) {
return this;
}

public DiscussionItemBuilder withIssueNum(final int issueNum, final boolean isInlinePullRequest) {
final Elements pullRequestElements = mock(Elements.class);
final Elements pullRequestIssueNumElements = mock(Elements.class);

when(pullRequestElements.isEmpty()).thenReturn(!isInlinePullRequest);
when(element.select(".discussion-item .discussion-item-rollup-ref [id^=ref-pullrequest-]")).thenReturn(pullRequestElements);

if (isInlinePullRequest) {
when(pullRequestIssueNumElements.text()).thenReturn("#" + String.valueOf(issueNum));
when(element.select(".discussion-item [id^=ref-pullrequest-] span.issue-num")).thenReturn(pullRequestIssueNumElements);
} else {
when(pullRequestIssueNumElements.text()).thenReturn("#" + String.valueOf(issueNum));
when(element.select(".discussion-item [id^=ref-pullrequest-] ~ .discussion-item-ref-title span.issue-num")).thenReturn(pullRequestIssueNumElements);
}
return this;
}

public Element build() {
return element;
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -44,6 +44,20 @@ public void fetch_parsesCorrectSolver_whenIssueIsReferencedFromMultipleIssuesOrP
assertThat(githubIssue.getStatus()).isEqualTo("Closed");
}

@Test
public void fetch_parsesCorrectSolver_whenReferencerInIssueIsNotOwnerPullRequest() {
final String owner = "FundRequest";
final String repo = "contracts";
final String number = "48";

final GithubIssue githubIssue = scraper.fetchGithubIssue(owner, repo, number);

assertThat(githubIssue.getNumber()).isEqualTo("48");
assertThat(githubIssue.getSolver()).isEqualTo("pauliax");
//TODO Uncomment when issue https://github.com/FundRequest/contracts/issues/48 is closed.
// assertThat(githubIssue.getStatus()).isEqualTo("Closed");
}

@Test
public void fetch_whenNoSolver() {
final String owner = "FundRequest";
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -27,23 +27,29 @@ public void parse() {
final String owner = "tfjgk";
final String repo = "hfcjgv";
final String solver = "dfgh";
final String pullrequestNumber = "765";
final int pullrequestNumber = 765;
final Document doc = DocumentMockBuilder.documentBuilder()
.addDiscussionItem(DocumentMockBuilder.discussionItemBuilder()
.isPullRequest(false)
.build())
.addDiscussionItem(DocumentMockBuilder.discussionItemBuilder()
.isPullRequest(true, "53")
.isPullRequest(true)
.isMerged(false)
.withAuthor("hgfcjgv")
.withIssueNum(53, false)
.build())
.addDiscussionItem(DocumentMockBuilder.discussionItemBuilder()
.isPullRequest(true, pullrequestNumber)
.isPullRequest(true)
.isMerged(true)
.withAuthor(solver)
.withAuthor("gdhfh")
.withIssueNum(pullrequestNumber, false)
.build())
.build();

when(githubGateway.getPullrequest(owner, repo, String.valueOf(pullrequestNumber))).thenReturn(GithubResult.builder()
.user(GithubUser.builder().login(solver).build())
.build());

final String returnedSolver = parser.resolve(doc, owner, repo);

assertThat(returnedSolver).isEqualTo(solver);
Expand All @@ -54,25 +60,27 @@ public void parse_pullRequestMerged_noSolverOnPage() {
final String owner = "tfjgk";
final String repo = "hfcjgv";
final String solver = "dfgh";
final String pullrequestNumber = "765";
final int pullrequestNumber = 765;
final Document doc = DocumentMockBuilder.documentBuilder()
.addDiscussionItem(DocumentMockBuilder.discussionItemBuilder()
.isPullRequest(false)
.build())
.addDiscussionItem(DocumentMockBuilder.discussionItemBuilder()
.isPullRequest(true, "53")
.isPullRequest(true)
.isMerged(false)
.withAuthor("hgfcjgv")
.withIssueNum(53, false)
.build())
.addDiscussionItem(DocumentMockBuilder.discussionItemBuilder()
.isPullRequest(true, pullrequestNumber)
.isPullRequest(true)
.isMerged(true)
.withAuthor("")
.withIssueNum(pullrequestNumber, true)
.build())
.build();
when(githubGateway.getPullrequest(owner, repo, pullrequestNumber)).thenReturn(GithubResult.builder()
.user(GithubUser.builder().login(solver).build())
.build());
when(githubGateway.getPullrequest(owner, repo, String.valueOf(pullrequestNumber))).thenReturn(GithubResult.builder()
.user(GithubUser.builder().login(solver).build())
.build());

final String returnedSolver = parser.resolve(doc, owner, repo);

Expand Down Expand Up @@ -114,7 +122,8 @@ public void parse_noMergedPullRequest() {
final String repo = "hfcjgv";
final Document doc = DocumentMockBuilder.documentBuilder()
.addDiscussionItem(DocumentMockBuilder.discussionItemBuilder()
.isPullRequest(true, "53")
.isPullRequest(true)
.withIssueNum(53, false)
.isMerged(false)
.withAuthor("hgfcjgv")
.build())
Expand All @@ -129,25 +138,27 @@ public void parse_noMergedPullRequest() {
public void parse_noSolver() {
final String owner = "tfjgk";
final String repo = "hfcjgv";
final String pullrequestNumber = "43";
final int pullrequestNumber = 43;
final Document doc = DocumentMockBuilder.documentBuilder()
.addDiscussionItem(DocumentMockBuilder.discussionItemBuilder()
.isPullRequest(false)
.build())
.addDiscussionItem(DocumentMockBuilder.discussionItemBuilder()
.isPullRequest(true, "31")
.isPullRequest(true)
.isMerged(false)
.withIssueNum(31, false)
.withAuthor("ljhkgfdy")
.build())
.addDiscussionItem(DocumentMockBuilder.discussionItemBuilder()
.isPullRequest(true, pullrequestNumber)
.isPullRequest(true)
.isMerged(true)
.withAuthor("")
.withIssueNum(pullrequestNumber, true)
.build())
.build();
when(githubGateway.getPullrequest(owner, repo, pullrequestNumber)).thenReturn(GithubResult.builder()
.user(GithubUser.builder().login("").build())
.build());
when(githubGateway.getPullrequest(owner, repo, String.valueOf(pullrequestNumber))).thenReturn(GithubResult.builder()
.user(GithubUser.builder().login("").build())
.build());

final String returnedSolver = parser.resolve(doc, owner, repo);

Expand Down

0 comments on commit d0e6854

Please sign in to comment.