diff --git a/pom.xml b/pom.xml index 478e0fbffc..5333aaf838 100644 --- a/pom.xml +++ b/pom.xml @@ -7,7 +7,7 @@ github-api - 1.49 + 1.50 GitHub API for Java http://github-api.kohsuke.org/ GitHub API for Java @@ -16,7 +16,7 @@ scm:git:git@github.com/kohsuke/${project.artifactId}.git scm:git:ssh://git@github.com/kohsuke/${project.artifactId}.git http://${project.artifactId}.kohsuke.org/ - github-api-1.49 + HEAD @@ -61,7 +61,7 @@ junit junit - 3.8.1 + 4.11 test diff --git a/src/main/java/org/kohsuke/github/GHContent.java b/src/main/java/org/kohsuke/github/GHContent.java index adc1285ed9..61c474fa6f 100644 --- a/src/main/java/org/kohsuke/github/GHContent.java +++ b/src/main/java/org/kohsuke/github/GHContent.java @@ -9,7 +9,7 @@ * * @author Alexandre COLLIGNON */ -public final class GHContent { +public class GHContent { private GHRepository owner; private String type; diff --git a/src/main/java/org/kohsuke/github/GHHook.java b/src/main/java/org/kohsuke/github/GHHook.java index fa797db933..aca2b6dc01 100644 --- a/src/main/java/org/kohsuke/github/GHHook.java +++ b/src/main/java/org/kohsuke/github/GHHook.java @@ -34,7 +34,7 @@ public String getName() { public EnumSet getEvents() { EnumSet s = EnumSet.noneOf(GHEvent.class); for (String e : events) - Enum.valueOf(GHEvent.class,e.toUpperCase(Locale.ENGLISH)); + s.add(Enum.valueOf(GHEvent.class,e.toUpperCase(Locale.ENGLISH))); return s; } diff --git a/src/main/java/org/kohsuke/github/GHIssue.java b/src/main/java/org/kohsuke/github/GHIssue.java index dfd73dc785..e83176ace5 100644 --- a/src/main/java/org/kohsuke/github/GHIssue.java +++ b/src/main/java/org/kohsuke/github/GHIssue.java @@ -190,7 +190,7 @@ public void assignTo(GHUser user) throws IOException { } public void setLabels(String... labels) throws IOException { - edit("assignee",labels); + edit("labels",labels); } /** diff --git a/src/main/java/org/kohsuke/github/GHMilestone.java b/src/main/java/org/kohsuke/github/GHMilestone.java index e32f13843b..86efca5d04 100644 --- a/src/main/java/org/kohsuke/github/GHMilestone.java +++ b/src/main/java/org/kohsuke/github/GHMilestone.java @@ -1,5 +1,6 @@ package org.kohsuke.github; +import java.io.IOException; import java.util.Date; import java.util.Locale; @@ -65,6 +66,21 @@ public GHMilestoneState getState() { return Enum.valueOf(GHMilestoneState.class, state.toUpperCase(Locale.ENGLISH)); } + /** + * Closes this issue. + */ + public void close() throws IOException { + edit("state", "closed"); + } + + private void edit(String key, Object value) throws IOException { + new Requester(root)._with(key, value).method("PATCH").to(getApiRoute()); + } + + protected String getApiRoute() { + return "/repos/"+owner.getOwnerName()+"/"+owner.getName()+"/milestones/"+number; + } + public GHMilestone wrap(GHRepository repo) { this.owner = repo; this.root = repo.root; diff --git a/src/main/java/org/kohsuke/github/GHMyself.java b/src/main/java/org/kohsuke/github/GHMyself.java index 70e732ac9e..c770f0449e 100644 --- a/src/main/java/org/kohsuke/github/GHMyself.java +++ b/src/main/java/org/kohsuke/github/GHMyself.java @@ -45,7 +45,7 @@ public List getPublicKeys() throws IOException { } /** - * Returns the read-only list of all the pulic verified keys of the current user. + * Returns the read-only list of all the public verified keys of the current user. * * Differently from the getPublicKeys() method, the retrieval of the user's * verified public keys does not require any READ/WRITE OAuth Scope to the diff --git a/src/main/java/org/kohsuke/github/GHOrganization.java b/src/main/java/org/kohsuke/github/GHOrganization.java index ec899c0538..b354d486dd 100644 --- a/src/main/java/org/kohsuke/github/GHOrganization.java +++ b/src/main/java/org/kohsuke/github/GHOrganization.java @@ -1,7 +1,6 @@ package org.kohsuke.github; import java.io.IOException; -import java.util.AbstractList; import java.util.ArrayList; import java.util.Arrays; import java.util.Collection; @@ -78,26 +77,44 @@ public void publicize(GHUser u) throws IOException { } /** - * All the members of this organization. + * @deprecated use {@link #listMembers()} */ public List getMembers() throws IOException { - return new AbstractList() { - // these are shallow objects with only some limited values filled out - // TODO: it's better to allow objects to fill themselves in later when missing values are requested - final GHUser[] shallow = root.retrieve().to("/orgs/" + login + "/members", GHUser[].class); - - @Override - public GHUser get(int index) { - try { - return root.getUser(shallow[index].getLogin()); - } catch (IOException e) { - throw new RuntimeException(e); - } - } + return listMembers().asList(); + } + + /** + * All the members of this organization. + */ + public PagedIterable listMembers() throws IOException { + return listMembers("members"); + } + + /** + * All the public members of this organization. + */ + public PagedIterable listPublicMembers() throws IOException { + return listMembers("public_members"); + } + + private PagedIterable listMembers(String suffix) throws IOException { + return listMembers(suffix, null); + } + + public PagedIterable listMembersWithFilter(String filter) throws IOException { + return listMembers("members", filter); + } - @Override - public int size() { - return shallow.length; + private PagedIterable listMembers(final String suffix, final String filter) throws IOException { + return new PagedIterable() { + public PagedIterator iterator() { + String filterParams = (filter == null) ? "" : ("?filter=" + filter); + return new PagedIterator(root.retrieve().asIterator(String.format("/orgs/%s/%s%s", login, suffix, filterParams), GHUser[].class)) { + @Override + protected void wrapUp(GHUser[] users) { + GHUser.wrap(users, root); + } + }; } }; } @@ -173,4 +190,26 @@ protected void wrapUp(GHEventInfo[] page) { } }; } + + /** + * Lists up all the repositories using the specified page size. + * + * @param pageSize size for each page of items returned by GitHub. Maximum page size is 100. + * + * Unlike {@link #getRepositories()}, this does not wait until all the repositories are returned. + */ + @Override + public PagedIterable listRepositories(final int pageSize) { + return new PagedIterable() { + public PagedIterator iterator() { + return new PagedIterator(root.retrieve().asIterator("/orgs/" + login + "/repos?per_page=" + pageSize, GHRepository[].class)) { + @Override + protected void wrapUp(GHRepository[] page) { + for (GHRepository c : page) + c.wrap(root); + } + }; + } + }; + } } diff --git a/src/main/java/org/kohsuke/github/GHPullRequest.java b/src/main/java/org/kohsuke/github/GHPullRequest.java index a8105eb97c..c01753988c 100644 --- a/src/main/java/org/kohsuke/github/GHPullRequest.java +++ b/src/main/java/org/kohsuke/github/GHPullRequest.java @@ -191,18 +191,30 @@ private void populate() throws IOException { /** * Retrieves all the commits associated to this pull request. */ - public PagedIterable listCommits() { - return new PagedIterable() { - public PagedIterator iterator() { - return new PagedIterator(root.retrieve().asIterator( - String.format("%s/commits", getApiURL().getPath()), - GHPullRequestCommitDetail[].class)) { - @Override - protected void wrapUp(GHPullRequestCommitDetail[] page) { - } + public PagedIterable listCommits() { + return new PagedIterable() { + public PagedIterator iterator() { + return new PagedIterator(root.retrieve().asIterator( + String.format("%s/commits", getApiURL().getPath()), + GHPullRequestCommitDetail[].class)) { + @Override + protected void wrapUp(GHPullRequestCommitDetail[] page) { + } + }; + } }; - } - }; - } + } + + /** + * Merge this pull request. + * + * The equivalent of the big green "Merge pull request" button. + * + * @param msg + * Commit message. If null, the default one will be used. + */ + public void merge(String msg) throws IOException { + new Requester(root).method("PUT").with("commit_message",msg).to(getApiRoute()+"/merge"); + } } diff --git a/src/main/java/org/kohsuke/github/GHRepository.java b/src/main/java/org/kohsuke/github/GHRepository.java index c1146f8e4b..6a6b93ae73 100644 --- a/src/main/java/org/kohsuke/github/GHRepository.java +++ b/src/main/java/org/kohsuke/github/GHRepository.java @@ -23,8 +23,10 @@ */ package org.kohsuke.github; +import com.fasterxml.jackson.annotation.JsonProperty; import com.infradna.tool.bridge_method_injector.WithBridgeMethods; +import javax.xml.bind.DatatypeConverter; import java.io.IOException; import java.io.InterruptedIOException; import java.net.URL; @@ -42,7 +44,6 @@ import java.util.Map; import java.util.Set; import java.util.TreeMap; -import javax.xml.bind.DatatypeConverter; import static java.util.Arrays.*; @@ -59,7 +60,9 @@ public class GHRepository { private String url; // this is the API url private String html_url; // this is the UI private GHUser owner; // not fully populated. beware. - private boolean has_issues, has_wiki, fork, _private, has_downloads; + private boolean has_issues, has_wiki, fork, has_downloads; + @JsonProperty("private") + private boolean _private; private int watchers,forks,open_issues,size; private String created_at, pushed_at; private Map milestones = new HashMap(); @@ -147,6 +150,13 @@ public List getIssues(GHIssueState state) throws IOException { return listIssues(state).asList(); } + public List getIssues(GHIssueState state, GHMilestone milestone) throws IOException { + return Arrays.asList(GHIssue.wrap(root.retrieve() + .to(String.format("/repos/%s/%s/issues?state=%s&milestone=%s", owner.login, name, + state.toString().toLowerCase(), milestone == null ? "none" : "" + milestone.getNumber()), + GHIssue[].class), this)); + } + /** * Lists up all the issues in this repository. */ diff --git a/src/main/java/org/kohsuke/github/GHTeam.java b/src/main/java/org/kohsuke/github/GHTeam.java index 55b2917958..c578130fa6 100644 --- a/src/main/java/org/kohsuke/github/GHTeam.java +++ b/src/main/java/org/kohsuke/github/GHTeam.java @@ -49,6 +49,18 @@ public Set getMembers() throws IOException { return new HashSet(Arrays.asList(GHUser.wrap(org.root.retrieve().to(api("/members"), GHUser[].class), org.root))); } + /** + * Checks if this team has the specified user as a member. + */ + public boolean hasMember(GHUser user) { + try { + org.root.retrieve().to("/teams/" + id + "/members/" + user.getLogin()); + return true; + } catch (IOException ignore) { + return false; + } + } + public Map getRepositories() throws IOException { GHRepository[] repos = org.root.retrieve().to(api("/repos"), GHRepository[].class); Map m = new TreeMap(); diff --git a/src/main/java/org/kohsuke/github/GHUser.java b/src/main/java/org/kohsuke/github/GHUser.java index 42ec16c5cd..55c528e3b1 100644 --- a/src/main/java/org/kohsuke/github/GHUser.java +++ b/src/main/java/org/kohsuke/github/GHUser.java @@ -76,6 +76,13 @@ public boolean isMemberOf(GHOrganization org) { return org.hasMember(this); } + /** + * Returns true if this user belongs to the specified team. + */ + public boolean isMemberOf(GHTeam team) { + return team.hasMember(this); + } + /** * Returns true if this user belongs to the specified organization as a public member. */ diff --git a/src/test/java/Foo.java b/src/test/java/Foo.java index 95e13f8182..f5a88a34ae 100644 --- a/src/test/java/Foo.java +++ b/src/test/java/Foo.java @@ -7,7 +7,6 @@ */ public class Foo { public static void main(String[] args) throws Exception { - System.out.println(GitHub.connect().createToken( - Arrays.asList("user", "repo", "delete_repo", "notifications", "gist"), "GitHub API", null).getToken()); + System.out.println(GitHub.connect().getOrganization("cloudbees").getRepository("grandcentral").isPrivate()); } } diff --git a/src/test/java/org/kohsuke/AppTest.java b/src/test/java/org/kohsuke/AppTest.java index 0b8177657c..2847c0f8ec 100644 --- a/src/test/java/org/kohsuke/AppTest.java +++ b/src/test/java/org/kohsuke/AppTest.java @@ -1,15 +1,30 @@ package org.kohsuke; -import junit.framework.TestCase; +import java.io.IOException; +import java.net.URL; +import java.util.ArrayList; +import java.util.List; +import java.util.Map; +import java.util.Set; + +import static org.junit.Assert.assertEquals; +import static org.junit.Assert.assertFalse; +import static org.junit.Assert.assertNotNull; +import static org.junit.Assert.assertSame; +import static org.junit.Assert.assertTrue; +import org.junit.Assume; +import org.junit.Before; +import org.junit.Test; +import org.kohsuke.github.GHBranch; import org.kohsuke.github.GHCommit; import org.kohsuke.github.GHCommit.File; import org.kohsuke.github.GHCommitComment; +import org.kohsuke.github.GHCommitState; import org.kohsuke.github.GHCommitStatus; import org.kohsuke.github.GHEvent; import org.kohsuke.github.GHEventInfo; import org.kohsuke.github.GHEventPayload; import org.kohsuke.github.GHHook; -import org.kohsuke.github.GHBranch; import org.kohsuke.github.GHIssue; import org.kohsuke.github.GHIssueComment; import org.kohsuke.github.GHIssueState; @@ -25,43 +40,51 @@ import org.kohsuke.github.GitHub; import org.kohsuke.github.PagedIterable; -import java.io.IOException; -import java.net.URL; -import java.util.ArrayList; -import java.util.Map; -import java.util.Set; -import java.util.List; - /** * Unit test for simple App. */ -public class AppTest extends TestCase { +public class AppTest { private GitHub gitHub; - @Override + @Before public void setUp() throws Exception { - super.setUp(); gitHub = GitHub.connect(); } + private String getTestRepositoryName() throws IOException { + return getUser().getLogin() + "/github-api-test"; + } + + @Test public void testRepoCRUD() throws Exception { - GHRepository existing = gitHub.getMyself().getRepository("github-api-test"); - if (existing!=null) - existing.delete(); - GHRepository r = gitHub.createRepository("github-api-test", "a test repository", "http://github-api.kohsuke.org/", true); + String targetName = "github-api-test-rename2"; + + deleteRepository("github-api-test-rename"); + deleteRepository(targetName); + GHRepository r = gitHub.createRepository("github-api-test-rename", "a test repository", "http://github-api.kohsuke.org/", true); r.enableIssueTracker(false); r.enableDownloads(false); r.enableWiki(false); - r.renameTo("github-api-test2"); - gitHub.getMyself().getRepository("github-api-test2").delete(); + r.renameTo(targetName); + getUser().getRepository(targetName).delete(); + } + + private void deleteRepository(final String name) throws IOException { + GHRepository repository = getUser().getRepository(name); + if(repository != null) { + repository.delete(); + } } + @Test public void testCredentialValid() throws IOException { assertTrue(gitHub.isCredentialValid()); - assertFalse(GitHub.connect("totally", "bogus").isCredentialValid()); + GitHub connect = GitHub.connect("totally", "bogus"); + assertFalse(connect.isCredentialValid()); } + @Test public void testIssueWithNoComment() throws IOException { GHRepository repository = gitHub.getRepository("kohsuke/test"); List v = repository.getIssue(4).getComments(); @@ -73,31 +96,103 @@ public void testIssueWithNoComment() throws IOException { assertTrue(v.size() == 3); } + @Test public void testCreateIssue() throws IOException { - GHUser u = gitHub.getUser("kohsuke"); - GHRepository r = u.getRepository("test"); - GHMilestone someMilestone = r.listMilestones(GHIssueState.CLOSED).iterator().next(); - GHIssue o = r.createIssue("testing").body("this is body").assignee(u).label("bug").label("question").milestone(someMilestone).create(); - System.out.println(o.getUrl()); + GHUser u = getUser(); + GHRepository repository = getTestRepository(); + GHMilestone milestone = repository.createMilestone(System.currentTimeMillis() + "", "Test Milestone"); + GHIssue o = repository.createIssue("testing") + .body("this is body") + .assignee(u) + .label("bug") + .label("question") + .milestone(milestone) + .create(); + assertNotNull(o); o.close(); } + @Test public void testGetIssues() throws Exception { List closedIssues = gitHub.getUser("kohsuke").getRepository("github-api").getIssues(GHIssueState.CLOSED); // prior to using PagedIterable GHRepository.getIssues(GHIssueState) would only retrieve 30 issues assertTrue(closedIssues.size() > 30); } + + private GHRepository getTestRepository() throws IOException { + GHRepository repository; + try { + repository = gitHub.getRepository(getTestRepositoryName()); + } catch (IOException e) { + repository = gitHub.createRepository("github-api-test", "A test repository for testing" + + "the github-api project", "http://github-api.kohsuke.org/", true); + try { + Thread.sleep(2000); + } catch (InterruptedException e1) { + throw new RuntimeException(e.getMessage(), e); + } + repository.enableIssueTracker(true); + repository.enableDownloads(true); + repository.enableWiki(true); + } + return repository; + } + + private GHUser getUser() { + try { + return gitHub.getMyself(); + } catch (IOException e) { + throw new RuntimeException(e.getMessage(), e); + } + } + + @Test + public void testListIssues() throws IOException { + GHUser u = getUser(); + GHRepository repository = getTestRepository(); + + GHMilestone milestone = repository.createMilestone(System.currentTimeMillis() + "", "Test Milestone"); + milestone.close(); + GHIssue unhomed = null; + GHIssue homed = null; + try { + unhomed = repository.createIssue("testing").body("this is body") + .assignee(u) + .label("bug") + .label("question") + .create(); + assertEquals(unhomed.getNumber(), repository.getIssues(GHIssueState.OPEN, null).get(0).getNumber()); + homed = repository.createIssue("testing").body("this is body") + .assignee(u) + .label("bug") + .label("question") + .milestone(milestone) + .create(); + assertEquals(homed.getNumber(), repository.getIssues(GHIssueState.OPEN, milestone).get(0).getNumber()); + } finally { + if (unhomed != null) { + unhomed.close(); + } + if (homed != null) { + homed.close(); + } + } + } + + @Test public void testRateLimit() throws IOException { System.out.println(gitHub.getRateLimit()); } + @Test public void testMyOrganizations() throws IOException { Map org = gitHub.getMyOrganizations(); assertFalse(org.keySet().contains(null)); System.out.println(org); } + @Test public void testFetchPullRequest() throws Exception { GHRepository r = gitHub.getOrganization("jenkinsci").getRepository("jenkins"); assertEquals("master",r.getMasterBranch()); @@ -105,8 +200,9 @@ public void testFetchPullRequest() throws Exception { r.getPullRequests(GHIssueState.OPEN); } + @Test public void testFetchPullRequestAsList() throws Exception { - GHRepository r = gitHub.getOrganization("symfony").getRepository("symfony-docs"); + GHRepository r = gitHub.getRepository("kohsuke/github-api"); assertEquals("master", r.getMasterBranch()); PagedIterable i = r.listPullRequests(GHIssueState.CLOSED); List prs = i.asList(); @@ -114,50 +210,56 @@ public void testFetchPullRequestAsList() throws Exception { assertTrue(prs.size() > 0); } + @Test public void testRepoPermissions() throws Exception { + kohsuke(); GHRepository r = gitHub.getOrganization("jenkinsci").getRepository("jenkins"); assertTrue(r.hasPullAccess()); - r = gitHub.getOrganization("github").getRepository("tire"); + r = gitHub.getOrganization("github").getRepository("hub"); assertFalse(r.hasAdminAccess()); } + @Test public void testGetMyself() throws Exception { GHMyself me = gitHub.getMyself(); - System.out.println(me); - GHUser u = gitHub.getUser("kohsuke2"); - System.out.println(u); - for (List lst : me.iterateRepositories(100)) { - for (GHRepository r : lst) { - System.out.println(r.getPushedAt()); - } - } + assertNotNull(me); + assertNotNull(gitHub.getUser("kohsuke2")); + PagedIterable ghRepositories = me.listRepositories(); + assertTrue(ghRepositories.iterator().hasNext()); } + @Test public void testPublicKeys() throws Exception { List keys = gitHub.getMyself().getPublicKeys(); - System.out.println(keys); + assertFalse(keys.isEmpty()); } - public void tryOrgFork() throws Exception { - gitHub.getUser("kohsuke").getRepository("rubywm").forkTo(gitHub.getOrganization("jenkinsci")); + @Test + public void testOrgFork() throws Exception { + kohsuke(); + getUser().getRepository("rubywm").forkTo(gitHub.getOrganization("jenkinsci")); } - public void tryGetTeamsForRepo() throws Exception { - Set o = gitHub.getOrganization("jenkinsci").getRepository("rubywm").getTeams(); - System.out.println(o); + @Test + public void testGetTeamsForRepo() throws Exception { + kohsuke(); + assertEquals(1,gitHub.getOrganization("stapler").getRepository("stapler").getTeams().size()); } + @Test public void testMembership() throws Exception { Set members = gitHub.getOrganization("jenkinsci").getRepository("violations-plugin").getCollaboratorNames(); System.out.println(members.contains("kohsuke")); } + @Test public void testMemberOrgs() throws Exception { Set o = gitHub.getUser("kohsuke").getOrganizations(); System.out.println(o); } + @Test public void testCommit() throws Exception { GHCommit commit = gitHub.getUser("jenkinsci").getRepository("jenkins").getCommit("08c1c9970af4d609ae754fbe803e06186e3206f7"); System.out.println(commit); @@ -170,6 +272,7 @@ public void testCommit() throws Exception { assertEquals("changelog.html", f.getFileName()); } + @Test public void testListCommits() throws Exception { List sha1 = new ArrayList(); for (GHCommit c : gitHub.getUser("kohsuke").getRepository("empty-commit").listCommits()) { @@ -180,12 +283,14 @@ public void testListCommits() throws Exception { assertEquals(1,sha1.size()); } + @Test public void testBranches() throws Exception { Map b = gitHub.getUser("jenkinsci").getRepository("jenkins").getBranches(); System.out.println(b); } + @Test public void testCommitComment() throws Exception { GHRepository r = gitHub.getUser("jenkinsci").getRepository("jenkins"); PagedIterable comments = r.listCommitComments(); @@ -196,6 +301,7 @@ public void testCommitComment() throws Exception { } } + @Test public void testCreateCommitComment() throws Exception { GHCommit commit = gitHub.getUser("kohsuke").getRepository("sandbox-ant").getCommit("8ae38db0ea5837313ab5f39d43a6f73de3bd9000"); GHCommitComment c = commit.createComment("[testing](http://kohsuse.org/)"); @@ -205,7 +311,9 @@ public void testCreateCommitComment() throws Exception { c.delete(); } + @Test public void tryHook() throws Exception { + kohsuke(); GHRepository r = gitHub.getMyself().getRepository("test2"); GHHook hook = r.createWebHook(new URL("http://www.google.com/")); System.out.println(hook); @@ -214,6 +322,7 @@ public void tryHook() throws Exception { h.delete(); } + @Test public void testEventApi() throws Exception { for (GHEventInfo ev : gitHub.getEvents()) { System.out.println(ev); @@ -225,6 +334,7 @@ public void testEventApi() throws Exception { } } + @Test public void testApp() throws IOException { System.out.println(gitHub.getMyself().getEmails()); @@ -313,7 +423,9 @@ private void testPostCommitHook(GitHub gitHub) throws IOException { System.out.println(hooks); } + @Test public void testOrgRepositories() throws IOException { + kohsuke(); GHOrganization j = gitHub.getOrganization("jenkinsci"); long start = System.currentTimeMillis(); Map repos = j.getRepositories(); @@ -321,7 +433,9 @@ public void testOrgRepositories() throws IOException { System.out.printf("%d repositories in %dms\n",repos.size(),end-start); } + @Test public void testOrganization() throws IOException { + kohsuke(); GHOrganization j = gitHub.getOrganization("jenkinsci"); GHTeam t = j.getTeams().get("Core Developers"); @@ -330,24 +444,30 @@ public void testOrganization() throws IOException { // t.add(labs.getRepository("xyz")); } + @Test public void testCommitStatus() throws Exception { - GHRepository r = gitHub.getUser("kohsuke").getRepository("test"); + GHRepository r = gitHub.getRepository("kohsuke/github-api"); + GHCommitStatus state; -// state = r.createCommitStatus("edacdd76b06c5f3f0697a22ca75803169f25f296", GHCommitState.FAILURE, "http://jenkins-ci.org/", "oops!"); - List lst = r.listCommitStatuses("edacdd76b06c5f3f0697a22ca75803169f25f296").asList(); +// state = r.createCommitStatus("ecbfdd7315ef2cf04b2be7f11a072ce0bd00c396", GHCommitState.FAILURE, "http://kohsuke.org/", "testing!"); + + List lst = r.listCommitStatuses("ecbfdd7315ef2cf04b2be7f11a072ce0bd00c396").asList(); state = lst.get(0); System.out.println(state); - assertEquals("oops!",state.getDescription()); - assertEquals("http://jenkins-ci.org/",state.getTargetUrl()); + assertEquals("testing!",state.getDescription()); + assertEquals("http://kohsuke.org/",state.getTargetUrl()); } + @Test public void testCommitShortInfo() throws Exception { - GHCommit commit = gitHub.getUser("kohsuke").getRepository("test").getCommit("c77360d6f2ff2c2e6dd11828ad5dccf72419fa1b"); + GHRepository r = gitHub.getRepository("kohsuke/github-api"); + GHCommit commit = r.getCommit("86a2e245aa6d71d54923655066049d9e21a15f23"); assertEquals(commit.getCommitShortInfo().getAuthor().getName(), "Kohsuke Kawaguchi"); - assertEquals(commit.getCommitShortInfo().getMessage(), "Added a file"); + assertEquals(commit.getCommitShortInfo().getMessage(), "doc"); } + @Test public void testPullRequestPopulate() throws Exception { GHRepository r = gitHub.getUser("kohsuke").getRepository("github-api"); GHPullRequest p = r.getPullRequest(17); @@ -355,15 +475,21 @@ public void testPullRequestPopulate() throws Exception { assertNotNull(u.getName()); } + @Test public void testCheckMembership() throws Exception { + kohsuke(); GHOrganization j = gitHub.getOrganization("jenkinsci"); GHUser kohsuke = gitHub.getUser("kohsuke"); - GHUser a = gitHub.getUser("a"); + GHUser b = gitHub.getUser("b"); assertTrue(j.hasMember(kohsuke)); - assertFalse(j.hasMember(a)); + assertFalse(j.hasMember(b)); assertTrue(j.hasPublicMember(kohsuke)); - assertFalse(j.hasPublicMember(a)); + assertFalse(j.hasPublicMember(b)); + } + + private void kohsuke() { + Assume.assumeTrue(getUser().getLogin().equals("kohsuke")); } } diff --git a/src/test/java/org/kohsuke/LifecycleTest.java b/src/test/java/org/kohsuke/LifecycleTest.java index 16299f9d41..c248ec4db8 100644 --- a/src/test/java/org/kohsuke/LifecycleTest.java +++ b/src/test/java/org/kohsuke/LifecycleTest.java @@ -31,11 +31,12 @@ public void setUp() throws Exception { gitHub = GitHub.connect(); } - public void testCreateRepository() throws IOException, GitAPIException { + public void testCreateRepository() throws IOException, GitAPIException, InterruptedException { GHMyself myself = gitHub.getMyself(); GHRepository repository = myself.getRepository("github-api-test"); if (repository != null) { repository.delete(); + Thread.sleep(1000); } repository = gitHub.createRepository("github-api-test", "a test repository used to test kohsuke's github-api", "http://github-api.kohsuke.org/", true);