Skip to content

Commit 44b2621

Browse files
authored
Simplified and polished mock webserver code. (#404)
1 parent 43030a0 commit 44b2621

8 files changed

Lines changed: 30 additions & 33 deletions

File tree

architecture/instrumentation-test/src/main/java/com/mitteloupe/whoami/test/rule/WebServerRule.kt

Lines changed: 7 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -1,30 +1,27 @@
11
package com.mitteloupe.whoami.test.rule
22

33
import com.mitteloupe.whoami.test.annotation.ServerRequestResponse
4-
import com.mitteloupe.whoami.test.server.ResponseDispatcher
4+
import com.mitteloupe.whoami.test.server.ResponseBinder
55
import com.mitteloupe.whoami.test.server.ResponseStore
66
import org.junit.rules.TestRule
77
import org.junit.runner.Description
88
import org.junit.runners.model.Statement
99

1010
class WebServerRule(
11-
private val lazyMockDispatchers: Lazy<Collection<ResponseDispatcher>>,
12-
private val lazyResponseStore: Lazy<ResponseStore>,
13-
private val mockWebServerUrlProvider: () -> String = { "" }
11+
private val lazyMockDispatchers: Lazy<Collection<ResponseBinder>>,
12+
private val lazyResponseStore: Lazy<ResponseStore>
1413
) : TestRule {
1514
override fun apply(base: Statement, description: Description): Statement =
1615
WebServerInitializationStatement(
1716
lazyMockDispatchers,
1817
lazyResponseStore,
19-
mockWebServerUrlProvider,
2018
base,
2119
description
2220
)
2321

2422
private class WebServerInitializationStatement(
25-
private val lazyMockDispatchers: Lazy<Collection<ResponseDispatcher>>,
23+
private val lazyMockDispatchers: Lazy<Collection<ResponseBinder>>,
2624
private val lazyResponseStore: Lazy<ResponseStore>,
27-
private val mockWebServerUrlProvider: () -> String = { "" },
2825
private val base: Statement,
2926
private val description: Description
3027
) : Statement() {
@@ -42,7 +39,7 @@ class WebServerRule(
4239

4340
mockDispatchers.forEach { dispatcher ->
4441
requestResponses.forEach { requestResponse ->
45-
dispatcher.addResponse(requestResponse.request, requestResponse.response)
42+
dispatcher.bindResponse(requestResponse.request, requestResponse.response)
4643
}
4744
}
4845
val stubbedResponseKeys = requestResponses.map { requestResponse ->
@@ -52,7 +49,7 @@ class WebServerRule(
5249
base.evaluate()
5350

5451
val usedResponseKeys = mockDispatchers.flatMap { dispatcher ->
55-
dispatcher.usedResponseKeys
52+
dispatcher.usedEndpoints
5653
}.toSet()
5754

5855
val unusedResponseKeys = stubbedResponseKeys - usedResponseKeys
@@ -61,7 +58,7 @@ class WebServerRule(
6158
unusedResponseKeys.joinToString("]\n[") + "]"
6259
}
6360

64-
mockDispatchers.forEach(ResponseDispatcher::reset)
61+
mockDispatchers.forEach(ResponseBinder::reset)
6562
}
6663

6764
private fun Description.requestResponseIds() =

architecture/instrumentation-test/src/main/java/com/mitteloupe/whoami/test/server/MockDispatcher.kt

Lines changed: 9 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -11,8 +11,8 @@ import okhttp3.mockwebserver.RecordedRequest
1111

1212
class MockDispatcher :
1313
Dispatcher(),
14-
ResponseDispatcher {
15-
override val usedResponseKeys: Set<String>
14+
ResponseBinder {
15+
override val usedEndpoints: Set<String>
1616
field = mutableSetOf<String>()
1717

1818
private val responses = mutableMapOf<String, MockResponseContents>()
@@ -21,18 +21,18 @@ class MockDispatcher :
2121

2222
override var onWebSocketMessage: (String) -> Unit = {}
2323

24-
override fun reset() {
25-
responses.clear()
26-
usedResponseKeys.clear()
24+
override fun bindResponse(request: MockRequest, response: MockResponseContents) {
25+
responses[request.url] = response
2726
}
2827

29-
override fun addResponse(request: MockRequest, response: MockResponseContents) {
30-
responses[request.url] = response
28+
override fun reset() {
29+
responses.clear()
30+
usedEndpoints.clear()
3131
}
3232

3333
override fun dispatch(request: RecordedRequest): MockResponse {
3434
val endPoint = request.path!!.substringBefore("?")
35-
usedResponseKeys.add(endPoint)
35+
usedEndpoints.add(endPoint)
3636
val response = responses[endPoint]?.mockResponse(this) ?: ServerResponse(code = 404)
3737
return if (response.upgradeToWebSocket) {
3838
MockResponse().withWebSocketUpgrade(
@@ -51,7 +51,7 @@ class MockDispatcher :
5151
}
5252
)
5353
} else {
54-
return MockResponse().apply {
54+
MockResponse().apply {
5555
headers = Headers.headersOf(*response.headers.toArray())
5656
}.setResponseCode(response.code)
5757
.setBody(response.body)

architecture/instrumentation-test/src/main/java/com/mitteloupe/whoami/test/server/ResponseDispatcher.kt renamed to architecture/instrumentation-test/src/main/java/com/mitteloupe/whoami/test/server/ResponseBinder.kt

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -2,12 +2,12 @@ package com.mitteloupe.whoami.test.server
22

33
import com.mitteloupe.whoami.test.server.response.MockResponseContents
44

5-
interface ResponseDispatcher {
5+
interface ResponseBinder {
66
var onWebSocketMessage: (String) -> Unit
77

8-
fun reset()
8+
val usedEndpoints: Set<String>
99

10-
fun addResponse(request: MockRequest, response: MockResponseContents)
10+
fun bindResponse(request: MockRequest, response: MockResponseContents)
1111

12-
val usedResponseKeys: Set<String>
12+
fun reset()
1313
}

architecture/instrumentation-test/src/main/java/com/mitteloupe/whoami/test/server/response/ErrorResponse.kt

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,11 +1,11 @@
11
package com.mitteloupe.whoami.test.server.response
22

3-
import com.mitteloupe.whoami.test.server.ResponseDispatcher
3+
import com.mitteloupe.whoami.test.server.ResponseBinder
44
import com.mitteloupe.whoami.test.server.ServerResponse
55

66
sealed class ErrorResponse {
77
object NotFound : MockResponseContents {
8-
override fun mockResponse(responseDispatcher: ResponseDispatcher) = ServerResponse(
8+
override fun mockResponse(responseBinder: ResponseBinder) = ServerResponse(
99
code = 404
1010
)
1111
}
Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,8 +1,8 @@
11
package com.mitteloupe.whoami.test.server.response
22

3-
import com.mitteloupe.whoami.test.server.ResponseDispatcher
3+
import com.mitteloupe.whoami.test.server.ResponseBinder
44
import com.mitteloupe.whoami.test.server.ServerResponse
55

66
interface MockResponseContents {
7-
fun mockResponse(responseDispatcher: ResponseDispatcher): ServerResponse
7+
fun mockResponse(responseBinder: ResponseBinder): ServerResponse
88
}
Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,17 +1,17 @@
11
package com.mitteloupe.whoami.test.server.response
22

3-
import com.mitteloupe.whoami.test.server.ResponseDispatcher
3+
import com.mitteloupe.whoami.test.server.ResponseBinder
44
import com.mitteloupe.whoami.test.server.ServerResponse
55

66
class SequenceResponse(private vararg val mockResponses: MockResponseContents) :
77
MockResponseContents {
88
private var responseIndex = 0
9-
override fun mockResponse(responseDispatcher: ResponseDispatcher): ServerResponse {
9+
override fun mockResponse(responseBinder: ResponseBinder): ServerResponse {
1010
val mockResponse = mockResponses[responseIndex]
1111
responseIndex++
1212
if (responseIndex == mockResponses.size) {
1313
responseIndex = 0
1414
}
15-
return mockResponse.mockResponse(responseDispatcher)
15+
return mockResponse.mockResponse(responseBinder)
1616
}
1717
}

architecture/instrumentation-test/src/main/java/com/mitteloupe/whoami/test/server/response/SimpleResponse.kt

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
package com.mitteloupe.whoami.test.server.response
22

33
import com.mitteloupe.whoami.test.asset.assetReader
4-
import com.mitteloupe.whoami.test.server.ResponseDispatcher
4+
import com.mitteloupe.whoami.test.server.ResponseBinder
55
import com.mitteloupe.whoami.test.server.ServerResponse
66

77
data class SimpleResponse(
@@ -18,7 +18,7 @@ data class SimpleResponse(
1818
}
1919
}
2020

21-
override fun mockResponse(responseDispatcher: ResponseDispatcher) = ServerResponse(
21+
override fun mockResponse(responseBinder: ResponseBinder) = ServerResponse(
2222
code = responseCode,
2323
headers = headers,
2424
body = responseBody

architecture/instrumentation-test/src/main/java/com/mitteloupe/whoami/test/test/BaseTest.kt

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -62,7 +62,7 @@ abstract class BaseTest {
6262
private val webServerRule = WebServerRule(
6363
lazy { listOf(mockDispatcher) },
6464
lazy { responseStore }
65-
) { mockWebServerProvider.serverUrl }
65+
)
6666

6767
private val localStoreRule = LocalStoreRule(
6868
lazy { sharedPreferences },

0 commit comments

Comments
 (0)