That fuck shit the fascists are using
at master 59 lines 2.2 kB view raw
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}