Add BaseURLViewModel tests

This commit is contained in:
Kirill Kamakin
2022-12-22 18:39:31 +01:00
parent 0bf4747d18
commit 05058091e9

View File

@@ -4,17 +4,21 @@ import com.google.common.truth.Truth.assertThat
import gq.kirmanak.mealient.data.auth.AuthRepo import gq.kirmanak.mealient.data.auth.AuthRepo
import gq.kirmanak.mealient.data.baseurl.ServerInfoRepo import gq.kirmanak.mealient.data.baseurl.ServerInfoRepo
import gq.kirmanak.mealient.data.recipes.RecipeRepo import gq.kirmanak.mealient.data.recipes.RecipeRepo
import gq.kirmanak.mealient.datasource.NetworkError
import gq.kirmanak.mealient.test.AuthImplTestData.TEST_BASE_URL import gq.kirmanak.mealient.test.AuthImplTestData.TEST_BASE_URL
import gq.kirmanak.mealient.test.BaseUnitTest import gq.kirmanak.mealient.test.BaseUnitTest
import gq.kirmanak.mealient.ui.OperationUiState import gq.kirmanak.mealient.ui.OperationUiState
import io.mockk.coEvery import io.mockk.coEvery
import io.mockk.coVerify import io.mockk.coVerify
import io.mockk.coVerifyOrder
import io.mockk.impl.annotations.MockK import io.mockk.impl.annotations.MockK
import kotlinx.coroutines.ExperimentalCoroutinesApi import kotlinx.coroutines.ExperimentalCoroutinesApi
import kotlinx.coroutines.test.* import kotlinx.coroutines.test.*
import org.junit.Before import org.junit.Before
import org.junit.Test import org.junit.Test
import java.io.IOException import java.io.IOException
import java.net.UnknownHostException
import javax.net.ssl.SSLHandshakeException
@OptIn(ExperimentalCoroutinesApi::class) @OptIn(ExperimentalCoroutinesApi::class)
class BaseURLViewModelTest : BaseUnitTest() { class BaseURLViewModelTest : BaseUnitTest() {
@@ -105,4 +109,35 @@ class BaseURLViewModelTest : BaseUnitTest() {
advanceUntilIdle() advanceUntilIdle()
assertThat(subject.uiState.value).isInstanceOf(OperationUiState.Failure::class.java) assertThat(subject.uiState.value).isInstanceOf(OperationUiState.Failure::class.java)
} }
@Test
fun `when saving base url with no prefix and https throws expect http attempt`() = runTest {
coEvery { serverInfoRepo.getUrl() } returns null
val err = NetworkError.MalformedUrl(SSLHandshakeException("test"))
coEvery { serverInfoRepo.tryBaseURL("https://test") } returns Result.failure(err)
coEvery { serverInfoRepo.tryBaseURL("http://test") } returns Result.success(Unit)
subject.saveBaseUrl("test")
coVerifyOrder {
serverInfoRepo.tryBaseURL("https://test")
serverInfoRepo.tryBaseURL("http://test")
}
}
@Test
fun `when saving base url with no prefix and https throws non ssl expect no http`() = runTest {
coEvery { serverInfoRepo.getUrl() } returns null
val err = NetworkError.MalformedUrl(UnknownHostException())
coEvery { serverInfoRepo.tryBaseURL("https://test") } returns Result.failure(err)
subject.saveBaseUrl("test")
coVerify(inverse = true) { serverInfoRepo.tryBaseURL("http://test") }
}
@Test
fun `when saving base url with https prefix and https throws expect no http call`() = runTest {
coEvery { serverInfoRepo.getUrl() } returns null
val err = NetworkError.MalformedUrl(SSLHandshakeException("test"))
coEvery { serverInfoRepo.tryBaseURL("https://test") } returns Result.failure(err)
subject.saveBaseUrl("https://test")
coVerify(inverse = true) { serverInfoRepo.tryBaseURL("http://test") }
}
} }