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
@@ -25,32 +26,38 @@ private class WebServerStatement(
2526 val mockDispatcher by lazy { lazyMockDispatcher.value }
2627
2728 override fun evaluate () {
29+ mockDispatcher.testName = description.displayName
30+ val stubbedResponseKeys = bindRequestResponseFactories()
31+ base.evaluate()
32+ assertAllStubsUsed(stubbedResponseKeys)
33+ mockDispatcher.reset()
34+ }
35+
36+ private fun bindRequestResponseFactories (): Set <MockRequest > {
2837 val requestResponses = description.requestResponseIds()
2938 .map { requestResponseId ->
3039 requireNotNull(
3140 responseStore.responseFactories[requestResponseId]
3241 ) { " Request/Response ID $requestResponseId not found." }
3342 }
3443
35- mockDispatcher.testName = description.displayName
3644 requestResponses.forEach { requestResponse ->
3745 mockDispatcher.bindResponse(requestResponse)
3846 }
3947 val stubbedResponseKeys = requestResponses
4048 .map { requestResponse -> requestResponse.request }
4149 .toSet()
50+ return stubbedResponseKeys
51+ }
4252
43- base.evaluate()
44-
53+ private fun assertAllStubsUsed (stubbedResponseKeys : Set <MockRequest >) {
4554 val usedResponseKeys = mockDispatcher.usedEndpoints.toSet()
4655
4756 val unusedResponseKeys = stubbedResponseKeys - usedResponseKeys
4857 check(unusedResponseKeys.isEmpty()) {
4958 " ${unusedResponseKeys.size} unused stubbed URLs:\n [" +
5059 unusedResponseKeys.joinToString(" ]\n [" ) + " ]"
5160 }
52-
53- mockDispatcher.reset()
5461 }
5562
5663 private fun Description.requestResponseIds () =
0 commit comments