[rest-gradle-plugin] 52/83: Add the ability to specify a custom successful response handler

Alastair McKinstry mckinstry at moszumanska.debian.org
Wed Oct 25 15:59:06 UTC 2017


This is an automated email from the git hooks/post-receive script.

mckinstry pushed a commit to branch debian/master
in repository rest-gradle-plugin.

commit 9a036568d0ea168400384e5cbcdec300bdf0dbdc
Author: noamt <noam at 10ne.org>
Date:   Sun Sep 20 17:31:16 2015 +0300

    Add the ability to specify a custom successful response handler
---
 .../groovy/org/_10ne/gradle/rest/RestTask.groovy   | 56 +++++++++++++++++-----
 .../org/_10ne/gradle/rest/RestTaskSpec.groovy      | 47 ++++++++++++++++++
 2 files changed, 92 insertions(+), 11 deletions(-)

diff --git a/src/main/groovy/org/_10ne/gradle/rest/RestTask.groovy b/src/main/groovy/org/_10ne/gradle/rest/RestTask.groovy
index 05de2cf..4699d9b 100644
--- a/src/main/groovy/org/_10ne/gradle/rest/RestTask.groovy
+++ b/src/main/groovy/org/_10ne/gradle/rest/RestTask.groovy
@@ -38,22 +38,43 @@ class RestTask extends DefaultTask {
 
     RESTClient client
 
-    @Input String httpMethod
-    @Input Object uri
     @Input
-    @Optional boolean preemptiveAuth
+    String httpMethod
+
     @Input
-    @Optional String username
+    Object uri
+
     @Input
-    @Optional String password
+    @Optional
+    boolean preemptiveAuth
+
     @Input
-    @Optional Object requestContentType
+    @Optional
+    String username
+
     @Input
-    @Optional Object contentType
+    @Optional
+    String password
+
     @Input
-    @Optional Object requestBody
+    @Optional
+    Object requestContentType
+
     @Input
-    @Optional Object requestHeaders
+    @Optional
+    Object contentType
+
+    @Input
+    @Optional
+    Object requestBody
+
+    @Input
+    @Optional
+    Object requestHeaders
+
+    @Input
+    @Optional
+    Closure responseHandler
 
     HttpResponseDecorator serverResponse
 
@@ -107,8 +128,21 @@ class RestTask extends DefaultTask {
 
         try {
             serverResponse = client."${httpMethod.toLowerCase()}"(params)
-            slf4jLogger.info "Server Response:" + System.lineSeparator() + serverResponse.getData()
-        } catch(groovyx.net.http.HttpResponseException e) {
+            if (responseHandler && responseHandler.maximumNumberOfParameters == 1) {
+                def parameterType = responseHandler.parameterTypes.first()
+                if (InputStream.isAssignableFrom(parameterType)) {
+                    responseHandler.call(serverResponse.entity.content)
+                } else if (String.isAssignableFrom(parameterType)) {
+                    serverResponse.entity.content.withStream {
+                        responseHandler.call(it.text)
+                    }
+                } else {
+                    responseHandler.call(serverResponse.data)
+                }
+            } else {
+                slf4jLogger.info "Server Response:" + System.lineSeparator() + serverResponse.getData()
+            }
+        } catch (groovyx.net.http.HttpResponseException e) {
             throw new GradleException(e.getResponse().getData().toString(), e)
         }
     }
diff --git a/src/test/groovy/org/_10ne/gradle/rest/RestTaskSpec.groovy b/src/test/groovy/org/_10ne/gradle/rest/RestTaskSpec.groovy
index c179c14..d1352b4 100644
--- a/src/test/groovy/org/_10ne/gradle/rest/RestTaskSpec.groovy
+++ b/src/test/groovy/org/_10ne/gradle/rest/RestTaskSpec.groovy
@@ -4,6 +4,8 @@ import groovyx.net.http.AuthConfig
 import groovyx.net.http.HttpResponseDecorator
 import groovyx.net.http.RESTClient
 import org.apache.http.HttpHeaders
+import org.apache.http.entity.BasicHttpEntity
+import org.apache.tools.ant.filters.StringInputStream
 import org.gradle.api.InvalidUserDataException
 import org.gradle.api.Project
 import org.gradle.api.Task
@@ -173,4 +175,49 @@ class RestTaskSpec extends Specification {
         'http' | 8080
         'https' | 8443
     }
+
+    def 'Configure and execute a request with a custom response handler'() {
+        setup:
+        def responseCalled = false
+
+        Task task = project.tasks.create(name: 'request', type: RestTask) {
+            httpMethod = 'post'
+            uri = 'bob.com'
+            username = 'username'
+            password = 'password'
+            requestContentType = 'requestContentType'
+            requestBody = 'requestBody'
+            contentType = 'contentType'
+            responseHandler = { String responseText ->
+                responseCalled = (responseText == 'called')
+            }
+        }
+        def mockClient = Mock(RESTClient)
+        task.client = mockClient
+
+        def mockAuth = Mock(AuthConfig)
+
+        def mockResponse = Mock(HttpResponseDecorator) {
+            getEntity() >> {
+                def entity = new BasicHttpEntity()
+                entity.content = new StringInputStream('called')
+                entity
+            }
+        }
+
+        when:
+        task.executeRequest()
+
+        then:
+        1 * mockClient.setUri('bob.com')
+        1 * mockClient.getAuth() >> { mockAuth }
+        1 * mockAuth.basic('username', 'password')
+        1 * mockClient.post(_ as Map) >> { Map params ->
+            assert params.body == 'requestBody'
+            assert params.contentType == 'contentType'
+            assert params.requestContentType == 'requestContentType'
+            mockResponse
+        }
+        responseCalled
+    }
 }

-- 
Alioth's /usr/local/bin/git-commit-notice on /srv/git.debian.org/git/pkg-java/rest-gradle-plugin.git



More information about the pkg-java-commits mailing list