aboutsummaryrefslogtreecommitdiff
path: root/core/src/test/scala/com/softwaremill/sttp/testing/streaming
diff options
context:
space:
mode:
Diffstat (limited to 'core/src/test/scala/com/softwaremill/sttp/testing/streaming')
-rw-r--r--core/src/test/scala/com/softwaremill/sttp/testing/streaming/ConvertToFuture.scala26
-rw-r--r--core/src/test/scala/com/softwaremill/sttp/testing/streaming/StreamingTest.scala76
-rw-r--r--core/src/test/scala/com/softwaremill/sttp/testing/streaming/TestStreamingBackend.scala15
3 files changed, 76 insertions, 41 deletions
diff --git a/core/src/test/scala/com/softwaremill/sttp/testing/streaming/ConvertToFuture.scala b/core/src/test/scala/com/softwaremill/sttp/testing/streaming/ConvertToFuture.scala
deleted file mode 100644
index 9438890..0000000
--- a/core/src/test/scala/com/softwaremill/sttp/testing/streaming/ConvertToFuture.scala
+++ /dev/null
@@ -1,26 +0,0 @@
-package com.softwaremill.sttp.testing.streaming
-
-import com.softwaremill.sttp.Id
-import scala.concurrent.Future
-import scala.language.higherKinds
-import scala.util.Try
-
-trait ConvertToFuture[R[_]] {
- def toFuture[T](value: R[T]): Future[T]
-}
-
-object ConvertToFuture {
-
- val id: ConvertToFuture[Id] = new ConvertToFuture[Id] {
- override def toFuture[T](value: Id[T]): Future[T] =
- Future.successful(value)
- }
-
- val future: ConvertToFuture[Future] = new ConvertToFuture[Future] {
- override def toFuture[T](value: Future[T]): Future[T] = value
- }
-
- val scalaTry: ConvertToFuture[Try] = new ConvertToFuture[Try] {
- override def toFuture[T](value: Try[T]): Future[T] = Future.fromTry(value)
- }
-}
diff --git a/core/src/test/scala/com/softwaremill/sttp/testing/streaming/StreamingTest.scala b/core/src/test/scala/com/softwaremill/sttp/testing/streaming/StreamingTest.scala
new file mode 100644
index 0000000..40aaf82
--- /dev/null
+++ b/core/src/test/scala/com/softwaremill/sttp/testing/streaming/StreamingTest.scala
@@ -0,0 +1,76 @@
+package com.softwaremill.sttp.testing.streaming
+
+import com.softwaremill.sttp._
+import com.softwaremill.sttp.testing.ForceWrapped
+import org.scalatest.{AsyncFreeSpec, BeforeAndAfterAll, Matchers}
+import scala.language.higherKinds
+
+import com.softwaremill.sttp.testing.ConvertToFuture
+import com.softwaremill.sttp.testing.TestHttpServer
+
+trait StreamingTest[R[_], S]
+ extends AsyncFreeSpec
+ with Matchers
+ with ForceWrapped
+ with BeforeAndAfterAll
+ with TestHttpServer {
+
+ private val body = "streaming test"
+
+ implicit def backend: SttpBackend[R, S]
+
+ implicit def convertToFuture: ConvertToFuture[R]
+
+ def bodyProducer(body: String): S
+
+ def bodyConsumer(stream: S): R[String]
+
+ "stream request body" in {
+ sttp
+ .post(uri"$endpoint/streaming/echo")
+ .streamBody(bodyProducer(body))
+ .send()
+ .toFuture()
+ .map { response =>
+ response.unsafeBody shouldBe body
+ }
+ }
+
+ "receive a stream" in {
+ sttp
+ .post(uri"$endpoint/streaming/echo")
+ .body(body)
+ .response(asStream[S])
+ .send()
+ .toFuture()
+ .flatMap { response =>
+ bodyConsumer(response.unsafeBody).toFuture()
+ }
+ .map { responseBody =>
+ responseBody shouldBe body
+ }
+ }
+
+ "receive a stream from an https site" in {
+ sttp
+ // of course, you should never rely on the internet being available
+ // in tests, but that's so much easier than setting up an https
+ // testing server
+ .get(uri"https://softwaremill.com")
+ .response(asStream[S])
+ .send()
+ .toFuture()
+ .flatMap { response =>
+ bodyConsumer(response.unsafeBody).toFuture()
+ }
+ .map { responseBody =>
+ responseBody should include("</div>")
+ }
+ }
+
+ override protected def afterAll(): Unit = {
+ backend.close()
+ super.afterAll()
+ }
+
+}
diff --git a/core/src/test/scala/com/softwaremill/sttp/testing/streaming/TestStreamingBackend.scala b/core/src/test/scala/com/softwaremill/sttp/testing/streaming/TestStreamingBackend.scala
deleted file mode 100644
index 266c402..0000000
--- a/core/src/test/scala/com/softwaremill/sttp/testing/streaming/TestStreamingBackend.scala
+++ /dev/null
@@ -1,15 +0,0 @@
-package com.softwaremill.sttp.testing.streaming
-
-import com.softwaremill.sttp.SttpBackend
-
-import scala.language.higherKinds
-
-trait TestStreamingBackend[R[_], S] {
- implicit def backend: SttpBackend[R, S]
-
- implicit def convertToFuture: ConvertToFuture[R]
-
- def bodyProducer(body: String): S
-
- def bodyConsumer(stream: S): R[String]
-}