Fix base URL view model coverage calculation

This commit is contained in:
Kirill Kamakin
2022-11-12 13:21:26 +01:00
parent 3504eae248
commit 612101f1b4
2 changed files with 26 additions and 15 deletions

View File

@@ -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

View File

@@ -1,5 +1,7 @@
package gq.kirmanak.mealient.ui.baseurl 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.auth.AuthRepo
import gq.kirmanak.mealient.data.baseurl.ServerInfoRepo import gq.kirmanak.mealient.data.baseurl.ServerInfoRepo
import gq.kirmanak.mealient.data.baseurl.VersionDataSource 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_BASE_URL
import gq.kirmanak.mealient.test.AuthImplTestData.TEST_VERSION import gq.kirmanak.mealient.test.AuthImplTestData.TEST_VERSION
import gq.kirmanak.mealient.test.FakeLogger 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.MockKAnnotations
import io.mockk.coEvery import io.mockk.coEvery
import io.mockk.coVerify import io.mockk.coVerify
import io.mockk.impl.annotations.MockK import io.mockk.impl.annotations.MockK
import kotlinx.coroutines.Dispatchers
import kotlinx.coroutines.ExperimentalCoroutinesApi import kotlinx.coroutines.ExperimentalCoroutinesApi
import kotlinx.coroutines.test.TestScope import kotlinx.coroutines.test.*
import kotlinx.coroutines.test.advanceUntilIdle import org.junit.After
import kotlinx.coroutines.test.runTest
import org.junit.Before import org.junit.Before
import org.junit.Rule
import org.junit.Test import org.junit.Test
import java.io.IOException
@OptIn(ExperimentalCoroutinesApi::class) @OptIn(ExperimentalCoroutinesApi::class)
class BaseURLViewModelTest : RobolectricTest() { class BaseURLViewModelTest {
@MockK(relaxUnitFun = true) @MockK(relaxUnitFun = true)
lateinit var serverInfoRepo: ServerInfoRepo lateinit var serverInfoRepo: ServerInfoRepo
@@ -36,6 +40,9 @@ class BaseURLViewModelTest : RobolectricTest() {
@MockK @MockK
lateinit var versionDataSource: VersionDataSource lateinit var versionDataSource: VersionDataSource
@get:Rule
val instantExecutorRule = InstantTaskExecutorRule()
private val logger: Logger = FakeLogger() private val logger: Logger = FakeLogger()
lateinit var subject: BaseURLViewModel lateinit var subject: BaseURLViewModel
@@ -43,6 +50,7 @@ class BaseURLViewModelTest : RobolectricTest() {
@Before @Before
fun setUp() { fun setUp() {
MockKAnnotations.init(this) MockKAnnotations.init(this)
Dispatchers.setMain(UnconfinedTestDispatcher())
subject = BaseURLViewModel( subject = BaseURLViewModel(
serverInfoRepo = serverInfoRepo, serverInfoRepo = serverInfoRepo,
authRepo = authRepo, authRepo = authRepo,
@@ -52,6 +60,10 @@ class BaseURLViewModelTest : RobolectricTest() {
) )
} }
@After
fun tearDown() {
Dispatchers.resetMain()
}
@Test @Test
fun `when saveBaseURL expect no version checks given that current URL matches new`() = runTest { 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)) versionDataSource.getVersionInfo(eq(TEST_BASE_URL))
} returns VersionInfo(TEST_VERSION) } 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)
}
} }