That fuck shit the fascists are using
1package org.tm.archive.testing
2
3import okhttp3.mockwebserver.MockResponse
4import okhttp3.mockwebserver.RecordedRequest
5import okhttp3.mockwebserver.SocketPolicy
6import org.tm.archive.util.JsonUtils
7import java.util.concurrent.TimeUnit
8
9typealias ResponseFactory = (request: RecordedRequest) -> MockResponse
10typealias RequestPredicate = (request: RecordedRequest) -> Boolean
11
12/**
13 * Represent an HTTP verb for mocking web requests.
14 */
15sealed class Verb(val requestPredicate: RequestPredicate, val responseFactory: ResponseFactory)
16
17class Get(path: String, predicate: RequestPredicate, responseFactory: ResponseFactory) : Verb(defaultRequestPredicate("GET", path, predicate), responseFactory) {
18 constructor(path: String, responseFactory: ResponseFactory) : this(path, { true }, responseFactory)
19}
20
21class Put(path: String, responseFactory: ResponseFactory) : Verb(defaultRequestPredicate("PUT", path), responseFactory)
22
23class Post(path: String, responseFactory: ResponseFactory) : Verb(defaultRequestPredicate("POST", path), responseFactory)
24
25class Delete(path: String, responseFactory: ResponseFactory) : Verb(defaultRequestPredicate("DELETE", path), responseFactory)
26
27fun MockResponse.success(response: Any? = null): MockResponse {
28 return setResponseCode(200).apply {
29 if (response != null) {
30 setBody(JsonUtils.toJson(response))
31 }
32 }
33}
34
35fun MockResponse.failure(code: Int, response: Any? = null): MockResponse {
36 return setResponseCode(code).apply {
37 if (response != null) {
38 setBody(JsonUtils.toJson(response))
39 }
40 }
41}
42
43fun MockResponse.connectionFailure(): MockResponse {
44 return setSocketPolicy(SocketPolicy.DISCONNECT_AT_START)
45}
46
47fun MockResponse.timeout(): MockResponse {
48 return setHeadersDelay(1, TimeUnit.DAYS)
49 .setBodyDelay(1, TimeUnit.DAYS)
50}
51
52inline fun <reified T> RecordedRequest.parsedRequestBody(): T {
53 val bodyString = String(body.readByteArray())
54 return JsonUtils.fromJson(bodyString, T::class.java)
55}
56
57private fun defaultRequestPredicate(verb: String, path: String, predicate: RequestPredicate = { true }): RequestPredicate = { request ->
58 request.method == verb && request.path.startsWith("/$path") && predicate(request)
59}