Coverage Summary for Class: FakeFailureHttpClientCallKt (com.javiersc.network.either.ktor._internal)
Class |
Method, %
|
Branch, %
|
Line, %
|
Instruction, %
|
FakeFailureHttpClientCallKt |
100%
(3/3)
|
50%
(2/4)
|
95%
(19/20)
|
95.3%
(82/86)
|
FakeFailureHttpClientCallKt$fakeHttpFailureClientCall$call$1 |
50%
(1/2)
|
|
91.7%
(11/12)
|
96.4%
(54/56)
|
FakeFailureHttpClientCallKt$fakeLocalFailureClientCall$call$1 |
50%
(1/2)
|
|
91.7%
(11/12)
|
96.4%
(54/56)
|
Total |
71.4%
(5/7)
|
50%
(2/4)
|
93.2%
(41/44)
|
96%
(190/198)
|
package com.javiersc.network.either.ktor._internal
import io.ktor.client.HttpClient
import io.ktor.client.call.HttpClientCall
import io.ktor.client.request.DefaultHttpRequest
import io.ktor.client.request.HttpRequestBuilder
import io.ktor.client.request.HttpRequestData
import io.ktor.client.request.HttpResponseData
import io.ktor.client.request.setBody
import io.ktor.client.statement.DefaultHttpResponse
import io.ktor.http.HttpProtocolVersion
import io.ktor.http.content.OutgoingContent
import io.ktor.util.AttributeKey
import io.ktor.util.date.GMTDate
import io.ktor.util.pipeline.PipelineContext
import io.ktor.util.toMap
import io.ktor.utils.io.ByteReadChannel
internal fun PipelineContext<Any, HttpRequestBuilder>.fakeHttpFailureClientCall(
client: HttpClient
): HttpClientCall {
val responseData: HttpResponseData = failureHttpResponseData(RemoteErrorOutgoing)
val call: HttpClientCall =
object : HttpClientCall(client) {
val httpRequestData: HttpRequestData =
HttpRequestBuilder()
.apply {
setBody(RemoteErrorOutgoing)
attributes.put(AttributeKey("ExpectSuccessAttributeKey"), false)
}
.build()
init {
request = DefaultHttpRequest(this, httpRequestData)
response = DefaultHttpResponse(this, responseData)
}
}
return call
}
internal fun PipelineContext<Any, HttpRequestBuilder>.fakeLocalFailureClientCall(
client: HttpClient
): HttpClientCall {
val responseData: HttpResponseData = failureHttpResponseData(LocalErrorOutgoing)
val call: HttpClientCall =
object : HttpClientCall(client) {
val httpRequestData: HttpRequestData =
HttpRequestBuilder()
.apply {
setBody(LocalErrorOutgoing)
attributes.put(AttributeKey("ExpectSuccessAttributeKey"), false)
}
.build()
init {
request = DefaultHttpRequest(this, httpRequestData)
response = DefaultHttpResponse(this, responseData)
}
}
return call
}
internal fun PipelineContext<Any, HttpRequestBuilder>.failureHttpResponseData(
outgoingContent: OutgoingContent
): HttpResponseData {
val status = outgoingContent.status
checkNotNull(status) { "Status must not be null and this should not be happening" }
val headers = outgoingContent.headers
check(headers.toMap().keys.contains("NetworkEither")) {
"Headers must contain `NetworkEither` key and this should not be happening"
}
return HttpResponseData(
statusCode = status,
requestTime = GMTDate(),
headers = outgoingContent.headers,
version = HttpProtocolVersion.HTTP_1_1,
body = ByteReadChannel("".toByteArray(Charsets.UTF_8)),
callContext = context.executionContext,
)
}