diff --git a/libraries-5/pom.xml b/libraries-5/pom.xml index 6034646e0e13..ad524d9adefc 100644 --- a/libraries-5/pom.xml +++ b/libraries-5/pom.xml @@ -198,6 +198,11 @@ jline-terminal-jansi ${jline.version} + + org.kohsuke + github-api + ${github-api.version} + org.springframework.boot spring-boot-starter-test @@ -220,6 +225,7 @@ 1.3.0 2.1.0 3.28.0 + 1.327 diff --git a/libraries-5/src/test/java/com/baeldung/githubapi/ClientLiveTest.java b/libraries-5/src/test/java/com/baeldung/githubapi/ClientLiveTest.java new file mode 100644 index 000000000000..296ba5bbe67a --- /dev/null +++ b/libraries-5/src/test/java/com/baeldung/githubapi/ClientLiveTest.java @@ -0,0 +1,38 @@ +package com.baeldung.githubapi; + +import org.junit.jupiter.api.Test; +import org.kohsuke.github.GitHub; +import org.kohsuke.github.GitHubBuilder; + +import java.io.IOException; + +import static org.junit.jupiter.api.Assertions.assertEquals; + +public class ClientLiveTest { + + @Test + void whenWeCreateAnAnonynousClient_thenWeCanAccessTheGithubApi() throws IOException { + GitHub gitHub = GitHub.connectAnonymously(); + + String apiUri = gitHub.getApiUrl(); + assertEquals("https://api.github.com", apiUri); + } + + @Test + // Needs credentials configuring in environment variables or ~/.github. + void whenWeCreateADefaultClient_thenWeCanAccessTheGithubApi() throws IOException { + GitHub gitHub = GitHub.connect(); + + String apiUri = gitHub.getApiUrl(); + assertEquals("https://api.github.com", apiUri); + } + + @Test + // Needs credentials configuring + void whenWeCreateAClientWithProvidedCredentials_thenWeCanAccessTheGithubApi() throws IOException { + GitHub gitHub = new GitHubBuilder().withPassword("my_user", "my_password").build(); + + String apiUri = gitHub.getApiUrl(); + assertEquals("https://api.github.com", apiUri); + } +} diff --git a/libraries-5/src/test/java/com/baeldung/githubapi/RepositoryLiveTest.java b/libraries-5/src/test/java/com/baeldung/githubapi/RepositoryLiveTest.java new file mode 100644 index 000000000000..ae9e343bf0e0 --- /dev/null +++ b/libraries-5/src/test/java/com/baeldung/githubapi/RepositoryLiveTest.java @@ -0,0 +1,100 @@ +package com.baeldung.githubapi; + +import com.google.common.base.Charsets; +import org.apache.commons.io.IOUtils; +import org.junit.jupiter.api.Test; +import org.kohsuke.github.*; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; + +import java.io.IOException; +import java.util.HashSet; +import java.util.List; +import java.util.Set; + +import static org.assertj.core.api.Assertions.assertThat; +import static org.junit.jupiter.api.Assertions.assertEquals; + +public class RepositoryLiveTest { + private static final Logger LOG = LoggerFactory.getLogger(RepositoryLiveTest.class); + + @Test + void whenWeListAUsersRepositories_thenWeCanAccessTheRepositories() throws IOException { + GitHub gitHub = GitHub.connectAnonymously(); + + GHUser user = gitHub.getUser("eugenp"); + List repositoriesList = user.listRepositories().toList(); + assertThat(repositoriesList).isNotEmpty(); + } + + @Test + void whenWeIterateAUsersRepositories_thenWeCanAccessTheRepositories() throws IOException { + GitHub gitHub = GitHub.connectAnonymously(); + + GHUser user = gitHub.getUser("eugenp"); + + Set names = new HashSet<>(); + for (GHRepository ghRepository : user.listRepositories()) { + names.add(ghRepository.getName()); + } + + assertThat(names).isNotEmpty(); + } + + @Test + void whenWeDirectlyAccessAUsersRepository_thenWeCanQueryRepositoryDetails() throws IOException { + GitHub gitHub = GitHub.connectAnonymously(); + + GHUser user = gitHub.getUser("eugenp"); + GHRepository repository = user.getRepository("tutorials"); + assertEquals("tutorials", repository.getName()); + assertEquals("eugenp/tutorials", repository.getFullName()); + } + + @Test + void whenWeDirectlyAccessARepository_thenWeCanQueryRepositoryDetails() throws IOException { + GitHub gitHub = GitHub.connectAnonymously(); + + GHRepository repository = gitHub.getRepository("eugenp/tutorials"); + assertEquals("tutorials", repository.getName()); + assertEquals("eugenp/tutorials", repository.getFullName()); + } + + @Test + void whenWeAccessARepositoryBranch_thenWeCanAccessCommitDetails() throws IOException { + GitHub gitHub = GitHub.connectAnonymously(); + + GHRepository repository = gitHub.getRepository("eugenp/tutorials"); + + String defaultBranch = repository.getDefaultBranch(); + GHBranch branch = repository.getBranch(defaultBranch); + String branchHash = branch.getSHA1(); + + GHCommit commit = repository.getCommit(branchHash); + LOG.info("Commit message: {}", commit.getCommitShortInfo().getMessage()); + } + + @Test + void whenWeAccessARepositoryBranch_thenWeCanAccessFiles() throws IOException { + GitHub gitHub = GitHub.connectAnonymously(); + + GHRepository repository = gitHub.getRepository("eugenp/tutorials"); + + String defaultBranch = repository.getDefaultBranch(); + GHContent file = repository.getFileContent("pom.xml", defaultBranch); + + String fileContents = IOUtils.toString(file.read(), Charsets.UTF_8); + LOG.info("pom.xml file contents: {}", fileContents); + } + + @Test + void whenWeAccessTheRepository_thenWeCanDirectlyAccessTheReadme() throws IOException { + GitHub gitHub = GitHub.connectAnonymously(); + + GHRepository repository = gitHub.getRepository("eugenp/tutorials"); + + GHContent readme = repository.getReadme(); + String fileContents = IOUtils.toString(readme.read(), Charsets.UTF_8); + LOG.info("Readme file contents: {}", fileContents); + } +} diff --git a/libraries-5/src/test/java/com/baeldung/githubapi/UsersLiveTest.java b/libraries-5/src/test/java/com/baeldung/githubapi/UsersLiveTest.java new file mode 100644 index 000000000000..6be1275343cf --- /dev/null +++ b/libraries-5/src/test/java/com/baeldung/githubapi/UsersLiveTest.java @@ -0,0 +1,34 @@ +package com.baeldung.githubapi; + +import org.junit.jupiter.api.Test; +import org.kohsuke.github.GHMyself; +import org.kohsuke.github.GHUser; +import org.kohsuke.github.GitHub; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; + +import java.io.IOException; + +import static org.junit.jupiter.api.Assertions.assertEquals; + +public class UsersLiveTest { + private static final Logger LOG = LoggerFactory.getLogger(UsersLiveTest.class); + + @Test + // Needs credentials configuring in environment variables or ~/.github. + void whenWeAccessMyself_thenWeCanQueryUserDetails() throws IOException { + GitHub gitHub = GitHub.connect(); + + GHMyself myself = gitHub.getMyself(); + LOG.info("Current users username: {}", myself.getLogin()); + LOG.info("Current users email: {}", myself.getEmail()); + } + + @Test + void whenWeAccessAnotherUser_thenWeCanQueryUserDetails() throws IOException { + GitHub gitHub = GitHub.connectAnonymously(); + + GHUser user = gitHub.getUser("eugenp"); + assertEquals("eugenp", user.getLogin()); + } +}