aboutsummaryrefslogtreecommitdiff
path: root/tests/src/test/scala/com
diff options
context:
space:
mode:
authoradamw <adam@warski.org>2017-08-29 12:59:00 +0200
committeradamw <adam@warski.org>2017-08-29 12:59:00 +0200
commit75a010d974aac96e8c96d34e38590c219cdca900 (patch)
tree4b42f6c996b4ac5c69e5a57a63c9d4fe7fa2dc79 /tests/src/test/scala/com
parentd30fb75be34d1bbf7a13a43ca4a4ebbb633ab74d (diff)
downloadsttp-75a010d974aac96e8c96d34e38590c219cdca900.tar.gz
sttp-75a010d974aac96e8c96d34e38590c219cdca900.tar.bz2
sttp-75a010d974aac96e8c96d34e38590c219cdca900.zip
Multipart support in Akka handler
Diffstat (limited to 'tests/src/test/scala/com')
-rw-r--r--tests/src/test/scala/com/softwaremill/sttp/BasicTests.scala34
1 files changed, 34 insertions, 0 deletions
diff --git a/tests/src/test/scala/com/softwaremill/sttp/BasicTests.scala b/tests/src/test/scala/com/softwaremill/sttp/BasicTests.scala
index 9b64271..b2918fa 100644
--- a/tests/src/test/scala/com/softwaremill/sttp/BasicTests.scala
+++ b/tests/src/test/scala/com/softwaremill/sttp/BasicTests.scala
@@ -12,6 +12,7 @@ import akka.http.scaladsl.model.headers.CacheDirectives._
import akka.http.scaladsl.server.Directives._
import akka.http.scaladsl.server.Route
import akka.http.scaladsl.server.directives.Credentials
+import akka.util.ByteString
import com.softwaremill.sttp.akkahttp.AkkaHttpSttpHandler
import com.typesafe.scalalogging.StrictLogging
import org.scalatest.concurrent.{IntegrationPatience, ScalaFutures}
@@ -26,6 +27,7 @@ import com.softwaremill.sttp.okhttp.{
OkHttpFutureClientHandler,
OkHttpSyncClientHandler
}
+import scala.concurrent.ExecutionContext.Implicits.global
import scala.language.higherKinds
@@ -136,6 +138,20 @@ class BasicTests
} ~ path("text") {
getFromFile(textFile)
}
+ } ~ pathPrefix("multipart") {
+ entity(as[akka.http.scaladsl.model.Multipart.FormData]) { fd =>
+ complete {
+ fd.parts
+ .mapAsync(1) { p =>
+ val fv = p.entity.dataBytes.runFold(ByteString())(_ ++ _)
+ fv.map(_.utf8String)
+ .map(v =>
+ p.name + "=" + v + p.filename.fold("")(fn => s" ($fn)"))
+ }
+ .runFold(Vector.empty[String])(_ :+ _)
+ .map(v => v.mkString(", "))
+ }
+ }
}
override def port = 51823
@@ -184,6 +200,7 @@ class BasicTests
authTests()
compressionTests()
downloadFileTests()
+// multipartTests()
def parseResponseTests(): Unit = {
name should "parse response as string" in {
@@ -515,6 +532,23 @@ class BasicTests
path.toFile should haveSameContentAs(textFile)
}
}
+
+ def multipartTests(): Unit = {
+ val mp = sttp.post(uri"$endpoint/multipart")
+
+ name should "send a multipart message" in {
+ val req = mp.multipartBody(multipart("p1", "v1"), multipart("p2", "v2"))
+ val resp = req.send().force()
+ resp.body should be("p1=v1, p2=v2")
+ }
+
+ name should "send a multipart message with filenames" in {
+ val req = mp.multipartBody(multipart("p1", "v1").fileName("f1"),
+ multipart("p2", "v2").fileName("f2"))
+ val resp = req.send().force()
+ resp.body should be("p1=v1 (f1), p2=v2 (f2)")
+ }
+ }
}
override protected def afterAll(): Unit = {