Skip to content

Commit 18fb857

Browse files
sazzertheangrydev
andauthored
BAEL-9084: Java API for GitHub using GitHub-API (#18420)
* BAEL-9084: Java API for GitHub using GitHub-API * Update libraries-5/pom.xml Co-authored-by: Liam Williams <[email protected]> * Update libraries-5/pom.xml Co-authored-by: Liam Williams <[email protected]> * Update libraries-5/src/test/java/com/baeldung/githubapi/UsersUnitTest.java Co-authored-by: Liam Williams <[email protected]> * Update libraries-5/src/test/java/com/baeldung/githubapi/UsersUnitTest.java Co-authored-by: Liam Williams <[email protected]> * Review updates * Updated assertions to AssertJ --------- Co-authored-by: Liam Williams <[email protected]>
1 parent 177c721 commit 18fb857

File tree

4 files changed

+178
-0
lines changed

4 files changed

+178
-0
lines changed

libraries-5/pom.xml

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -198,6 +198,11 @@
198198
<artifactId>jline-terminal-jansi</artifactId>
199199
<version>${jline.version}</version>
200200
</dependency>
201+
<dependency>
202+
<groupId>org.kohsuke</groupId>
203+
<artifactId>github-api</artifactId>
204+
<version>${github-api.version}</version>
205+
</dependency>
201206
<dependency>
202207
<groupId>org.springframework.boot</groupId>
203208
<artifactId>spring-boot-starter-test</artifactId>
@@ -220,6 +225,7 @@
220225
<sootup.version>1.3.0</sootup.version>
221226
<resilience4j.version>2.1.0</resilience4j.version>
222227
<jline.version>3.28.0</jline.version>
228+
<github-api.version>1.327</github-api.version>
223229
</properties>
224230

225231
</project>
Lines changed: 38 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,38 @@
1+
package com.baeldung.githubapi;
2+
3+
import org.junit.jupiter.api.Test;
4+
import org.kohsuke.github.GitHub;
5+
import org.kohsuke.github.GitHubBuilder;
6+
7+
import java.io.IOException;
8+
9+
import static org.junit.jupiter.api.Assertions.assertEquals;
10+
11+
public class ClientLiveTest {
12+
13+
@Test
14+
void whenWeCreateAnAnonynousClient_thenWeCanAccessTheGithubApi() throws IOException {
15+
GitHub gitHub = GitHub.connectAnonymously();
16+
17+
String apiUri = gitHub.getApiUrl();
18+
assertEquals("https://api.github.com", apiUri);
19+
}
20+
21+
@Test
22+
// Needs credentials configuring in environment variables or ~/.github.
23+
void whenWeCreateADefaultClient_thenWeCanAccessTheGithubApi() throws IOException {
24+
GitHub gitHub = GitHub.connect();
25+
26+
String apiUri = gitHub.getApiUrl();
27+
assertEquals("https://api.github.com", apiUri);
28+
}
29+
30+
@Test
31+
// Needs credentials configuring
32+
void whenWeCreateAClientWithProvidedCredentials_thenWeCanAccessTheGithubApi() throws IOException {
33+
GitHub gitHub = new GitHubBuilder().withPassword("my_user", "my_password").build();
34+
35+
String apiUri = gitHub.getApiUrl();
36+
assertEquals("https://api.github.com", apiUri);
37+
}
38+
}
Lines changed: 100 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,100 @@
1+
package com.baeldung.githubapi;
2+
3+
import com.google.common.base.Charsets;
4+
import org.apache.commons.io.IOUtils;
5+
import org.junit.jupiter.api.Test;
6+
import org.kohsuke.github.*;
7+
import org.slf4j.Logger;
8+
import org.slf4j.LoggerFactory;
9+
10+
import java.io.IOException;
11+
import java.util.HashSet;
12+
import java.util.List;
13+
import java.util.Set;
14+
15+
import static org.assertj.core.api.Assertions.assertThat;
16+
import static org.junit.jupiter.api.Assertions.assertEquals;
17+
18+
public class RepositoryLiveTest {
19+
private static final Logger LOG = LoggerFactory.getLogger(RepositoryLiveTest.class);
20+
21+
@Test
22+
void whenWeListAUsersRepositories_thenWeCanAccessTheRepositories() throws IOException {
23+
GitHub gitHub = GitHub.connectAnonymously();
24+
25+
GHUser user = gitHub.getUser("eugenp");
26+
List<GHRepository> repositoriesList = user.listRepositories().toList();
27+
assertThat(repositoriesList).isNotEmpty();
28+
}
29+
30+
@Test
31+
void whenWeIterateAUsersRepositories_thenWeCanAccessTheRepositories() throws IOException {
32+
GitHub gitHub = GitHub.connectAnonymously();
33+
34+
GHUser user = gitHub.getUser("eugenp");
35+
36+
Set<String> names = new HashSet<>();
37+
for (GHRepository ghRepository : user.listRepositories()) {
38+
names.add(ghRepository.getName());
39+
}
40+
41+
assertThat(names).isNotEmpty();
42+
}
43+
44+
@Test
45+
void whenWeDirectlyAccessAUsersRepository_thenWeCanQueryRepositoryDetails() throws IOException {
46+
GitHub gitHub = GitHub.connectAnonymously();
47+
48+
GHUser user = gitHub.getUser("eugenp");
49+
GHRepository repository = user.getRepository("tutorials");
50+
assertEquals("tutorials", repository.getName());
51+
assertEquals("eugenp/tutorials", repository.getFullName());
52+
}
53+
54+
@Test
55+
void whenWeDirectlyAccessARepository_thenWeCanQueryRepositoryDetails() throws IOException {
56+
GitHub gitHub = GitHub.connectAnonymously();
57+
58+
GHRepository repository = gitHub.getRepository("eugenp/tutorials");
59+
assertEquals("tutorials", repository.getName());
60+
assertEquals("eugenp/tutorials", repository.getFullName());
61+
}
62+
63+
@Test
64+
void whenWeAccessARepositoryBranch_thenWeCanAccessCommitDetails() throws IOException {
65+
GitHub gitHub = GitHub.connectAnonymously();
66+
67+
GHRepository repository = gitHub.getRepository("eugenp/tutorials");
68+
69+
String defaultBranch = repository.getDefaultBranch();
70+
GHBranch branch = repository.getBranch(defaultBranch);
71+
String branchHash = branch.getSHA1();
72+
73+
GHCommit commit = repository.getCommit(branchHash);
74+
LOG.info("Commit message: {}", commit.getCommitShortInfo().getMessage());
75+
}
76+
77+
@Test
78+
void whenWeAccessARepositoryBranch_thenWeCanAccessFiles() throws IOException {
79+
GitHub gitHub = GitHub.connectAnonymously();
80+
81+
GHRepository repository = gitHub.getRepository("eugenp/tutorials");
82+
83+
String defaultBranch = repository.getDefaultBranch();
84+
GHContent file = repository.getFileContent("pom.xml", defaultBranch);
85+
86+
String fileContents = IOUtils.toString(file.read(), Charsets.UTF_8);
87+
LOG.info("pom.xml file contents: {}", fileContents);
88+
}
89+
90+
@Test
91+
void whenWeAccessTheRepository_thenWeCanDirectlyAccessTheReadme() throws IOException {
92+
GitHub gitHub = GitHub.connectAnonymously();
93+
94+
GHRepository repository = gitHub.getRepository("eugenp/tutorials");
95+
96+
GHContent readme = repository.getReadme();
97+
String fileContents = IOUtils.toString(readme.read(), Charsets.UTF_8);
98+
LOG.info("Readme file contents: {}", fileContents);
99+
}
100+
}
Lines changed: 34 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,34 @@
1+
package com.baeldung.githubapi;
2+
3+
import org.junit.jupiter.api.Test;
4+
import org.kohsuke.github.GHMyself;
5+
import org.kohsuke.github.GHUser;
6+
import org.kohsuke.github.GitHub;
7+
import org.slf4j.Logger;
8+
import org.slf4j.LoggerFactory;
9+
10+
import java.io.IOException;
11+
12+
import static org.junit.jupiter.api.Assertions.assertEquals;
13+
14+
public class UsersLiveTest {
15+
private static final Logger LOG = LoggerFactory.getLogger(UsersLiveTest.class);
16+
17+
@Test
18+
// Needs credentials configuring in environment variables or ~/.github.
19+
void whenWeAccessMyself_thenWeCanQueryUserDetails() throws IOException {
20+
GitHub gitHub = GitHub.connect();
21+
22+
GHMyself myself = gitHub.getMyself();
23+
LOG.info("Current users username: {}", myself.getLogin());
24+
LOG.info("Current users email: {}", myself.getEmail());
25+
}
26+
27+
@Test
28+
void whenWeAccessAnotherUser_thenWeCanQueryUserDetails() throws IOException {
29+
GitHub gitHub = GitHub.connectAnonymously();
30+
31+
GHUser user = gitHub.getUser("eugenp");
32+
assertEquals("eugenp", user.getLogin());
33+
}
34+
}

0 commit comments

Comments
 (0)