This is an automated email from the ASF dual-hosted git repository.

jamesbognar pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/juneau.git


The following commit(s) were added to refs/heads/master by this push:
     new c4716da  RestClient tests.
c4716da is described below

commit c4716dacea9003e03390f71f5a56f48f8ea18270
Author: JamesBognar <james.bog...@salesforce.com>
AuthorDate: Tue Jun 9 19:32:14 2020 -0400

    RestClient tests.
---
 .../main/java/org/apache/juneau/Streamable.java    |   4 +-
 .../org/apache/juneau/http/StreamResource.java     |   2 +-
 .../java/org/apache/juneau/utils/ZipFileList.java  |   2 +-
 .../main/ConfigurablePropertyCodeGenerator.java    |   1 +
 .../juneau/rest/client2/EndToEndInterfaceTest.java |   4 +-
 .../apache/juneau/rest/client2/RestClientTest.java | 109 +++++++++++++++++++++
 .../org/apache/juneau/rest/client2/RestClient.java |  31 +++++-
 .../apache/juneau/rest/client2/RestRequest.java    |   2 +-
 .../apache/juneau/rest/mock2/MockRestClient.java   |   4 +-
 9 files changed, 145 insertions(+), 14 deletions(-)

diff --git 
a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/Streamable.java 
b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/Streamable.java
index 331a3fb..97a81d0 100644
--- 
a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/Streamable.java
+++ 
b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/Streamable.java
@@ -20,7 +20,7 @@ import org.apache.juneau.http.*;
  * Interface that identifies that an object can be serialized directly to an 
output stream.
  *
  * <p>
