From 612101f1b4b3d17f462d71cd38ca83749e7c72bc Mon Sep 17 00:00:00 2001 From: Kirill Kamakin Date: Sat, 12 Nov 2022 13:21:26 +0100 Subject: [PATCH] Fix base URL view model coverage calculation --- .../kirmanak/mealient/test/RobolectricTest.kt | 10 ------ .../ui/baseurl/BaseURLViewModelTest.kt | 31 ++++++++++++++++--- 2 files changed, 26 insertions(+), 15 deletions(-) delete mode 100644 app/src/test/java/gq/kirmanak/mealient/test/RobolectricTest.kt diff --git a/app/src/test/java/gq/kirmanak/mealient/test/RobolectricTest.kt b/app/src/test/java/gq/kirmanak/mealient/test/RobolectricTest.kt deleted file mode 100644 index 5fc79bf..0000000 --- a/app/src/test/java/gq/kirmanak/mealient/test/RobolectricTest.kt +++ /dev/null @@ -1,10 +0,0 @@ -package gq.kirmanak.mealient.test - -import android.app.Application -import androidx.test.ext.junit.runners.AndroidJUnit4 -import org.junit.runner.RunWith -import org.robolectric.annotation.Config - -@RunWith(AndroidJUnit4::class) -@Config(application = Application::class, manifest = Config.NONE) -abstract class RobolectricTest \ No newline at end of file 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 688c497..355d33f 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 @@ -1,5 +1,7 @@ package gq.kirmanak.mealient.ui.baseurl +import androidx.arch.core.executor.testing.InstantTaskExecutorRule +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.baseurl.VersionDataSource @@ -9,20 +11,22 @@ import gq.kirmanak.mealient.logging.Logger import gq.kirmanak.mealient.test.AuthImplTestData.TEST_BASE_URL import gq.kirmanak.mealient.test.AuthImplTestData.TEST_VERSION import gq.kirmanak.mealient.test.FakeLogger -import gq.kirmanak.mealient.test.RobolectricTest +import gq.kirmanak.mealient.ui.OperationUiState import io.mockk.MockKAnnotations import io.mockk.coEvery import io.mockk.coVerify import io.mockk.impl.annotations.MockK +import kotlinx.coroutines.Dispatchers import kotlinx.coroutines.ExperimentalCoroutinesApi -import kotlinx.coroutines.test.TestScope -import kotlinx.coroutines.test.advanceUntilIdle -import kotlinx.coroutines.test.runTest +import kotlinx.coroutines.test.* +import org.junit.After import org.junit.Before +import org.junit.Rule import org.junit.Test +import java.io.IOException @OptIn(ExperimentalCoroutinesApi::class) -class BaseURLViewModelTest : RobolectricTest() { +class BaseURLViewModelTest { @MockK(relaxUnitFun = true) lateinit var serverInfoRepo: ServerInfoRepo @@ -36,6 +40,9 @@ class BaseURLViewModelTest : RobolectricTest() { @MockK lateinit var versionDataSource: VersionDataSource + @get:Rule + val instantExecutorRule = InstantTaskExecutorRule() + private val logger: Logger = FakeLogger() lateinit var subject: BaseURLViewModel @@ -43,6 +50,7 @@ class BaseURLViewModelTest : RobolectricTest() { @Before fun setUp() { MockKAnnotations.init(this) + Dispatchers.setMain(UnconfinedTestDispatcher()) subject = BaseURLViewModel( serverInfoRepo = serverInfoRepo, authRepo = authRepo, @@ -52,6 +60,10 @@ class BaseURLViewModelTest : RobolectricTest() { ) } + @After + fun tearDown() { + Dispatchers.resetMain() + } @Test fun `when saveBaseURL expect no version checks given that current URL matches new`() = runTest { @@ -114,4 +126,13 @@ class BaseURLViewModelTest : RobolectricTest() { versionDataSource.getVersionInfo(eq(TEST_BASE_URL)) } returns VersionInfo(TEST_VERSION) } + + @Test + fun `when saveBaseURL expect error given that version can't be fetched`() = runTest { + coEvery { serverInfoRepo.getUrl() } returns null + coEvery { versionDataSource.getVersionInfo(eq(TEST_BASE_URL)) } throws IOException() + subject.saveBaseUrl(TEST_BASE_URL) + advanceUntilIdle() + assertThat(subject.uiState.value).isInstanceOf(OperationUiState.Failure::class.java) + } } \ No newline at end of file