11package com.mitteloupe.whoami.test.rule
22
33import com.mitteloupe.whoami.test.annotation.ServerRequestResponse
4+ import com.mitteloupe.whoami.test.server.MockRequest
45import com.mitteloupe.whoami.test.server.ResponseBinder
56import com.mitteloupe.whoami.test.server.ResponseStore
67import 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