- * Instances must identify the media type of the content by implementing the 
{@link #getMediaType()} method.
+ * Instances must identify the media type of the content by implementing the 
{@link #getContentType()} method.
  */
 public interface Streamable {
 
@@ -37,5 +37,5 @@ public interface Streamable {
         *
         * @return The media type, or <jk>null</jk> if the media type is not 
known.
         */
-       MediaType getMediaType();
+       MediaType getContentType();
 }
diff --git 
a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/http/StreamResource.java
 
b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/http/StreamResource.java
index 8214f11..151bec6 100644
--- 
a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/http/StreamResource.java
+++ 
b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/http/StreamResource.java
@@ -237,7 +237,7 @@ public class StreamResource implements Streamable {
 
        @ResponseHeader("Content-Type")
        @Override /* Streamable */
-       public MediaType getMediaType() {
+       public MediaType getContentType() {
                return mediaType;
        }
 
diff --git 
a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/utils/ZipFileList.java
 
b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/utils/ZipFileList.java
index 9818545..575eb1e 100644
--- 
a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/utils/ZipFileList.java
+++ 
b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/utils/ZipFileList.java
@@ -40,7 +40,7 @@ public class ZipFileList extends 
LinkedList<ZipFileList.ZipFileEntry> implements
 
        @Header("Content-Type")
        @Override /* Streamable */
-       public MediaType getMediaType() {
+       public MediaType getContentType() {
                return MediaType.forString("application/zip");
        }
 
diff --git 
a/juneau-releng/juneau-all/src/java/main/ConfigurablePropertyCodeGenerator.java 
b/juneau-releng/juneau-all/src/java/main/ConfigurablePropertyCodeGenerator.java
index 8fbadb6..b2cbfa3 100644
--- 
a/juneau-releng/juneau-all/src/java/main/ConfigurablePropertyCodeGenerator.java
+++ 
b/juneau-releng/juneau-all/src/java/main/ConfigurablePropertyCodeGenerator.java
@@ -82,6 +82,7 @@ public class ConfigurablePropertyCodeGenerator {
                RdfSerializerBuilder.class,
                ReaderParserBuilder.class,
                RestClientBuilder.class,
+               MockRestClientBuilder.class,
                RestContextBuilder.class,
                RestMethodContextBuilder.class,
                SerializerBuilder.class,
diff --git 
a/juneau-rest/juneau-rest-client-utest/src/test/java/org/apache/juneau/rest/client2/EndToEndInterfaceTest.java
 
b/juneau-rest/juneau-rest-client-utest/src/test/java/org/apache/juneau/rest/client2/EndToEndInterfaceTest.java
index 0500a10..d20fc85 100644
--- 
a/juneau-rest/juneau-rest-client-utest/src/test/java/org/apache/juneau/rest/client2/EndToEndInterfaceTest.java
+++ 
b/juneau-rest/juneau-rest-client-utest/src/test/java/org/apache/juneau/rest/client2/EndToEndInterfaceTest.java
@@ -328,7 +328,7 @@ public class EndToEndInterfaceTest {
                assertEquals("foo", IOUtils.read(r.getContents()));
                assertEquals("foo", r.getHeaders().get("Foo"));
                assertEquals("bar", r.getHeaders().get("ETag"));
-               assertEquals("text/foo", r.getMediaType().toString());
+               assertEquals("text/foo", r.getContentType().toString());
        }
 
        @Test
@@ -347,7 +347,7 @@ public class EndToEndInterfaceTest {
                StreamResource r = id2.streamResource();
                assertEquals("foo", IOUtils.read(r.getContents()));
                assertEquals("foo", r.getHeaders().get("Foo"));
-               assertEquals("text/foo", r.getMediaType().toString());
+               assertEquals("text/foo", r.getContentType().toString());
        }
 
        @Test
diff --git 
a/juneau-rest/juneau-rest-client-utest/src/test/java/org/apache/juneau/rest/client2/RestClientTest.java
 
b/juneau-rest/juneau-rest-client-utest/src/test/java/org/apache/juneau/rest/client2/RestClientTest.java
index 7741ffb..d58b342 100644
--- 
a/juneau-rest/juneau-rest-client-utest/src/test/java/org/apache/juneau/rest/client2/RestClientTest.java
+++ 
b/juneau-rest/juneau-rest-client-utest/src/test/java/org/apache/juneau/rest/client2/RestClientTest.java
@@ -18,6 +18,7 @@ import static org.apache.juneau.rest.client2.RestClient.*;
 import static org.apache.juneau.testutils.TestUtils.*;
 
 import java.io.*;
+import java.net.*;
 import java.util.*;
 import java.util.concurrent.*;
 import java.util.concurrent.atomic.*;
@@ -29,6 +30,8 @@ import org.apache.http.HttpResponse;
 import org.apache.http.auth.*;
 import org.apache.http.client.*;
 import org.apache.http.client.methods.*;
+import org.apache.http.client.utils.*;
+import org.apache.http.entity.*;
 import org.apache.http.impl.client.*;
 import org.apache.http.message.*;
 import org.apache.http.protocol.*;
@@ -42,6 +45,7 @@ import org.apache.juneau.http.annotation.*;
 import org.apache.juneau.http.annotation.Header;
 import org.apache.juneau.http.exception.*;
 import org.apache.juneau.http.header.*;
+import org.apache.juneau.http.header.ContentType;
 import org.apache.juneau.http.response.*;
 import org.apache.juneau.httppart.*;
 import org.apache.juneau.json.*;
@@ -100,6 +104,10 @@ public class RestClientTest {
                        return b;
                }
                @RestMethod(path="/bean")
+               public Bean patchBean(@Body Bean b) {
+                       return b;
+               }
+               @RestMethod(path="/bean")
                public Bean deleteBean() {
                        return bean;
                }
@@ -249,6 +257,55 @@ public class RestClientTest {
                        .body(bean)
                        .run()
                        .assertBody().is("{f:1}");
+
+               // Different URL types.
+               for (Object url : AList.<Object>of(new 
URIBuilder("http://localhost/bean";), 
java.net.URI.create("http://localhost/bean";), new URL("http://localhost/bean";), 
"/bean", new StringBuilder("/bean"))) {
+                       MockRestClient
+                               .create(A.class)
+                               .simpleJson()
+                               .build()
+                               .put(url, bean)
+                               .run()
+                               .assertBody().is("{f:1}");
+
+                       MockRestClient
+                               .create(A.class)
+                               .simpleJson()
+                               .build()
+                               .put(url, "{f:1}", "application/json")
+                               .run()
+                               .assertBody().is("{f:1}");
+
+                       MockRestClient
+                               .create(A.class)
+                               .simpleJson()
+                               .build()
+                               .put(url)
+                               .body(bean)
+                               .run()
+                               .assertBody().is("{f:1}");
+               }
+
+               // Different body types.
+               List<Object> l = AList.<Object>of(
+                       new StringReader("{f:1}"),
+                       new ByteArrayInputStream("{f:1}".getBytes()),
+                       ReaderResource.create().contents("{f:1}").build(),
+                       StreamResource.create().contents("{f:1}").build(),
+                       bean,
+                       new StringEntity("{f:1}"),
+                       NameValuePairs.of("f", 1)
+               );
+               for (Object body : l) {
+                       MockRestClient
+                               .create(A.class)
+                               .simpleJson()
+                               .contentType(body instanceof NameValuePairs ? 
"application/x-www-form-urlencoded" : "application/json")
+                               .build()
+                               .put("/bean", body)
+                               .run()
+                               .assertBody().is("{f:1}");
+               }
        }
 
        @Test
@@ -342,6 +399,30 @@ public class RestClientTest {
                MockRestClient
                        .create(A.class)
                        .build()
+                       .formPost("/bean", (Object)new 
NameValuePair[]{BasicNameValuePair.of("f","1")})
+                       .accept("application/json+simple")
+                       .run()
+                       .assertBody().is("{f:1}");
+
+               MockRestClient
+                       .create(A.class)
+                       .build()
+                       .formPost("/bean", new 
NameValuePair[]{BasicNameValuePair.of("f","1")})
+                       .accept("application/json+simple")
+                       .run()
+                       .assertBody().is("{f:1}");
+
+               MockRestClient
+                       .create(A.class)
+                       .build()
+                       .formPost("/bean", new StringEntity("{f:1}", 
org.apache.http.entity.ContentType.APPLICATION_JSON))
+                       .accept("application/json+simple")
+                       .run()
+                       .assertBody().is("{f:1}");
+
+               MockRestClient
+                       .create(A.class)
+                       .build()
                        .formPost("/bean", BasicNameValuePair.of("f","1"))
                        .accept("application/json+simple")
                        .run()
@@ -356,6 +437,34 @@ public class RestClientTest {
                        .assertBody().is("{f:1}");
        }
 
+       @Test
+       public void a12_basicCalls_patch() throws Exception {
+               MockRestClient
+                       .create(A.class)
+                       .simpleJson()
+                       .build()
+                       .patch("/bean", bean)
+                       .run()
+                       .assertBody().is("{f:1}");
+
+               MockRestClient
+                       .create(A.class)
+                       .simpleJson()
+                       .build()
+                       .patch("/bean", "{f:1}", "application/json")
+                       .run()
+                       .assertBody().is("{f:1}");
+
+               MockRestClient
+                       .create(A.class)
+                       .simpleJson()
+                       .build()
+                       .patch("/bean")
+                       .body(bean)
+                       .run()
+                       .assertBody().is("{f:1}");
+       }
+
        
//------------------------------------------------------------------------------------------------------------------
        // Logging
        
//------------------------------------------------------------------------------------------------------------------
diff --git 
a/juneau-rest/juneau-rest-client/src/main/java/org/apache/juneau/rest/client2/RestClient.java
 
b/juneau-rest/juneau-rest-client/src/main/java/org/apache/juneau/rest/client2/RestClient.java
index 2de9827..60c35a9 100644
--- 
a/juneau-rest/juneau-rest-client/src/main/java/org/apache/juneau/rest/client2/RestClient.java
+++ 
b/juneau-rest/juneau-rest-client/src/main/java/org/apache/juneau/rest/client2/RestClient.java
@@ -2406,10 +2406,11 @@ public class RestClient extends BeanContext implements 
HttpClient, Closeable, Re
         * @param body
         *      The object to serialize and transmit to the URL as the body of 
the request.
         *      <ul class='spaced-list'>
-        *              <li class='jc'>{@link HttpEntity} - Serialized directly.
         *              <li class='jc'>{@link NameValuePair} - URL-encoded as a 
single name-value pair.
         *              <li class='jc'>{@link NameValuePair} array - 
URL-encoded as name value pairs.
         *              <li class='jc'>{@link NameValuePairs} - URL-encoded as 
name value pairs.
+        *              <li class='jc'>{@link Reader}/{@link InputStream}- 
Streamed directly and <l>Content-Type</l> set to 
<js>"application/x-www-form-urlencoded"</js>
+        *              <li class='jc'>{@link ReaderResource}/{@link 
StreamResource}/{@link HttpEntity}- Streamed directly and <l>Content-Type</l> 
set to <js>"application/x-www-form-urlencoded"</js> if not already specified on 
the entity.
         *              <li class='jc'>{@link Object} - Converted to a {@link 
SerializedHttpEntity} using {@link UrlEncodingSerializer} to serialize.
         *      </ul>
         * @return
@@ -2426,8 +2427,26 @@ public class RestClient extends BeanContext implements 
HttpClient, Closeable, Re
                                return req.body(new 
UrlEncodedFormEntity(Arrays.asList((NameValuePair[])body)));
                        if (body instanceof NameValuePairs)
                                return req.body(new 
UrlEncodedFormEntity((NameValuePairs)body));
-                       if (body instanceof HttpEntity)
-                               return req.body(body);
+                       if (body instanceof HttpEntity) {
+                               HttpEntity e = (HttpEntity)body;
+                               if (e.getContentType() == null)
+                                       
req.contentType("application/x-www-form-urlencoded");
+                               return req.body(e);
+                       }
+                       if (body instanceof Reader || body instanceof 
InputStream)
+                               return 
req.contentType("application/x-www-form-urlencoded").body(body);
+                       if (body instanceof ReaderResource) {
+                               ReaderResource r = (ReaderResource)body;
+                               if (r.getContentType() == null)
+                                       
req.contentType("application/x-www-form-urlencoded");
+                               return req.body(r);
+                       }
+                       if (body instanceof StreamResource) {
+                               StreamResource r = (StreamResource)body;
+                               if (r.getContentType() == null)
+                                       
req.contentType("application/x-www-form-urlencoded");
+                               return req.body(r);
+                       }
                        return req.body(new SerializedHttpEntity(body, 
urlEncodingSerializer, null, null));
                } catch (UnsupportedEncodingException e) {
                        // Should never happen.
@@ -2566,13 +2585,15 @@ public class RestClient extends BeanContext implements 
HttpClient, Closeable, Re
         *      </ul>
         * @param body
         *      The object to serialize and transmit to the URL as the body of 
the request bypassing the serializer.
+        * @param contentType
+        *      The content type of the request.
         * @return
         *      A {@link RestRequest} object that can be further tailored 
before executing the request and getting the response
         *      as a parsed object.
         * @throws RestCallException If any authentication errors occurred.
         */
-       public RestRequest pathString(Object url, String body) throws 
RestCallException {
-               return request("PATCH", url, true).stringBody(body);
+       public RestRequest patch(Object url, String body, String contentType) 
throws RestCallException {
+               return request("PATCH", url, 
true).stringBody(body).contentType(contentType);
        }
 
        /**
diff --git 
a/juneau-rest/juneau-rest-client/src/main/java/org/apache/juneau/rest/client2/RestRequest.java
 
b/juneau-rest/juneau-rest-client/src/main/java/org/apache/juneau/rest/client2/RestRequest.java
index e4eed51..e8f1eb8 100644
--- 
a/juneau-rest/juneau-rest-client/src/main/java/org/apache/juneau/rest/client2/RestRequest.java
+++ 
b/juneau-rest/juneau-rest-client/src/main/java/org/apache/juneau/rest/client2/RestRequest.java
@@ -3710,7 +3710,7 @@ public class RestRequest extends BeanSession implements 
HttpUriRequest, Configur
                                }
                                else if (input instanceof StreamResource) {
                                        StreamResource r = 
(StreamResource)input;
-                                       contentType(r.getMediaType());
+                                       contentType(r.getContentType());
                                        headers(r.getHeaders());
                                        entity = new 
InputStreamEntity(r.getContents(), 
getRequestContentType(ContentType.APPLICATION_OCTET_STREAM));
                                }
diff --git 
a/juneau-rest/juneau-rest-mock/src/main/java/org/apache/juneau/rest/mock2/MockRestClient.java
 
b/juneau-rest/juneau-rest-mock/src/main/java/org/apache/juneau/rest/mock2/MockRestClient.java
index ee30667..be9d498 100644
--- 
a/juneau-rest/juneau-rest-mock/src/main/java/org/apache/juneau/rest/mock2/MockRestClient.java
+++ 
b/juneau-rest/juneau-rest-mock/src/main/java/org/apache/juneau/rest/mock2/MockRestClient.java
@@ -456,8 +456,8 @@ public class MockRestClient extends RestClient implements 
HttpClientConnection {
        }
 
        @Override /* RestClient */
-       public MockRestRequest pathString(Object url, String body) throws 
RestCallException {
-               return (MockRestRequest)super.pathString(url, body);
+       public MockRestRequest patch(Object url, String body, String 
contentType) throws RestCallException {
+               return (MockRestRequest)super.patch(url, body, contentType);
        }
 
        @Override /* RestClient */

Reply via email to