Skip to content

Commit f8943ef

Browse files
committed
migrate to scalatest
1 parent 89cda71 commit f8943ef

27 files changed

+658
-655
lines changed

.github/workflows/build-test.yml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -39,7 +39,7 @@ jobs:
3939
with:
4040
java: 17, 11
4141
scala: 2.13.x, 3.x
42-
cmd: sbt ++$MATRIX_SCALA 'testOnly -- xonly timefactor 5'
42+
cmd: sbt ++$MATRIX_SCALA test
4343

4444
finish:
4545
name: Finish

integration-tests/src/test/java/play/libs/ws/ahc/AhcCurlRequestLoggerSpec.scala

Lines changed: 43 additions & 35 deletions
Original file line numberDiff line numberDiff line change
@@ -5,9 +5,8 @@
55
package play.libs.ws.ahc
66

77
import akka.http.scaladsl.server.Route
8-
import org.specs2.concurrent.ExecutionEnv
9-
import org.specs2.concurrent.FutureAwait
10-
import org.specs2.mutable.Specification
8+
import org.scalatest.concurrent.ScalaFutures
9+
import org.scalatest.wordspec.AnyWordSpec
1110
import play.AkkaServerProvider
1211
import play.libs.ws.DefaultBodyWritables
1312
import play.libs.ws.DefaultWSCookie
@@ -20,11 +19,11 @@ import uk.org.lidalia.slf4jtest.TestLoggerFactory
2019
import scala.jdk.CollectionConverters._
2120
import scala.jdk.FutureConverters._
2221

