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
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)
}
}