Skip to content

Commit

Permalink
Improve Test on Fuel.request, HttpUrlFetcher and fillURLWithParameters
Browse files Browse the repository at this point in the history
  • Loading branch information
iNoles committed May 21, 2024
1 parent 28be807 commit 7a3a7bb
Show file tree
Hide file tree
Showing 10 changed files with 61 additions and 17 deletions.
2 changes: 1 addition & 1 deletion fuel/src/appleMain/kotlin/fuel/HttpUrlFetcher.kt
Original file line number Diff line number Diff line change
Expand Up @@ -43,7 +43,7 @@ internal class HttpUrlFetcher(private val sessionConfiguration: NSURLSessionConf
request.body?.let {
setHTTPBody(it.encode())
}
request.headers?.forEach {
request.headers.forEach {
setValue(it.value, it.key)
}
setCachePolicy(NSURLRequestReloadIgnoringCacheData)
Expand Down
2 changes: 1 addition & 1 deletion fuel/src/commonMain/kotlin/fuel/Fuels.kt
Original file line number Diff line number Diff line change
Expand Up @@ -87,6 +87,6 @@ public suspend fun Fuel.request(convertible: RequestConvertible): HttpResponse {
parameters = request.parameters
method = request.method
body = request.body
headers = request.headers ?: emptyMap()
headers = request.headers
}
}
2 changes: 1 addition & 1 deletion fuel/src/commonMain/kotlin/fuel/Request.kt
Original file line number Diff line number Diff line change
Expand Up @@ -5,7 +5,7 @@ public typealias Parameters = List<Pair<String, String>>
public class Request(
public val url: String,
public val parameters: Parameters?,
public val headers: Map<String, String>?,
public val headers: Map<String, String>,
public val body: String?,
public val method: String?
) {
Expand Down
30 changes: 30 additions & 0 deletions fuel/src/commonTest/kotlin/fuel/ParametersTest.kt
Original file line number Diff line number Diff line change
@@ -0,0 +1,30 @@
package fuel

import kotlin.test.Test
import kotlin.test.assertEquals

class ParametersTest {
@Test
fun parametersWithQuestionMarkOnURL() {
val test = "http://example.com?".fillURLWithParameters(listOf("test" to "url"))
assertEquals("http://example.com?&test=url", test)
}

@Test
fun parametersWithQuestionMarkOnParameter() {
val test = "http://example.com".fillURLWithParameters(listOf("?test" to "url"))
assertEquals("http://example.com?%3Ftest=url", test)
}

@Test
fun parametersWithEmptyParameter() {
val test = "http://example.com".fillURLWithParameters(listOf())
assertEquals("http://example.com?", test)
}

@Test
fun parametersWithQuestionMarkAndEmptyParameter() {
val test = "http://example.com?".fillURLWithParameters(listOf())
assertEquals("http://example.com?", test)
}
}
5 changes: 3 additions & 2 deletions fuel/src/commonTest/kotlin/fuel/RequestTest.kt
Original file line number Diff line number Diff line change
Expand Up @@ -2,14 +2,15 @@ package fuel

import kotlin.test.Test
import kotlin.test.assertEquals
internal class RequestTest {

class RequestTest {
@Test
fun testAdd_headers() {
val request = Request.Builder().apply {
url = "http://example.com"
headers = mapOf("X-Test" to "true")
}.build()
assertEquals("true", request.headers?.get("X-Test"))
assertEquals("true", request.headers["X-Test"])
}

@Test
Expand Down
9 changes: 5 additions & 4 deletions fuel/src/jvmMain/kotlin/fuel/HttpUrlFetcher.kt
Original file line number Diff line number Diff line change
Expand Up @@ -7,10 +7,11 @@ import okhttp3.Request

internal class HttpUrlFetcher(private val callFactory: Lazy<Call.Factory>) {
fun fetch(request: fuel.Request, builder: Request.Builder): Call {
val urlString = request.parameters?.let {
request.url.fillURLWithParameters(it)
} ?: request.url
builder.url(urlString)
if (request.parameters != null) {
builder.url(request.url.fillURLWithParameters(request.parameters))
} else {
builder.url(request.url)
}
return callFactory.value.newCall(builder.build())
}
}
2 changes: 1 addition & 1 deletion fuel/src/jvmMain/kotlin/fuel/JVMHttpLoader.kt
Original file line number Diff line number Diff line change
Expand Up @@ -73,7 +73,7 @@ public class JVMHttpLoader(callFactoryLazy: Lazy<Call.Factory>) : HttpLoader {
private fun createRequestBuilder(request: Request, method: String): Builder {
val builder = Builder()
with(builder) {
request.headers?.forEach {
request.headers.forEach {
addHeader(it.key, it.value)
}

Expand Down
22 changes: 17 additions & 5 deletions fuel/src/jvmTest/kotlin/fuel/HttpLoaderBuilderTest.kt
Original file line number Diff line number Diff line change
Expand Up @@ -13,7 +13,7 @@ import java.net.SocketTimeoutException
import java.util.concurrent.TimeUnit
import kotlin.test.assertNotNull

internal class HttpLoaderBuilderTest {
class HttpLoaderBuilderTest {

private lateinit var mockWebServer: MockWebServer

Expand All @@ -38,9 +38,21 @@ internal class HttpLoaderBuilderTest {
mockWebServer.shutdown()
}

@Test
fun `default okhttp settings with parameter`() = runBlocking {
mockWebServer.enqueue(MockResponse().setBody("Hello World 3"))
val response = JVMHttpLoader().get {
url = mockWebServer.url("hello").toString()
parameters = listOf("foo" to "bar")
}.body.string()
assertEquals("Hello World 3", response)

mockWebServer.shutdown()
}

@Test
fun `setting connect timeouts`() = runBlocking {
mockWebServer.enqueue(MockResponse().setBody("Hello World"))
mockWebServer.enqueue(MockResponse().setBody("Hello World 4"))

val httpLoader = FuelBuilder()
.config {
Expand All @@ -50,19 +62,19 @@ internal class HttpLoaderBuilderTest {
val response = httpLoader.get {
url = mockWebServer.url("hello").toString()
}.body.string()
assertEquals("Hello World", response)
assertEquals("Hello World 4", response)
}

@Test
fun `setting call timeouts`() = runBlocking {
mockWebServer.enqueue(MockResponse().setBody("Hello World 2"))
mockWebServer.enqueue(MockResponse().setBody("Hello World 5"))

val okhttp = OkHttpClient.Builder().callTimeout(30L, TimeUnit.MILLISECONDS).build()
val httpLoader = FuelBuilder().config(okhttp).build()
val response = httpLoader.get {
url = mockWebServer.url("hello2").toString()
}.body.string()
assertEquals("Hello World 2", response)
assertEquals("Hello World 5", response)
}

@Test
Expand Down
2 changes: 1 addition & 1 deletion fuel/src/jvmTest/kotlin/fuel/HttpLoaderTest.kt
Original file line number Diff line number Diff line change
Expand Up @@ -9,7 +9,7 @@ import org.junit.Assert.assertEquals
import org.junit.Before
import org.junit.Test

internal class HttpLoaderTest {
class HttpLoaderTest {
private lateinit var httpLoader: HttpLoader
private lateinit var mockWebServer: MockWebServer

Expand Down
2 changes: 1 addition & 1 deletion fuel/src/jvmTest/kotlin/fuel/RoutingTest.kt
Original file line number Diff line number Diff line change
Expand Up @@ -8,7 +8,7 @@ import org.junit.Assert.assertEquals
import org.junit.Before
import org.junit.Test

internal class RoutingTest {
class RoutingTest {

sealed class TestApi(private val host: String) : FuelRouting {
override val basePath = this.host
Expand Down

0 comments on commit 7a3a7bb

Please sign in to comment.