Merge pull request #117 from kirmanak/base-url-fix

Fix ignoring port in server URLs
This commit is contained in:
Kirill Kamakin
2022-12-12 20:27:40 +01:00
committed by GitHub
2 changed files with 49 additions and 1 deletions

View File

@@ -14,8 +14,8 @@ import javax.inject.Singleton
@Singleton @Singleton
class BaseUrlInterceptor @Inject constructor( class BaseUrlInterceptor @Inject constructor(
private val serverUrlProviderProvider: Provider<ServerUrlProvider>,
private val logger: Logger, private val logger: Logger,
private val serverUrlProviderProvider: Provider<ServerUrlProvider>,
) : LocalInterceptor { ) : LocalInterceptor {
private val serverUrlProvider: ServerUrlProvider private val serverUrlProvider: ServerUrlProvider
@@ -29,6 +29,7 @@ class BaseUrlInterceptor @Inject constructor(
.newBuilder() .newBuilder()
.host(baseUrl.host) .host(baseUrl.host)
.scheme(baseUrl.scheme) .scheme(baseUrl.scheme)
.port(baseUrl.port)
.build() .build()
val newRequest = oldRequest.newBuilder().url(correctUrl).build() val newRequest = oldRequest.newBuilder().url(correctUrl).build()
logger.d { "Replaced ${oldRequest.url} with ${newRequest.url}" } logger.d { "Replaced ${oldRequest.url} with ${newRequest.url}" }

View File

@@ -0,0 +1,47 @@
package gq.kirmanak.mealient.datasource.impl
import com.google.common.truth.Truth.assertThat
import gq.kirmanak.mealient.datasource.ServerUrlProvider
import gq.kirmanak.mealient.test.BaseUnitTest
import io.mockk.coEvery
import io.mockk.every
import io.mockk.impl.annotations.MockK
import io.mockk.mockk
import io.mockk.slot
import okhttp3.Interceptor
import okhttp3.Request
import org.junit.Before
import org.junit.Test
class BaseUrlInterceptorTest : BaseUnitTest() {
private lateinit var subject: Interceptor
@MockK
lateinit var serverUrlProvider: ServerUrlProvider
@MockK(relaxUnitFun = true)
lateinit var chain: Interceptor.Chain
@Before
override fun setUp() {
super.setUp()
subject = BaseUrlInterceptor(logger) { serverUrlProvider }
}
@Test
fun `when intercept is called expect it changes the url`() {
val requestSlot = slot<Request>()
every { chain.proceed(capture(requestSlot)) } returns mockk()
every { chain.request() } returns buildRequest()
coEvery { serverUrlProvider.getUrl() } returns "https://mealie:3241/"
subject.intercept(chain)
assertThat(requestSlot.captured.url.toString()).isEqualTo("https://mealie:3241/")
}
private fun buildRequest(
url: String = "http://localhost",
) = Request.Builder().apply {
url(url)
}.build()
}