From fd37ffb7c28c7739eac74d54dc4f48e00ee68e7f Mon Sep 17 00:00:00 2001 From: Hany Ahmed Date: Mon, 4 Sep 2017 21:47:19 +0200 Subject: [PATCH] Retrofit rx (#2519) * Retrofit with RxJava * Correct spelling mistake * Use spaces for indentation instead of tabs in pom.xml * Use spaces for indentation instead of tabs in pom.xml * Add Retrofit integration with RxJava to libraries module * Remove standalone project for Retrofit integration with RxJava * remove retrofit-rxjava module * Fixed error in pom.xml caused by an issue while merging * Retrofit integration with RxJava * Fix test cases * Fix merge issues * BAEL-1016 Merging master --- libraries/pom.xml | 1027 +++++++++-------- .../retrofit/basic/GitHubBasicApi.java | 33 + .../retrofit/basic/GitHubBasicApp.java | 14 + .../retrofit/basic/GitHubBasicService.java | 54 + .../baeldung/retrofit/models/Contributor.java | 35 + .../baeldung/retrofit/models/Repository.java | 32 + .../com/baeldung/retrofit/rx/GitHubRxApi.java | 33 + .../com/baeldung/retrofit/rx/GitHubRxApp.java | 13 + .../baeldung/retrofit/rx/GitHubRxService.java | 33 + .../retrofit/basic/GitHubBasicApiTest.java | 65 ++ .../baeldung/retrofit/rx/GitHubRxApiTest.java | 53 + 11 files changed, 887 insertions(+), 505 deletions(-) create mode 100644 libraries/src/main/java/com/baeldung/retrofit/basic/GitHubBasicApi.java create mode 100644 libraries/src/main/java/com/baeldung/retrofit/basic/GitHubBasicApp.java create mode 100644 libraries/src/main/java/com/baeldung/retrofit/basic/GitHubBasicService.java create mode 100644 libraries/src/main/java/com/baeldung/retrofit/models/Contributor.java create mode 100644 libraries/src/main/java/com/baeldung/retrofit/models/Repository.java create mode 100644 libraries/src/main/java/com/baeldung/retrofit/rx/GitHubRxApi.java create mode 100644 libraries/src/main/java/com/baeldung/retrofit/rx/GitHubRxApp.java create mode 100644 libraries/src/main/java/com/baeldung/retrofit/rx/GitHubRxService.java create mode 100644 libraries/src/test/java/com/baeldung/retrofit/basic/GitHubBasicApiTest.java create mode 100644 libraries/src/test/java/com/baeldung/retrofit/rx/GitHubRxApiTest.java diff --git a/libraries/pom.xml b/libraries/pom.xml index d2b8d6ffd8..6666900c1d 100644 --- a/libraries/pom.xml +++ b/libraries/pom.xml @@ -1,6 +1,6 @@ + xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"> parent-modules com.baeldung @@ -105,515 +105,532 @@ - - - - - - org.beykery - neuroph - ${neuroph.version} - - - - cglib - cglib - ${cglib.version} - - - commons-beanutils - commons-beanutils - ${commons-beanutils.version} - - - org.apache.commons - commons-lang3 - ${commons-lang.version} - - - org.apache.commons - commons-text - ${commons-text.version} - - - javax.measure - jsr-275 - 1.0.0 - - - org.apache.commons - commons-collections4 - ${commons.collections.version} - - - org.jasypt - jasypt - ${jasypt.version} - - - org.javatuples - javatuples - ${javatuples.version} - - - org.javassist - javassist - ${javaassist.version} - - - - org.assertj - assertj-core - ${assertj.version} - - - org.skyscreamer - jsonassert - ${jsonassert.version} - - - org.javers - javers-core - ${javers.version} - - - org.eclipse.jetty - jetty-server - ${jetty.version} - - - org.eclipse.jetty - jetty-servlet - ${jetty.version} - - - rome - rome - ${rome.version} - - - io.specto - hoverfly-java - 0.8.1 - - - org.apache.httpcomponents - httpclient - ${httpclient.version} - - - commons-logging - commons-logging - - - - - commons-io - commons-io - ${commons.io.version} - - - commons-chain - commons-chain - ${commons-chain.version} - - - org.apache.commons - commons-csv - ${commons-csv.version} - - - commons-dbutils - commons-dbutils - ${commons.dbutils.version} - - - org.apache.flink - flink-core - ${flink.version} - - - commons-logging - commons-logging - - - - - org.apache.flink - flink-java - ${flink.version} - - - commons-logging - commons-logging - - - - - org.apache.flink - flink-test-utils_2.10 - ${flink.version} - test - - - org.apache.commons - commons-math3 - 3.6.1 - - - net.serenity-bdd - serenity-core - ${serenity.version} - test - - - net.serenity-bdd - serenity-junit - ${serenity.version} - test - - - net.serenity-bdd - serenity-jbehave - ${serenity.jbehave.version} - test - - - net.serenity-bdd - serenity-rest-assured - ${serenity.version} - test - - - net.serenity-bdd - serenity-jira-requirements-provider - ${serenity.jira.version} - test - - - com.fasterxml.jackson.core - jackson-databind - ${jackson.version} - - - - org.datanucleus - javax.jdo - 3.2.0-m7 - - - org.datanucleus - datanucleus-core - 5.1.1 - - - org.datanucleus - datanucleus-api-jdo - 5.1.1 - - - org.datanucleus - datanucleus-rdbms - 5.1.1 - - - org.datanucleus - datanucleus-maven-plugin - 5.0.2 - - - org.datanucleus - datanucleus-xml - 5.0.0-release - - - net.openhft - chronicle - 3.6.4 - - - org.springframework - spring-web - 4.3.8.RELEASE - - - net.serenity-bdd - serenity-spring - ${serenity.version} - test - - - net.serenity-bdd - serenity-screenplay - ${serenity.version} - test - - - net.serenity-bdd - serenity-screenplay-webdriver - ${serenity.version} - test - - - io.rest-assured - spring-mock-mvc - 3.0.3 - test - - - org.multiverse - multiverse-core - ${multiverse.version} - - - com.zaxxer - HikariCP - 2.6.3 - compile - - - com.h2database - h2 - ${h2.version} - - - pl.pragmatists - JUnitParams - ${jUnitParams.version} - test - - - org.quartz-scheduler - quartz - 2.3.0 - - - one.util - streamex - ${streamex.version} - - - org.jooq - jool - 0.9.12 - - - org.openjdk.jmh - jmh-core - 1.19 - - - org.openjdk.jmh - jmh-generator-annprocess - 1.19 - - - io.netty - netty-all - ${netty.version} - - - junit - junit - ${junit.version} - test - - - info.debatty - java-lsh - ${java-lsh.version} - - - au.com.dius - pact-jvm-consumer-junit_2.11 - ${pact.version} - test - - - org.codehaus.groovy - groovy-all - 2.4.10 - - - org.awaitility - awaitility - ${awaitility.version} - test - - - org.awaitility - awaitility-proxy - ${awaitility.version} - test - - - org.hamcrest - java-hamcrest - ${org.hamcrest.java-hamcrest.version} - test - - - net.agkn - hll - ${hll.version} - - - net.bytebuddy - byte-buddy - ${bytebuddy.version} - - - net.bytebuddy - byte-buddy-agent - ${bytebuddy.version} - - - org.pcollections - pcollections - ${pcollections.version} - - - com.machinezoo.noexception - noexception - 1.1.0 - - - org.eclipse.collections - eclipse-collections - ${eclipse-collections.version} - - - io.vavr - vavr - ${vavr.version} - - - org.geotools - gt-shapefile - ${geotools.version} - - - org.geotools - gt-epsg-hsql - ${geotools.version} - - - org.geotools - gt-swing - ${geotools.version} - - - com.darwinsys - hirondelle-date4j - RELEASE - test - - - joda-time - joda-time - ${joda-time.version} - - - com.darwinsys - hirondelle-date4j - ${hirondelle-date4j.version} - - - com.haulmont.yarg - yarg - 2.0.4 - - - net.engio - mbassador - 1.3.1 - - - org.jdeferred - jdeferred-core - 1.2.6 - + + + + + + org.beykery + neuroph + ${neuroph.version} + + + + cglib + cglib + ${cglib.version} + + + commons-beanutils + commons-beanutils + ${commons-beanutils.version} + + + org.apache.commons + commons-lang3 + ${commons-lang.version} + + + org.apache.commons + commons-text + ${commons-text.version} + + + javax.measure + jsr-275 + 1.0.0 + + + org.apache.commons + commons-collections4 + ${commons.collections.version} + + + org.jasypt + jasypt + ${jasypt.version} + + + org.javatuples + javatuples + ${javatuples.version} + + + org.javassist + javassist + ${javaassist.version} + + + + org.assertj + assertj-core + ${assertj.version} + + + org.skyscreamer + jsonassert + ${jsonassert.version} + + + org.javers + javers-core + ${javers.version} + + + org.eclipse.jetty + jetty-server + ${jetty.version} + + + org.eclipse.jetty + jetty-servlet + ${jetty.version} + + + rome + rome + ${rome.version} + + + io.specto + hoverfly-java + 0.8.1 + + + org.apache.httpcomponents + httpclient + ${httpclient.version} + + + commons-logging + commons-logging + + + + + commons-io + commons-io + ${commons.io.version} + + + commons-chain + commons-chain + ${commons-chain.version} + + + org.apache.commons + commons-csv + ${commons-csv.version} + + + commons-dbutils + commons-dbutils + ${commons.dbutils.version} + + + org.apache.flink + flink-core + ${flink.version} + + + commons-logging + commons-logging + + + + + org.apache.flink + flink-java + ${flink.version} + + + commons-logging + commons-logging + + + + + org.apache.flink + flink-test-utils_2.10 + ${flink.version} + test + + + org.apache.commons + commons-math3 + 3.6.1 + + + net.serenity-bdd + serenity-core + ${serenity.version} + test + + + net.serenity-bdd + serenity-junit + ${serenity.version} + test + + + net.serenity-bdd + serenity-jbehave + ${serenity.jbehave.version} + test + + + net.serenity-bdd + serenity-rest-assured + ${serenity.version} + test + + + net.serenity-bdd + serenity-jira-requirements-provider + ${serenity.jira.version} + test + + + com.fasterxml.jackson.core + jackson-databind + ${jackson.version} + + + + org.datanucleus + javax.jdo + 3.2.0-m7 + + + org.datanucleus + datanucleus-core + 5.1.1 + + + org.datanucleus + datanucleus-api-jdo + 5.1.1 + + + org.datanucleus + datanucleus-rdbms + 5.1.1 + + + org.datanucleus + datanucleus-maven-plugin + 5.0.2 + + + org.datanucleus + datanucleus-xml + 5.0.0-release + + + net.openhft + chronicle + 3.6.4 + + + org.springframework + spring-web + 4.3.8.RELEASE + + + net.serenity-bdd + serenity-spring + ${serenity.version} + test + + + net.serenity-bdd + serenity-screenplay + ${serenity.version} + test + + + net.serenity-bdd + serenity-screenplay-webdriver + ${serenity.version} + test + + + io.rest-assured + spring-mock-mvc + 3.0.3 + test + + + org.multiverse + multiverse-core + ${multiverse.version} + + + com.zaxxer + HikariCP + 2.6.3 + compile + + + com.h2database + h2 + ${h2.version} + + + pl.pragmatists + JUnitParams + ${jUnitParams.version} + test + + + org.quartz-scheduler + quartz + 2.3.0 + + + one.util + streamex + ${streamex.version} + + + org.jooq + jool + 0.9.12 + + + org.openjdk.jmh + jmh-core + 1.19 + + + org.openjdk.jmh + jmh-generator-annprocess + 1.19 + + + io.netty + netty-all + ${netty.version} + + + junit + junit + ${junit.version} + test + + + info.debatty + java-lsh + ${java-lsh.version} + + + au.com.dius + pact-jvm-consumer-junit_2.11 + ${pact.version} + test + + + org.codehaus.groovy + groovy-all + 2.4.10 + + + org.awaitility + awaitility + ${awaitility.version} + test + + + org.awaitility + awaitility-proxy + ${awaitility.version} + test + + + org.hamcrest + java-hamcrest + ${org.hamcrest.java-hamcrest.version} + test + + + net.agkn + hll + ${hll.version} + + + net.bytebuddy + byte-buddy + ${bytebuddy.version} + + + net.bytebuddy + byte-buddy-agent + ${bytebuddy.version} + + + org.pcollections + pcollections + ${pcollections.version} + + + com.machinezoo.noexception + noexception + 1.1.0 + + + org.eclipse.collections + eclipse-collections + ${eclipse-collections.version} + + + io.vavr + vavr + ${vavr.version} + + + org.geotools + gt-shapefile + ${geotools.version} + + + org.geotools + gt-epsg-hsql + ${geotools.version} + + + org.geotools + gt-swing + ${geotools.version} + + + + com.squareup.retrofit2 + retrofit + ${retrofit.version} + + + com.squareup.retrofit2 + converter-gson + ${retrofit.version} + + + com.squareup.retrofit2 + adapter-rxjava + ${retrofit.version} + + + com.darwinsys + hirondelle-date4j + RELEASE + test + + + joda-time + joda-time + ${joda-time.version} + + + com.darwinsys + hirondelle-date4j + ${hirondelle-date4j.version} + + + com.haulmont.yarg + yarg + 2.0.4 + + + net.engio + mbassador + 1.3.1 + + + org.jdeferred + jdeferred-core + 1.2.6 + com.codepoetics protonpack ${protonpack.version} - - - maven2-repository.dev.java.net - Java.net repository - http://download.java.net/maven/2 - - - osgeo - Open Source Geospatial Foundation Repository - http://download.osgeo.org/webdav/geotools/ - - - - true - - opengeo - OpenGeo Maven Repository - http://repo.opengeo.org - - - - false - - bintray-cuba-platform-main - bintray - http://dl.bintray.com/cuba-platform/main - - - - 0.7.0 - 3.2.4 - 3.6 - 1.1 - 1.9.3 - 1.2 - 1.4 - 1.9.2 - 1.2 - 3.21.0-GA - 3.6.2 - 1.5.0 - 3.1.0 - 9.4.3.v20170317 - 4.5.3 - 2.5 - 1.6 - 1.4.196 - 9.4.2.v20170220 - 4.5.3 - 2.5 - 1.2.0 - 2.8.5 - 2.92 - 1.4.0 - 1.24.0 - 1.1.3-rc.5 - 1.4.0 - 1.1.0 - 4.1.15.Final - 4.1 - 4.12 - 0.10 - 3.5.0 - 3.0.0 - 2.0.0.0 - 1.6.0 - 1.7.1 - 2.1.2 - 1.0 - 8.2.0 - 0.6.5 - 0.9.0 - 15.2 - 2.9.9 - 1.5.1 + + + maven2-repository.dev.java.net + Java.net repository + http://download.java.net/maven/2 + + + osgeo + Open Source Geospatial Foundation Repository + http://download.osgeo.org/webdav/geotools/ + + + + true + + opengeo + OpenGeo Maven Repository + http://repo.opengeo.org + + + + false + + bintray-cuba-platform-main + bintray + http://dl.bintray.com/cuba-platform/main + + + + 0.7.0 + 3.2.4 + 3.6 + 1.1 + 1.9.3 + 1.2 + 1.4 + 1.9.2 + 1.2 + 3.21.0-GA + 3.6.2 + 1.5.0 + 3.1.0 + 9.4.3.v20170317 + 4.5.3 + 2.5 + 1.6 + 1.4.196 + 9.4.2.v20170220 + 4.5.3 + 2.5 + 1.2.0 + 2.8.5 + 2.92 + 1.4.0 + 1.24.0 + 1.1.3-rc.5 + 1.4.0 + 1.1.0 + 4.1.15.Final + 4.1 + 4.12 + 0.10 + 3.5.0 + 3.0.0 + 2.0.0.0 + 1.6.0 + 1.7.1 + 2.1.2 + 1.0 + 8.2.0 + 0.6.5 + 0.9.0 + 15.2 + 2.3.0 + 2.9.9 + 1.5.1 1.14 - + diff --git a/libraries/src/main/java/com/baeldung/retrofit/basic/GitHubBasicApi.java b/libraries/src/main/java/com/baeldung/retrofit/basic/GitHubBasicApi.java new file mode 100644 index 0000000000..4e071d3384 --- /dev/null +++ b/libraries/src/main/java/com/baeldung/retrofit/basic/GitHubBasicApi.java @@ -0,0 +1,33 @@ +package com.baeldung.retrofit.basic; + +import java.util.List; + +import com.baeldung.retrofit.models.Contributor; +import com.baeldung.retrofit.models.Repository; + +import retrofit2.Call; +import retrofit2.http.GET; +import retrofit2.http.Path; + +public interface GitHubBasicApi { + + /** + * List GitHub repositories of user + * @param user GitHub Account + * @return GitHub repositories + */ + @GET("users/{user}/repos") + Call> listRepos(@Path("user") String user); + + /** + * List Contributors of a GitHub Repository + * @param user GitHub Account + * @param repo GitHub Repository + * @return GitHub Repository Contributors + */ + @GET("repos/{user}/{repo}/contributors") + Call> listRepoContributors( + @Path("user") String user, + @Path("repo") String repo); + +} diff --git a/libraries/src/main/java/com/baeldung/retrofit/basic/GitHubBasicApp.java b/libraries/src/main/java/com/baeldung/retrofit/basic/GitHubBasicApp.java new file mode 100644 index 0000000000..54a130a67e --- /dev/null +++ b/libraries/src/main/java/com/baeldung/retrofit/basic/GitHubBasicApp.java @@ -0,0 +1,14 @@ +package com.baeldung.retrofit.basic; + +import java.io.IOException; +import java.util.List; + +public class GitHubBasicApp { + + public static void main(String[] args) throws IOException { + String userName = "eugenp"; + List topContributors = new GitHubBasicService().getTopContributors(userName); + topContributors.stream().forEach(System.out::println); + } + +} diff --git a/libraries/src/main/java/com/baeldung/retrofit/basic/GitHubBasicService.java b/libraries/src/main/java/com/baeldung/retrofit/basic/GitHubBasicService.java new file mode 100644 index 0000000000..fbfdd96567 --- /dev/null +++ b/libraries/src/main/java/com/baeldung/retrofit/basic/GitHubBasicService.java @@ -0,0 +1,54 @@ +package com.baeldung.retrofit.basic; + +import java.io.IOException; +import java.util.ArrayList; +import java.util.Collections; +import java.util.List; +import java.util.stream.Collectors; + +import com.baeldung.retrofit.models.Contributor; +import com.baeldung.retrofit.models.Repository; + +import retrofit2.Retrofit; +import retrofit2.converter.gson.GsonConverterFactory; + +public class GitHubBasicService { + + private GitHubBasicApi gitHubApi; + + public GitHubBasicService() { + Retrofit retrofit = new Retrofit.Builder() + .baseUrl("https://api.github.com/") + .addConverterFactory(GsonConverterFactory.create()) + .build(); + + gitHubApi = retrofit.create(GitHubBasicApi.class); + } + + public List getTopContributors(String userName) throws IOException { + List repos = gitHubApi + .listRepos(userName) + .execute() + .body(); + + List topContributors = new ArrayList<>(); + for(Repository repo : repos) { + List contributers = gitHubApi + .listRepoContributors(userName, repo.getName()) + .execute() + .body(); + + List repoTopContributors = contributers.stream() + .filter(c -> c.getContributions() > 100) + .collect(Collectors.toList()); + topContributors.addAll(repoTopContributors); + } + + Collections.sort(topContributors, (a, b) -> b.getContributions() - a.getContributions()); + return topContributors.stream() + .map(c -> c.getName()) + .distinct() + .collect(Collectors.toList()); + } + +} diff --git a/libraries/src/main/java/com/baeldung/retrofit/models/Contributor.java b/libraries/src/main/java/com/baeldung/retrofit/models/Contributor.java new file mode 100644 index 0000000000..b7b7869ff6 --- /dev/null +++ b/libraries/src/main/java/com/baeldung/retrofit/models/Contributor.java @@ -0,0 +1,35 @@ +package com.baeldung.retrofit.models; + +import com.google.gson.annotations.SerializedName; + +/** + * GitHub Contributer + * @author hany + * + */ +public class Contributor { + + @SerializedName("login") + private String name; + + private Integer contributions; + + public String getName() { + return name; + } + public void setName(String name) { + this.name = name; + } + public Integer getContributions() { + return contributions; + } + public void setContributions(Integer contributions) { + this.contributions = contributions; + } + + @Override + public String toString() { + return "Contributer [name=" + name + ", contributions=" + contributions + "]"; + } + +} diff --git a/libraries/src/main/java/com/baeldung/retrofit/models/Repository.java b/libraries/src/main/java/com/baeldung/retrofit/models/Repository.java new file mode 100644 index 0000000000..61e4752ce7 --- /dev/null +++ b/libraries/src/main/java/com/baeldung/retrofit/models/Repository.java @@ -0,0 +1,32 @@ +package com.baeldung.retrofit.models; + +/** + * GitHub Repository + * @author hany + * + */ +public class Repository { + + private String name; + + private String description; + + public String getName() { + return name; + } + public void setName(String name) { + this.name = name; + } + public String getDescription() { + return description; + } + public void setDescription(String description) { + this.description = description; + } + + @Override + public String toString() { + return "Repository [name=" + name + ", description=" + description + "]"; + } + +} diff --git a/libraries/src/main/java/com/baeldung/retrofit/rx/GitHubRxApi.java b/libraries/src/main/java/com/baeldung/retrofit/rx/GitHubRxApi.java new file mode 100644 index 0000000000..4e40aff448 --- /dev/null +++ b/libraries/src/main/java/com/baeldung/retrofit/rx/GitHubRxApi.java @@ -0,0 +1,33 @@ +package com.baeldung.retrofit.rx; + +import java.util.List; + +import com.baeldung.retrofit.models.Contributor; +import com.baeldung.retrofit.models.Repository; + +import retrofit2.http.GET; +import retrofit2.http.Path; +import rx.Observable; + +public interface GitHubRxApi { + + /** + * List GitHub repositories of user + * @param user GitHub Account + * @return GitHub repositories + */ + @GET("users/{user}/repos") + Observable> listRepos(@Path("user") String user); + + /** + * List Contributors of a GitHub Repository + * @param user GitHub Account + * @param repo GitHub Repository + * @return GitHub Repository Contributors + */ + @GET("repos/{user}/{repo}/contributors") + Observable> listRepoContributors( + @Path("user") String user, + @Path("repo") String repo); + +} diff --git a/libraries/src/main/java/com/baeldung/retrofit/rx/GitHubRxApp.java b/libraries/src/main/java/com/baeldung/retrofit/rx/GitHubRxApp.java new file mode 100644 index 0000000000..0e0d8b1a77 --- /dev/null +++ b/libraries/src/main/java/com/baeldung/retrofit/rx/GitHubRxApp.java @@ -0,0 +1,13 @@ +package com.baeldung.retrofit.rx; + +import java.io.IOException; + +public class GitHubRxApp { + + public static void main(String[] args) throws IOException { + String userName = "eugenp"; + new GitHubRxService().getTopContributors(userName) + .subscribe(System.out::println); + } + +} diff --git a/libraries/src/main/java/com/baeldung/retrofit/rx/GitHubRxService.java b/libraries/src/main/java/com/baeldung/retrofit/rx/GitHubRxService.java new file mode 100644 index 0000000000..56d149d13e --- /dev/null +++ b/libraries/src/main/java/com/baeldung/retrofit/rx/GitHubRxService.java @@ -0,0 +1,33 @@ +package com.baeldung.retrofit.rx; + +import retrofit2.Retrofit; +import retrofit2.adapter.rxjava.RxJavaCallAdapterFactory; +import retrofit2.converter.gson.GsonConverterFactory; +import rx.Observable; + +public class GitHubRxService { + + private GitHubRxApi gitHubApi; + + public GitHubRxService() { + Retrofit retrofit = new Retrofit.Builder() + .baseUrl("https://api.github.com/") + .addConverterFactory(GsonConverterFactory.create()) + .addCallAdapterFactory(RxJavaCallAdapterFactory.create()) + .build(); + + gitHubApi = retrofit.create(GitHubRxApi.class); + } + + public Observable getTopContributors(String userName) { + return gitHubApi.listRepos(userName) + .flatMap( repos -> Observable.from(repos)) + .flatMap( repo -> gitHubApi.listRepoContributors(userName, repo.getName()) ) + .flatMap( contributers -> Observable.from(contributers)) + .filter( c -> c.getContributions() > 100) + .sorted( (a, b) -> b.getContributions() - a.getContributions() ) + .map( c -> c.getName()) + .distinct(); + } + +} diff --git a/libraries/src/test/java/com/baeldung/retrofit/basic/GitHubBasicApiTest.java b/libraries/src/test/java/com/baeldung/retrofit/basic/GitHubBasicApiTest.java new file mode 100644 index 0000000000..da554a551f --- /dev/null +++ b/libraries/src/test/java/com/baeldung/retrofit/basic/GitHubBasicApiTest.java @@ -0,0 +1,65 @@ +package com.baeldung.retrofit.basic; + +import static org.assertj.core.api.Assertions.assertThat; +import static org.junit.Assert.fail; + +import java.io.IOException; +import java.util.List; + +import org.junit.Before; +import org.junit.Test; + +import com.baeldung.retrofit.basic.GitHubBasicApi; +import com.baeldung.retrofit.models.Contributor; +import com.baeldung.retrofit.models.Repository; + +import retrofit2.Retrofit; +import retrofit2.converter.gson.GsonConverterFactory; + +public class GitHubBasicApiTest { + + GitHubBasicApi gitHub; + + @Before + public void init() { + Retrofit retrofit = new Retrofit.Builder() + .baseUrl("https://api.github.com/") + .addConverterFactory(GsonConverterFactory.create()) + .build(); + + gitHub = retrofit.create(GitHubBasicApi.class); + } + + @Test + public void whenListRepos_thenExpectReposThatContainTutorials() { + try { + List repos = gitHub + .listRepos("eugenp") + .execute() + .body(); + + assertThat(repos) + .isNotEmpty() + .extracting(Repository::getName).contains("tutorials"); + } catch (IOException e) { + fail("Can not communicate with GitHub API"); + } + } + + @Test + public void whenListRepoContributers_thenExpectContributorsThatContainEugenp() { + try { + List contributors = gitHub + .listRepoContributors("eugenp", "tutorials") + .execute() + .body(); + + assertThat(contributors) + .isNotEmpty() + .extracting(Contributor::getName).contains("eugenp"); + } catch (IOException e) { + fail("Can not communicate with GitHub API"); + } + } + +} diff --git a/libraries/src/test/java/com/baeldung/retrofit/rx/GitHubRxApiTest.java b/libraries/src/test/java/com/baeldung/retrofit/rx/GitHubRxApiTest.java new file mode 100644 index 0000000000..c2fbd9bf60 --- /dev/null +++ b/libraries/src/test/java/com/baeldung/retrofit/rx/GitHubRxApiTest.java @@ -0,0 +1,53 @@ +package com.baeldung.retrofit.rx; + +import static org.assertj.core.api.Assertions.assertThat; + +import org.junit.Before; +import org.junit.Test; + +import com.baeldung.retrofit.models.Contributor; +import com.baeldung.retrofit.models.Repository; +import com.baeldung.retrofit.rx.GitHubRxApi; + +import retrofit2.Retrofit; +import retrofit2.adapter.rxjava.RxJavaCallAdapterFactory; +import retrofit2.converter.gson.GsonConverterFactory; + +public class GitHubRxApiTest { + + GitHubRxApi gitHub; + + @Before + public void init() { + Retrofit retrofit = new Retrofit.Builder() + .baseUrl("https://api.github.com/") + .addConverterFactory(GsonConverterFactory.create()) + .addCallAdapterFactory(RxJavaCallAdapterFactory.create()) + .build(); + + gitHub = retrofit.create(GitHubRxApi.class); + } + + @Test + public void whenListRepos_thenExpectReposThatContainTutorials() { + gitHub + .listRepos("eugenp") + .subscribe( repos -> { + assertThat(repos) + .isNotEmpty() + .extracting(Repository::getName).contains("tutorials"); + }); + } + + @Test + public void whenListRepoContributers_thenExpectContributorsThatContainEugenp() { + gitHub + .listRepoContributors("eugenp", "tutorials") + .subscribe(contributors -> { + assertThat(contributors) + .isNotEmpty() + .extracting(Contributor::getName).contains("eugenp"); + }); + } + +}