Skip to content

Commit 171f552

Browse files
authored
Tidied up WebServerRule. (#414)
* Tidied up WebServerRule. * Broke down WebServerStatement#evaluate down into private functions.
1 parent d7b2c12 commit 171f552

File tree

1 file changed

+42
-41
lines changed
  • architecture/instrumentation-test/src/main/java/com/mitteloupe/whoami/test/rule

1 file changed

+42
-41
lines changed
Lines changed: 42 additions & 41 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,7 @@
11
package com.mitteloupe.whoami.test.rule
22

33
import com.mitteloupe.whoami.test.annotation.ServerRequestResponse
4+
import com.mitteloupe.whoami.test.server.MockRequest
45
import com.mitteloupe.whoami.test.server.ResponseBinder
56
import com.mitteloupe.whoami.test.server.ResponseStore
67
import org.junit.rules.TestRule
@@ -12,54 +13,54 @@ class WebServerRule(
1213
private val lazyResponseStore: Lazy<ResponseStore>
1314
) : TestRule {
1415
override fun apply(base: Statement, description: Description): Statement =
15-
WebServerInitializationStatement(
16-
lazyMockDispatcher,
17-
lazyResponseStore,
18-
base,
19-
description
20-
)
16+
WebServerStatement(lazyMockDispatcher, lazyResponseStore, base, description)
17+
}
2118

22-
private class WebServerInitializationStatement(
23-
private val lazyMockDispatcher: Lazy<ResponseBinder>,
24-
private val lazyResponseStore: Lazy<ResponseStore>,
25-
private val base: Statement,
26-
private val description: Description
27-
) : Statement() {
28-
val responseStore by lazy { lazyResponseStore.value }
29-
val mockDispatcher by lazy { lazyMockDispatcher.value }
19+
private class WebServerStatement(
20+
private val lazyMockDispatcher: Lazy<ResponseBinder>,
21+
private val lazyResponseStore: Lazy<ResponseStore>,
22+
private val base: Statement,
23+
private val description: Description
24+
) : Statement() {
25+
val responseStore by lazy { lazyResponseStore.value }
26+
val mockDispatcher by lazy { lazyMockDispatcher.value }
3027

31-
override fun evaluate() {
32-
val requestResponses = description.requestResponseIds()
33-
.map { requestResponseId ->
34-
responseStore.responseFactories[requestResponseId]
35-
?: throw IllegalArgumentException(
36-
"Request/Response ID $requestResponseId not found."
37-
)
38-
}
28+
override fun evaluate() {
29+
mockDispatcher.testName = description.displayName
30+
val stubbedResponseKeys = bindRequestResponseFactories()
31+
base.evaluate()
32+
assertAllStubsUsed(stubbedResponseKeys)
33+
mockDispatcher.reset()
34+
}
3935

40-
mockDispatcher.testName = description.displayName
41-
requestResponses.forEach { requestResponse ->
42-
mockDispatcher.bindResponse(requestResponse)
36+
private fun bindRequestResponseFactories(): Set<MockRequest> {
37+
val requestResponses = description.requestResponseIds()
38+
.map { requestResponseId ->
39+
requireNotNull(
40+
responseStore.responseFactories[requestResponseId]
41+
) { "Request/Response ID $requestResponseId not found." }
4342
}
44-
val stubbedResponseKeys = requestResponses
45-
.map { requestResponse -> requestResponse.request }
46-
.toSet()
47-
48-
base.evaluate()
4943

50-
val usedResponseKeys = mockDispatcher.usedEndpoints.toSet()
44+
requestResponses.forEach { requestResponse ->
45+
mockDispatcher.bindResponse(requestResponse)
46+
}
47+
val stubbedResponseKeys = requestResponses
48+
.map { requestResponse -> requestResponse.request }
49+
.toSet()
50+
return stubbedResponseKeys
51+
}
5152

52-
val unusedResponseKeys = stubbedResponseKeys - usedResponseKeys
53-
check(unusedResponseKeys.isEmpty()) {
54-
"${unusedResponseKeys.size} unused stubbed URLs:\n[" +
55-
unusedResponseKeys.joinToString("]\n[") + "]"
56-
}
53+
private fun assertAllStubsUsed(stubbedResponseKeys: Set<MockRequest>) {
54+
val usedResponseKeys = mockDispatcher.usedEndpoints.toSet()
5755

58-
mockDispatcher.reset()
56+
val unusedResponseKeys = stubbedResponseKeys - usedResponseKeys
57+
check(unusedResponseKeys.isEmpty()) {
58+
"${unusedResponseKeys.size} unused stubbed URLs:\n[" +
59+
unusedResponseKeys.joinToString("]\n[") + "]"
5960
}
60-
61-
private fun Description.requestResponseIds() =
62-
annotations.filterIsInstance<ServerRequestResponse>()
63-
.flatMap { serverResponse -> serverResponse.requestResponseIds.toList() }
6461
}
62+
63+
private fun Description.requestResponseIds() =
64+
annotations.filterIsInstance<ServerRequestResponse>()
65+
.flatMap { serverResponse -> serverResponse.requestResponseIds.toList() }
6566
}

0 commit comments

Comments
 (0)