[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