aboutsummaryrefslogtreecommitdiff
path: root/core/src/test/scala/com/softwaremill/sttp/testing/ForceWrapped.scala
blob: f73833fa14f8908bacc0c2559b59f4ce44928edd (plain) (blame)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
package com.softwaremill.sttp.testing

import org.scalatest.Suite
import org.scalatest.concurrent.{PatienceConfiguration, ScalaFutures}
import org.scalatest.exceptions.TestFailedException

import scala.concurrent.Future
import scala.concurrent.duration._
import scala.language.higherKinds

trait ForceWrapped extends ScalaFutures with TestingPatience { this: Suite =>

  implicit class ForceDecorator[R[_], T](wrapped: R[T]) {
    def toFuture()(implicit ctf: ConvertToFuture[R]): Future[T] =
      ctf.toFuture(wrapped)

    def force()(implicit ctf: ConvertToFuture[R]): T = {
      try {
        ctf.toFuture(wrapped).futureValue
      } catch {
        case e: TestFailedException if e.getCause != null => throw e.getCause
      }
    }
  }
}

trait TestingPatience extends PatienceConfiguration {
  override implicit val patienceConfig: PatienceConfig =
    PatienceConfig(timeout = 5.seconds, interval = 150.milliseconds)
}