From 05058091e943ea8f098b723c8350c020b473562e Mon Sep 17 00:00:00 2001 From: Kirill Kamakin Date: Thu, 22 Dec 2022 18:39:31 +0100 Subject: [PATCH] Add BaseURLViewModel tests --- .../ui/baseurl/BaseURLViewModelTest.kt | 35 +++++++++++++++++++ 1 file changed, 35 insertions(+) diff --git a/app/src/test/java/gq/kirmanak/mealient/ui/baseurl/BaseURLViewModelTest.kt b/app/src/test/java/gq/kirmanak/mealient/ui/baseurl/BaseURLViewModelTest.kt index c0fd1d2..3250c6f 100644 --- a/app/src/test/java/gq/kirmanak/mealient/ui/baseurl/BaseURLViewModelTest.kt +++ b/app/src/test/java/gq/kirmanak/mealient/ui/baseurl/BaseURLViewModelTest.kt @@ -4,17 +4,21 @@ import com.google.common.truth.Truth.assertThat import gq.kirmanak.mealient.data.auth.AuthRepo import gq.kirmanak.mealient.data.baseurl.ServerInfoRepo 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.BaseUnitTest import gq.kirmanak.mealient.ui.OperationUiState import io.mockk.coEvery import io.mockk.coVerify +import io.mockk.coVerifyOrder import io.mockk.impl.annotations.MockK import kotlinx.coroutines.ExperimentalCoroutinesApi import kotlinx.coroutines.test.* import org.junit.Before import org.junit.Test import java.io.IOException +import java.net.UnknownHostException +import javax.net.ssl.SSLHandshakeException @OptIn(ExperimentalCoroutinesApi::class) class BaseURLViewModelTest : BaseUnitTest() { @@ -105,4 +109,35 @@ class BaseURLViewModelTest : BaseUnitTest() { advanceUntilIdle() 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") } + } } \ No newline at end of file