23-
class AhcCurlRequestLoggerSpec(implicit val executionEnv: ExecutionEnv)
24-
extends Specification
22+
class AhcCurlRequestLoggerSpec
23+
extends AnyWordSpec
2524
with AkkaServerProvider
2625
with StandaloneWSClientSupport
27-
with FutureAwait
26+
with ScalaFutures
2827
with DefaultBodyWritables {
2928

3029
override def routes: Route = {
@@ -53,9 +52,9 @@ class AhcCurlRequestLoggerSpec(implicit val executionEnv: ExecutionEnv)
5352
.setRequestFilter(curlRequestLogger)
5453
.get()
5554
.asScala
56-
.awaitFor(defaultTimeout)
55+
.futureValue
5756

58-
testLogger.getLoggingEvents.asScala.map(_.getMessage) must containMatch("--verbose")
57+
assert(testLogger.getLoggingEvents.asScala.map(_.getMessage).exists(_.contains("--verbose")))
5958
}
6059

6160
"add all headers" in withClient() { client =>
@@ -68,11 +67,11 @@ class AhcCurlRequestLoggerSpec(implicit val executionEnv: ExecutionEnv)
6867
.setRequestFilter(curlRequestLogger)
6968
.get()
7069
.asScala
71-
.awaitFor(defaultTimeout)
70+
.futureValue
7271

7372
val messages = testLogger.getLoggingEvents.asScala.map(_.getMessage)
7473

75-
messages must containMatch("--header 'My-Header: My-Header-Value'")
74+
assert(messages.exists(_.contains("--header 'My-Header: My-Header-Value'")))
7675
}
7776

7877
"add all cookies" in withClient() { client =>
@@ -85,11 +84,11 @@ class AhcCurlRequestLoggerSpec(implicit val executionEnv: ExecutionEnv)
8584
.setRequestFilter(curlRequestLogger)
8685
.get()
8786
.asScala
88-
.awaitFor(defaultTimeout)
87+
.futureValue
8988

9089
val messages = testLogger.getLoggingEvents.asScala.map(_.getMessage)
9190

92-
messages must containMatch("""--cookie 'cookie1=value1'""")
91+
assert(messages.exists(_.contains("""--cookie 'cookie1=value1'""")))
9392
}
9493

9594
"add method" in withClient() { client =>
@@ -101,9 +100,11 @@ class AhcCurlRequestLoggerSpec(implicit val executionEnv: ExecutionEnv)
101100
.setRequestFilter(curlRequestLogger)
102101
.get()
103102
.asScala
104-
.awaitFor(defaultTimeout)
103+
.futureValue
105104

106-
testLogger.getLoggingEvents.asScala.map(_.getMessage) must containMatch("--request GET")
105+
assert(
106+
testLogger.getLoggingEvents.asScala.map(_.getMessage).exists(_.contains("--request GET"))
107+
)
107108
}
108109

109110
"add authorization header" in withClient() { client =>
@@ -116,14 +117,20 @@ class AhcCurlRequestLoggerSpec(implicit val executionEnv: ExecutionEnv)
116117
.setRequestFilter(curlRequestLogger)
117118
.get()
118119
.asScala
119-
.awaitFor(defaultTimeout)
120-
121-
testLogger.getLoggingEvents.asScala.map(_.getMessage) must containMatch(
122-
"""--header 'Authorization: Basic dXNlcm5hbWU6cGFzc3dvcmQ='"""
120+
.futureValue
121+
122+
assert(
123+
testLogger.getLoggingEvents.asScala
124+
.map(_.getMessage)
125+
.exists(
126+
_.contains(
127+
"""--header 'Authorization: Basic dXNlcm5hbWU6cGFzc3dvcmQ='"""
128+
)
129+
)
123130
)
124131
}
125132

126-
"handle body" in {
133+
"handle body" should {
127134

128135
"add when in memory" in withClient() { client =>
129136
val testLogger = createTestLogger
@@ -135,9 +142,9 @@ class AhcCurlRequestLoggerSpec(implicit val executionEnv: ExecutionEnv)
135142
.setRequestFilter(curlRequestLogger)
136143
.get()
137144
.asScala
138-
.awaitFor(defaultTimeout)
145+
.futureValue
139146

140-
testLogger.getLoggingEvents.asScala.map(_.getMessage) must containMatch("the-body")
147+
assert(testLogger.getLoggingEvents.asScala.map(_.getMessage).exists(_.contains("the-body")))
141148
}
142149

143150
"do nothing for empty bodies" in withClient() { client =>
@@ -150,9 +157,9 @@ class AhcCurlRequestLoggerSpec(implicit val executionEnv: ExecutionEnv)
150157
.setRequestFilter(curlRequestLogger)
151158
.get()
152159
.asScala
153-
.awaitFor(defaultTimeout)
160+
.futureValue
154161

155-
testLogger.getLoggingEvents.asScala.map(_.getMessage) must not containMatch "--data"
162+
assert(testLogger.getLoggingEvents.asScala.map(_.getMessage).forall(!_.contains("--data")))
156163
}
157164
}
158165

@@ -168,18 +175,19 @@ class AhcCurlRequestLoggerSpec(implicit val executionEnv: ExecutionEnv)
168175
.setRequestFilter(curlRequestLogger)
169176
.get()
170177
.asScala
171-
.awaitFor(defaultTimeout)
172-
173-
testLogger.getLoggingEvents.get(0).getMessage must beEqualTo(
174-
s"""
175-
|curl \\
176-
| --verbose \\
177-
| --request GET \\
178-
| --header 'Authorization: Basic dXNlcm5hbWU6cGFzc3dvcmQ=' \\
179-
| --header 'content-type: text/plain' \\
180-
| --header 'My-Header: My-Header-Value' \\
181-
| --data 'the-body' \\
182-
| 'http://localhost:$testServerPort/'
178+
.futureValue
179+
180+
assert(
181+
testLogger.getLoggingEvents.get(0).getMessage ==
182+
s"""
183+
|curl \\
184+
| --verbose \\
185+
| --request GET \\
186+
| --header 'Authorization: Basic dXNlcm5hbWU6cGFzc3dvcmQ=' \\
187+
| --header 'content-type: text/plain' \\
188+
| --header 'My-Header: My-Header-Value' \\
189+
| --data 'the-body' \\
190+
| 'http://localhost:$testServerPort/'
183191
""".stripMargin.trim
184192
)
185193
}

integration-tests/src/test/java/play/libs/ws/ahc/StandaloneWSClientSupport.scala

Lines changed: 2 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -5,7 +5,6 @@
55
package play.libs.ws.ahc
66

77
import akka.stream.Materializer
8-
import org.specs2.execute.Result
98
import play.api.libs.ws.ahc.AhcConfigBuilder
109
import play.api.libs.ws.ahc.AhcWSClientConfig
1110
import play.api.libs.ws.ahc.{ AhcWSClientConfigFactory => ScalaAhcWSClientConfigFactory }
@@ -15,9 +14,9 @@ trait StandaloneWSClientSupport {
1514

1615
def materializer: Materializer
1716

18-
def withClient(
17+
def withClient[A](
1918
config: AhcWSClientConfig = ScalaAhcWSClientConfigFactory.forConfig()
20-
)(block: StandaloneAhcWSClient => Result): Result = {
19+
)(block: StandaloneAhcWSClient => A): A = {
2120
val asyncHttpClient = new DefaultAsyncHttpClient(new AhcConfigBuilder(config).build())
2221
val client = new StandaloneAhcWSClient(asyncHttpClient, materializer)
2322
try {

integration-tests/src/test/scala/play/AkkaServerProvider.scala

Lines changed: 14 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -7,25 +7,29 @@ package play
77
import akka.actor.ActorSystem
88
import akka.http.scaladsl.Http
99
import akka.http.scaladsl.server.Route
10-
import org.specs2.concurrent.ExecutionEnv
11-
import org.specs2.specification.BeforeAfterAll
1210

1311
import scala.concurrent.duration._
1412
import scala.concurrent.Await
13+
import scala.concurrent.ExecutionContext
1514
import scala.concurrent.Future
1615
import akka.stream.Materializer
16+
import org.scalatest.BeforeAndAfterAll
17+
import org.scalatest.Suite
18+
import org.scalatest.concurrent.ScalaFutures
19+
import org.scalatest.time.Millis
20+
import org.scalatest.time.Span
1721

18-
trait AkkaServerProvider extends BeforeAfterAll {
22+
trait AkkaServerProvider extends BeforeAndAfterAll with ScalaFutures { self: Suite =>
23+
24+
implicit override def patienceConfig: PatienceConfig =
25+
PatienceConfig(Span(5000, Millis))
1926

2027
/**
2128
* @return Routes to be used by the test.
2229
*/
2330
def routes: Route
2431

25-
/**
26-
* The execution context environment.
27-
*/
28-
def executionEnv: ExecutionEnv
32+
protected implicit def executionContext: ExecutionContext = ExecutionContext.global
2933

3034
var testServerPort: Int = _
3135
val defaultTimeout: FiniteDuration = 5.seconds
@@ -41,13 +45,13 @@ trait AkkaServerProvider extends BeforeAfterAll {
4145
}
4246

4347
override def beforeAll(): Unit = {
44-
val portFuture = futureServer.map(_.localAddress.getPort)(executionEnv.executionContext)
45-
portFuture.foreach(port => testServerPort = port)(executionEnv.executionContext)
48+
val portFuture = futureServer.map(_.localAddress.getPort)(executionContext)
49+
portFuture.foreach(port => testServerPort = port)(executionContext)
4650
Await.ready(portFuture, defaultTimeout)
4751
}
4852

4953
override def afterAll(): Unit = {
50-
futureServer.foreach(_.unbind())(executionEnv.executionContext)
54+
futureServer.foreach(_.unbind())(executionContext)
5155
val terminate = system.terminate()
5256
Await.ready(terminate, defaultTimeout)
5357
}

0 commit comments

Comments
 (0)