1
1
package com.mitteloupe.whoami.test.rule
2
2
3
3
import com.mitteloupe.whoami.test.annotation.ServerRequestResponse
4
+ import com.mitteloupe.whoami.test.server.MockRequest
4
5
import com.mitteloupe.whoami.test.server.ResponseBinder
5
6
import com.mitteloupe.whoami.test.server.ResponseStore
6
7
import org.junit.rules.TestRule
@@ -12,54 +13,54 @@ class WebServerRule(
12
13
private val lazyResponseStore : Lazy <ResponseStore >
13
14
) : TestRule {
14
15
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
+ }
21
18
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 }
30
27
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
+ }
39
35
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." }
43
42
}
44
- val stubbedResponseKeys = requestResponses
45
- .map { requestResponse -> requestResponse.request }
46
- .toSet()
47
-
48
- base.evaluate()
49
43
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
+ }
51
52
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()
57
55
58
- mockDispatcher.reset()
56
+ val unusedResponseKeys = stubbedResponseKeys - usedResponseKeys
57
+ check(unusedResponseKeys.isEmpty()) {
58
+ " ${unusedResponseKeys.size} unused stubbed URLs:\n [" +
59
+ unusedResponseKeys.joinToString(" ]\n [" ) + " ]"
59
60
}
60
-
61
- private fun Description.requestResponseIds () =
62
- annotations.filterIsInstance<ServerRequestResponse >()
63
- .flatMap { serverResponse -> serverResponse.requestResponseIds.toList() }
64
61
}
62
+
63
+ private fun Description.requestResponseIds () =
64
+ annotations.filterIsInstance<ServerRequestResponse >()
65
+ .flatMap { serverResponse -> serverResponse.requestResponseIds.toList() }
65
66
}
0 commit comments