All Downloads are FREE. Search and download functionalities are using the official Maven repository.

au.com.dius.pact.consumer.dispatch.HttpClient.scala Maven / Gradle / Ivy

Go to download

pact-jvm-consumer-specs2 ======================== ## Specs2 Bindings for the pact-jvm library ## Dependency In the root folder of your project in build.sbt add the line: ```scala libraryDependencies += "au.com.dius" %% "pact-jvm-consumer-specs2" % "3.2.11" ``` or if you are using Gradle: ```groovy dependencies { testCompile "au.com.dius:pact-jvm-consumer-specs2_2.11:3.2.11" } ``` __*Note:*__ `PactSpec` requires spec2 3.x. Also, for spray users there's an incompatibility between specs2 v3.x and spray. Follow these instructions to resolve that problem: https://groups.google.com/forum/#!msg/spray-user/2T6SBp4OJeI/AJlnJuAKPRsJ ## Usage To author a test, mix `PactSpec` into your spec First we define a service client called `ConsumerService`. In our example this is a simple wrapper for `dispatch`, an HTTP client. The source code can be found in the test folder alongside the `ExamplePactSpec`. Here is a simple example: ``` import au.com.dius.pact.consumer.PactSpec class ExamplePactSpec extends Specification with PactSpec { val consumer = "My Consumer" val provider = "My Provider" override def is = uponReceiving("a request for foo") .matching(path = "/foo") .willRespondWith(body = "{}") .withConsumerTest { providerConfig => Await.result(ConsumerService(providerConfig.url).simpleGet("/foo"), Duration(1000, MILLISECONDS)) must beEqualTo(200, Some("{}")) } } ``` This spec will be run along with the rest of your specs2 unit tests and will output your pact json to ``` /target/pacts/<Consumer>_<Provider>.json ```

The newest version!
package au.com.dius.pact.consumer.dispatch

import java.nio.charset.Charset
import java.util
import java.util.concurrent.CompletableFuture

import au.com.dius.pact.model.{OptionalBody, Request, Response}
import org.apache.commons.lang3.StringUtils
import org.asynchttpclient.{DefaultAsyncHttpClient, RequestBuilder}

import scala.collection.JavaConversions._

object HttpClient {

  def run(request: Request): CompletableFuture[Response] = {
    val req = new RequestBuilder(request.getMethod)
      .setUrl(request.getPath)
      .setQueryParams(request.getQuery)
    for (header <- request.getHeaders) {
      req.addHeader(header._1, header._2)
    }
    if (request.getBody.isPresent) {
      req.setBody(request.getBody.getValue)
    }

    val asyncHttpClient = new DefaultAsyncHttpClient
    asyncHttpClient.executeRequest(req).toCompletableFuture.thenApply(new java.util.function.Function[org.asynchttpclient.Response, Response] {
      override def apply(res: org.asynchttpclient.Response): Response = {
        val headers = new util.HashMap[String, String]()
        for (name <- res.getHeaders.names()) {
          headers.put(name, res.getHeader(name))
        }
        val contentType = if (StringUtils.isEmpty(res.getContentType))
          org.apache.http.entity.ContentType.APPLICATION_JSON
        else
          org.apache.http.entity.ContentType.parse(res.getContentType)
        val charset = if (contentType.getCharset == null) Charset.forName("UTF-8") else contentType.getCharset
        val body = if (res.hasResponseBody) {
          OptionalBody.body(res.getResponseBody(charset))
        } else {
          OptionalBody.empty()
        }
        new Response(res.getStatusCode, headers, body)
      }
    })
  }
}




© 2015 - 2024 Weber Informatics LLC | Privacy Policy