Skip to content

Commit

Permalink
Add a test to ensure that Resource.fetchFromUrl correctly uses the …
Browse files Browse the repository at this point in the history
…redirected URL and not the original URL for 301 and 302 redirects.
  • Loading branch information
chimbori committed Feb 11, 2023
1 parent d9a5657 commit 93101dd
Show file tree
Hide file tree
Showing 2 changed files with 54 additions and 1 deletion.
2 changes: 1 addition & 1 deletion src/main/kotlin/com/chimbori/crux/Crux.kt
Original file line number Diff line number Diff line change
Expand Up @@ -86,7 +86,7 @@ public class Crux(
}
}

private fun createCruxOkHttpClient(): OkHttpClient = OkHttpClient.Builder()
internal fun createCruxOkHttpClient(): OkHttpClient = OkHttpClient.Builder()
.followRedirects(true)
.followSslRedirects(true)
.retryOnConnectionFailure(true)
Expand Down
53 changes: 53 additions & 0 deletions src/test/kotlin/com/chimbori/crux/common/OkHttpExtensionsTest.kt
Original file line number Diff line number Diff line change
@@ -0,0 +1,53 @@
package com.chimbori.crux.common

import com.chimbori.crux.api.Resource
import com.chimbori.crux.createCruxOkHttpClient
import kotlinx.coroutines.runBlocking
import okhttp3.mockwebserver.Dispatcher
import okhttp3.mockwebserver.MockResponse
import okhttp3.mockwebserver.MockWebServer
import okhttp3.mockwebserver.RecordedRequest
import org.junit.After
import org.junit.Assert.assertEquals
import org.junit.Assert.assertNotEquals
import org.junit.Before
import org.junit.Test

class OkHttpExtensionsTest {
private val okHttpClient = createCruxOkHttpClient()
private lateinit var mockWebServer: MockWebServer

@Before
fun setUp() {
mockWebServer = MockWebServer().apply {
dispatcher = object : Dispatcher() {
override fun dispatch(request: RecordedRequest) = MockResponse().setBody("${request.path}")
}
start()
}
}

@After
fun tearDown() {
mockWebServer.shutdown()
}

@Test
fun testHttpRedirectUrlReturnedInsteadOfOriginalUrl() {
val originalUrl = mockWebServer.url("/original")
val redirectedUrl = mockWebServer.url("/redirected")
mockWebServer.dispatcher = object : Dispatcher() {
override fun dispatch(request: RecordedRequest) = when (request.path) {
originalUrl.encodedPath -> MockResponse().setResponseCode(302).setHeader("Location", redirectedUrl)
redirectedUrl.encodedPath -> MockResponse().setBody("")
else -> MockResponse().setResponseCode(404)
}
}

val resource = runBlocking {
Resource.fetchFromUrl(originalUrl, okHttpClient)
}
assertNotEquals(originalUrl, resource.url)
assertEquals(redirectedUrl, resource.url)
}
}

0 comments on commit 93101dd

Please sign in to comment.