diff --git a/rest-testing/pom.xml b/rest-testing/pom.xml index bd3133df3b..a789c57816 100644 --- a/rest-testing/pom.xml +++ b/rest-testing/pom.xml @@ -15,7 +15,13 @@ guava ${guava.version} - + + + commons-io + commons-io + 2.4 + + org.apache.commons commons-lang3 @@ -35,6 +41,14 @@ ${httpcore.version} + + + + com.fasterxml.jackson.core + jackson-databind + ${jackson.version} + + @@ -125,11 +139,9 @@ 4.0.0.RELEASE - 3.2.0.RELEASE - - 4.3.0.Final - 5.1.27 + + 2.3.0 1.7.5 diff --git a/rest-testing/src/test/java/org/baeldung/rest/ConvertUtil.java b/rest-testing/src/test/java/org/baeldung/rest/ConvertUtil.java new file mode 100644 index 0000000000..a8b325d9a0 --- /dev/null +++ b/rest-testing/src/test/java/org/baeldung/rest/ConvertUtil.java @@ -0,0 +1,23 @@ +package org.baeldung.rest; + +import java.io.IOException; + +import com.fasterxml.jackson.databind.ObjectMapper; +import com.google.common.base.Preconditions; + +public class ConvertUtil { + + public static String convertResourceToJson(final T resource) throws IOException { + Preconditions.checkNotNull(resource); + + return new ObjectMapper().writeValueAsString(resource); + } + + public static T convertJsonToResource(final String json, final Class clazzOfResource) throws IOException { + Preconditions.checkNotNull(json); + Preconditions.checkNotNull(clazzOfResource); + + return new ObjectMapper().readValue(json, clazzOfResource); + } + +} diff --git a/rest-testing/src/test/java/org/baeldung/rest/GitHubUser.java b/rest-testing/src/test/java/org/baeldung/rest/GitHubUser.java new file mode 100644 index 0000000000..73c9677377 --- /dev/null +++ b/rest-testing/src/test/java/org/baeldung/rest/GitHubUser.java @@ -0,0 +1,21 @@ +package org.baeldung.rest; + +public class GitHubUser { + + private String login; + + public GitHubUser() { + super(); + } + + // API + + public String getLogin() { + return login; + } + + public void setLogin(final String login) { + this.login = login; + } + +} diff --git a/rest-testing/src/test/java/org/baeldung/rest/GithubBasicLiveTest.java b/rest-testing/src/test/java/org/baeldung/rest/GithubBasicLiveTest.java new file mode 100644 index 0000000000..acac82c8f4 --- /dev/null +++ b/rest-testing/src/test/java/org/baeldung/rest/GithubBasicLiveTest.java @@ -0,0 +1,64 @@ +package org.baeldung.rest; + +import static org.apache.commons.lang3.RandomStringUtils.randomAlphabetic; +import static org.hamcrest.Matchers.equalTo; +import static org.junit.Assert.assertEquals; +import static org.junit.Assert.assertThat; + +import java.io.IOException; + +import org.apache.http.HttpResponse; +import org.apache.http.HttpStatus; +import org.apache.http.client.ClientProtocolException; +import org.apache.http.client.methods.HttpGet; +import org.apache.http.client.methods.HttpUriRequest; +import org.apache.http.entity.ContentType; +import org.apache.http.impl.client.HttpClientBuilder; +import org.hamcrest.Matchers; +import org.junit.Test; + +public class GithubBasicLiveTest { + + // simple request - response + + @Test + public void givenUserDoesNotExists_whenUserInfoIsRetrieved_then404IsReceived() throws ClientProtocolException, IOException { + // Given + final String name = randomAlphabetic(8); + final HttpUriRequest request = new HttpGet("https://api.github.com/users/" + name); + + // When + final HttpResponse httpResponse = HttpClientBuilder.create().build().execute(request); + + // Then + assertThat(httpResponse.getStatusLine().getStatusCode(), equalTo(HttpStatus.SC_NOT_FOUND)); + } + + @Test + public void givenRequestWithNoAcceptHeader_whenRequestIsExecuted_thenDefaultResponseContentTypeIsJson() throws ClientProtocolException, IOException { + // Given + final String jsonMimeType = "application/json"; + final HttpUriRequest request = new HttpGet("https://api.github.com/users/eugenp"); + + // When + final HttpResponse response = HttpClientBuilder.create().build().execute(request); + + // Then + final String mimeType = ContentType.getOrDefault(response.getEntity()).getMimeType(); + assertEquals(jsonMimeType, mimeType); + } + + @Test + public void givenUserExists_whenUserInformationIsRetrieved_thenRetrievedResourceIsCorrect() throws ClientProtocolException, IOException { + // Given + final HttpUriRequest request = new HttpGet("https://api.github.com/users/eugenp"); + + // When + final HttpResponse response = HttpClientBuilder.create().build().execute(request); + + // Then + final GitHubUser resource = RetrieveUtil.retrieveResourceFromResponse(response, GitHubUser.class); + assertThat("eugenp", Matchers.is(resource.getLogin())); + } + +} diff --git a/rest-testing/src/test/java/org/baeldung/rest/HttpClientBasicLiveTest.java b/rest-testing/src/test/java/org/baeldung/rest/HttpClientBasicLiveTest.java deleted file mode 100644 index bc0702118d..0000000000 --- a/rest-testing/src/test/java/org/baeldung/rest/HttpClientBasicLiveTest.java +++ /dev/null @@ -1,85 +0,0 @@ -package org.baeldung.rest; - -import static org.hamcrest.Matchers.equalTo; -import static org.hamcrest.Matchers.notNullValue; -import static org.junit.Assert.assertThat; - -import java.io.IOException; -import java.io.InputStream; - -import org.apache.http.HttpEntity; -import org.apache.http.HttpStatus; -import org.apache.http.client.ClientProtocolException; -import org.apache.http.client.methods.CloseableHttpResponse; -import org.apache.http.client.methods.HttpGet; -import org.apache.http.entity.ContentType; -import org.apache.http.impl.client.CloseableHttpClient; -import org.apache.http.impl.client.HttpClientBuilder; -import org.apache.http.util.EntityUtils; -import org.junit.After; -import org.junit.Before; -import org.junit.Test; - -public class HttpClientBasicLiveTest { - - private static final String SAMPLE_URL = "http://www.github.com"; - - private CloseableHttpClient instance; - - private CloseableHttpResponse response; - - @Before - public final void before() { - instance = HttpClientBuilder.create().build(); - } - - @After - public final void after() throws IllegalStateException, IOException { - if (response == null) { - return; - } - - try { - final HttpEntity entity = response.getEntity(); - if (entity != null) { - final InputStream instream = entity.getContent(); - instream.close(); - } - } finally { - response.close(); - } - } - - // tests - - // simple request - response - - @Test - public final void whenExecutingBasicGetRequest_thenNoExceptions() throws ClientProtocolException, IOException { - response = instance.execute(new HttpGet(SAMPLE_URL)); - } - - @Test - public final void givenGetRequestExecuted_whenAnalyzingTheResponse_thenCorrectStatusCode() throws ClientProtocolException, IOException { - response = instance.execute(new HttpGet(SAMPLE_URL)); - final int statusCode = response.getStatusLine().getStatusCode(); - assertThat(statusCode, equalTo(HttpStatus.SC_OK)); - } - - @Test - public final void givenGetRequestExecuted_whenAnalyzingTheResponse_thenCorrectMimeType() throws ClientProtocolException, IOException { - response = instance.execute(new HttpGet(SAMPLE_URL)); - final String contentMimeType = ContentType.getOrDefault(response.getEntity()).getMimeType(); - - assertThat(contentMimeType, equalTo(ContentType.TEXT_HTML.getMimeType())); - } - - @Test - public final void givenGetRequestExecuted_whenAnalyzingTheResponse_thenCorrectBody() throws ClientProtocolException, IOException { - response = instance.execute(new HttpGet(SAMPLE_URL)); - final String bodyAsString = EntityUtils.toString(response.getEntity()); - - assertThat(bodyAsString, notNullValue()); - } - -} diff --git a/rest-testing/src/test/java/org/baeldung/rest/RetrieveUtil.java b/rest-testing/src/test/java/org/baeldung/rest/RetrieveUtil.java new file mode 100644 index 0000000000..61506d4ba4 --- /dev/null +++ b/rest-testing/src/test/java/org/baeldung/rest/RetrieveUtil.java @@ -0,0 +1,26 @@ +package org.baeldung.rest; + +import java.io.IOException; + +import org.apache.commons.io.IOUtils; +import org.apache.http.HttpResponse; + +import com.google.common.base.Preconditions; + +public class RetrieveUtil { + + public static String retrieveJsonFromResponse(final HttpResponse response) throws IOException { + Preconditions.checkNotNull(response); + + return IOUtils.toString(response.getEntity().getContent()); + } + + public static T retrieveResourceFromResponse(final HttpResponse response, final Class clazz) throws IOException { + Preconditions.checkNotNull(response); + Preconditions.checkNotNull(clazz); + + final String jsonFromResponse = retrieveJsonFromResponse(response); + return ConvertUtil.convertJsonToResource(jsonFromResponse, clazz); + } + +}