/*
* Copyright 2009 David Linsin
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package de.linsin.github.rest.service;
import java.util.List;
import de.linsin.github.rest.domain.Comment;
import de.linsin.github.rest.domain.Issue;
import de.linsin.github.rest.domain.Repository;
import static org.junit.Assert.*;
import org.junit.Before;
import org.junit.Ignore;
import org.junit.Test;
import org.springframework.web.client.HttpClientErrorException;
/**
* Testing {@link IssueBrowserIntegration}
*
* @author David Linsin - dlinsin@gmail.com
*/
public class IssueBrowserIntegrationTest {
private IssueBrowser classUnderTest;
private String username;
private String invalidUsername;
private String repoName;
private String noGoodRepoName;
private String noIssuesRepoName;
@Before
public void setUp() {
username = "dlinsin";
invalidUsername = "dlinsin3805";
repoName = "area51";
noGoodRepoName = "blaha232";
noIssuesRepoName = "synoccer";
classUnderTest = new IssueBrowser(username, System.getProperty("apiToken"));
}
@Test
public void browse_open() {
Repository repo = setupTestRepo();
List<Issue> issues = classUnderTest.browseOpen(repo);
assertFalse(issues.isEmpty());
assertEquals(Issue.State.open.name(), issues.get(0).getState());
}
private Repository setupTestRepo() {
Repository repo = new Repository();
repo.setOwner(username);
repo.setName(repoName);
return repo;
}
@Test
public void browse_open_no_issues() {
Repository repo = new Repository();
repo.setOwner(username);
repo.setName(noIssuesRepoName);
List<Issue> issues = classUnderTest.browseOpen(repo);
assertTrue(issues.isEmpty());
}
@Test(expected = HttpClientErrorException.class)
public void browse_open_invalid_user() {
Repository repo = new Repository();
repo.setOwner(invalidUsername);
repo.setName(noIssuesRepoName);
classUnderTest.browseOpen(repo);
}
@Test(expected = HttpClientErrorException.class)
public void browse_open_invalid_repo() {
Repository repo = new Repository();
repo.setOwner(username);
repo.setName(noGoodRepoName);
classUnderTest.browseOpen(repo);
}
@Test
public void browse_closed() {
Repository repo = setupTestRepo();
List<Issue> issues = classUnderTest.browseClosed(repo);
assertFalse(issues.isEmpty());
assertEquals(Issue.State.closed.name(), issues.get(0).getState());
}
@Test
public void browse_closed_no_issues() {
Repository repo = new Repository();
repo.setOwner(username);
repo.setName(noIssuesRepoName);
List<Issue> issues = classUnderTest.browseClosed(repo);
assertTrue(issues.isEmpty());
}
@Test(expected = HttpClientErrorException.class)
public void browse_closed_invalid_user() {
Repository repo = new Repository();
repo.setOwner(invalidUsername);
repo.setName(noIssuesRepoName);
classUnderTest.browseClosed(repo);
}
@Test(expected = HttpClientErrorException.class)
public void browse_closed_invalid_repo() {
Repository repo = new Repository();
repo.setOwner(username);
repo.setName(noGoodRepoName);
classUnderTest.browseClosed(repo);
}
@Test
public void browse_issue() {
Repository repo = setupTestRepo();
Issue issue = classUnderTest.browse(repo, 1);
assertNotNull(issue);
assertTrue(issue.getNumber() == 1);
}
@Test(expected = HttpClientErrorException.class)
public void browse_none_existing_issue() {
Repository repo = setupTestRepo();
classUnderTest.browse(repo, 1024);
}
@Test(expected = HttpClientErrorException.class)
public void browse_invalid_user() {
Repository repo = new Repository();
repo.setOwner(invalidUsername);
repo.setName(repoName);
classUnderTest.browse(repo, 1);
}
@Test(expected = HttpClientErrorException.class)
public void browse_invalid_repo() {
Repository repo = new Repository();
repo.setOwner(username);
repo.setName(noGoodRepoName);
classUnderTest.browse(repo, 1024);
}
@Test
public void open_issue() {
Repository repo = setupTestRepo();
Issue newIssue = new Issue();
String title = "Issue " + System.currentTimeMillis();
newIssue.setTitle(title);
String body = "my test issue";
newIssue.setBody(body);
Issue ret = classUnderTest.open(repo, newIssue);
assertEquals(title, ret.getTitle());
assertEquals(body, ret.getBody());
assertTrue(ret.getNumber() > 0);
}
@Test(expected = HttpClientErrorException.class)
public void open_issue_invalid_user() {
Repository repo = setupTestRepo();
repo.setOwner(invalidUsername);
Issue newIssue = new Issue();
String title = "Issue " + System.currentTimeMillis();
newIssue.setTitle(title);
String body = "my test issue";
newIssue.setBody(body);
classUnderTest.open(repo, newIssue);
}
@Test(expected = HttpClientErrorException.class)
public void open_issue_invalid_repo() {
Repository repo = setupTestRepo();
repo.setName(noGoodRepoName);
Issue newIssue = new Issue();
String title = "Issue " + System.currentTimeMillis();
newIssue.setTitle(title);
String body = "my test issue";
newIssue.setBody(body);
classUnderTest.open(repo, newIssue);
}
@Test(expected = HttpClientErrorException.class)
public void open_issue_not_authorized() {
classUnderTest = new IssueBrowser(username, "123");
Repository repo = setupTestRepo();
Issue newIssue = new Issue();
String title = "Issue " + System.currentTimeMillis();
newIssue.setTitle(title);
String body = "my test issue";
newIssue.setBody(body);
classUnderTest.open(repo, newIssue);
}
@Test
public void close_issue() {
Repository repo = setupTestRepo();
Issue issue = setUpTestIssue(repo);
classUnderTest.close(repo, issue);
assertTrue(classUnderTest.browseClosed(repo).contains(issue));
}
@Test
public void close_issue_invalid_user() {
Repository repo = setupTestRepo();
Issue issue = setUpTestIssue(repo);
repo.setOwner(invalidUsername);
try {
classUnderTest.close(repo, issue);
fail("expected exception");
} catch (HttpClientErrorException e) {
assertTrue(classUnderTest.browseOpen(setupTestRepo()).contains(issue));
}
}
@Test
public void close_issue_invalid_repo() {
Repository repo = setupTestRepo();
Issue issue = setUpTestIssue(repo);
repo.setName(noGoodRepoName);
try {
classUnderTest.close(repo, issue);
fail("expected exception");
} catch (HttpClientErrorException e) {
assertTrue(classUnderTest.browseOpen(setupTestRepo()).contains(issue));
}
}
@Test
public void close_issue_invalid_number() {
Repository repo = setupTestRepo();
Issue issue = setUpTestIssue(repo);
Issue newIssue = new Issue();
newIssue.setNumber(99999);
try {
classUnderTest.close(repo, newIssue);
fail("expected exception");
} catch (HttpClientErrorException e) {
assertTrue(classUnderTest.browseOpen(repo).contains(issue));
}
}
@Test
public void reopen_issue() {
Repository repo = setupTestRepo();
Issue issue = setUpClosedTestIssue(repo);
issue = classUnderTest.reopen(repo, issue);
assertTrue(classUnderTest.browseOpen(repo).contains(issue));
}
@Test
public void reopen_issue_invalid_user() {
Repository repo = setupTestRepo();
Issue issue = setUpClosedTestIssue(repo);
repo.setOwner(invalidUsername);
try {
classUnderTest.reopen(repo, issue);
fail("expected exception");
} catch (HttpClientErrorException e) {
assertTrue(classUnderTest.browseClosed(setupTestRepo()).contains(issue));
}
}
@Test
public void reopen_issue_invalid_repo() {
Repository repo = setupTestRepo();
Issue issue = setUpClosedTestIssue(repo);
repo.setName(noGoodRepoName);
try {
classUnderTest.reopen(repo, issue);
fail("expected exception");
} catch (HttpClientErrorException e) {
assertTrue(classUnderTest.browseClosed(setupTestRepo()).contains(issue));
}
}
@Test(expected = HttpClientErrorException.class)
public void reopen_issue_invalid_number() {
Repository repo = setupTestRepo();
Issue issue = new Issue();
issue.setNumber(99999);
classUnderTest.close(repo, issue);
}
@Test
public void edit_issue() {
Repository repo = setupTestRepo();
Issue issue = setUpTestIssue(repo);
String body = "this was edited";
issue.setBody(body);
Issue editedIssue = classUnderTest.edit(repo, issue);
assertEquals(issue, editedIssue);
assertEquals(body, editedIssue.getBody());
assertEquals(issue.getBody(), editedIssue.getBody());
}
@Test
public void edit_issue_invalid_repo() {
Repository repo = setupTestRepo();
Issue issue = setUpTestIssue(repo);
issue.setBody("this is edit");
repo.setName(noGoodRepoName);
try {
classUnderTest.edit(repo, issue);
fail("expected exception");
} catch (HttpClientErrorException e) {
assertFalse(classUnderTest.browse(setupTestRepo(), issue.getNumber()).getBody().equals(issue.getBody()));
}
}
// TODO this test doesn't work due to an issue with github
@Test
@Ignore
public void edit_issue_invalid_user() {
Repository repo = setupTestRepo();
Issue issue = setUpTestIssue(repo);
issue.setBody("this is edit");
repo.setOwner(invalidUsername);
try {
classUnderTest.edit(repo, issue);
fail("expected exception");
} catch (HttpClientErrorException e) {
assertFalse(classUnderTest.browse(setupTestRepo(), issue.getNumber()).getBody().equals(issue.getBody()));
}
}
@Test(expected = HttpClientErrorException.class)
public void edit_issue_invalid_number() {
Repository repo = setupTestRepo();
Issue issue = new Issue();
issue.setNumber(99999);
issue.setTitle("test");
issue.setBody("test body");
classUnderTest.edit(repo, issue);
}
@Test
public void comment_issue() {
Repository repo = setupTestRepo();
Issue issue = setUpTestIssue(repo);
Comment comment = new Comment();
comment.setComment("dummy comment");
Comment savedComment = classUnderTest.comment(repo, issue, comment);
assertEquals(Comment.Status.saved.name(), savedComment.getStatus());
}
@Test(expected = HttpClientErrorException.class)
public void comment_issue_invalid_repo() {
Repository repo = setupTestRepo();
Issue issue = setUpTestIssue(repo);
repo.setName(noGoodRepoName);
Comment comment = new Comment();
comment.setComment("dummy comment");
classUnderTest.comment(repo, issue, comment);
}
@Test(expected = HttpClientErrorException.class)
public void comment_issue_invalid_user() {
Repository repo = setupTestRepo();
Issue issue = setUpTestIssue(repo);
repo.setOwner(invalidUsername);
Comment comment = new Comment();
comment.setComment("dummy comment");
classUnderTest.comment(repo, issue, comment);
}
@Test(expected = HttpClientErrorException.class)
public void comment_issue_invalid_number() {
Repository repo = setupTestRepo();
Issue issue = setUpTestIssue(repo);
issue.setNumber(99999);
Comment comment = new Comment();
comment.setComment("dummy comment");
classUnderTest.comment(repo, issue, comment);
}
private Issue setUpTestIssue(Repository argRepo) {
Issue newIssue = new Issue();
String title = "Issue " + System.currentTimeMillis();
newIssue.setTitle(title);
String body = "my test issue";
newIssue.setBody(body);
return classUnderTest.open(argRepo, newIssue);
}
private Issue setUpClosedTestIssue(Repository argRepo) {
Issue newIssue = new Issue();
String title = "Issue " + System.currentTimeMillis();
newIssue.setTitle(title);
String body = "my test issue";
newIssue.setBody(body);
newIssue = classUnderTest.open(argRepo, newIssue);
classUnderTest.close(argRepo, newIssue);
return newIssue;
}
}