Add RecipeViewModel tests

This commit is contained in:
Kirill Kamakin
2022-11-06 19:37:33 +01:00
parent 0c87657b55
commit 3b88eb65e8

View File

@@ -1,19 +1,24 @@
package gq.kirmanak.mealient.ui.recipes
import androidx.arch.core.executor.testing.InstantTaskExecutorRule
import androidx.lifecycle.asFlow
import com.google.common.truth.Truth.assertThat
import gq.kirmanak.mealient.data.auth.AuthRepo
import gq.kirmanak.mealient.data.recipes.RecipeRepo
import gq.kirmanak.mealient.logging.Logger
import gq.kirmanak.mealient.test.FakeLogger
import io.mockk.MockKAnnotations
import io.mockk.coEvery
import io.mockk.coVerify
import io.mockk.every
import io.mockk.impl.annotations.MockK
import kotlinx.coroutines.Dispatchers
import kotlinx.coroutines.ExperimentalCoroutinesApi
import kotlinx.coroutines.flow.first
import kotlinx.coroutines.flow.flowOf
import kotlinx.coroutines.test.UnconfinedTestDispatcher
import kotlinx.coroutines.test.resetMain
import kotlinx.coroutines.test.runTest
import kotlinx.coroutines.test.setMain
import org.junit.After
import org.junit.Before
@@ -71,5 +76,33 @@ class RecipeViewModelTest {
assertThat(subject.isAuthorized.value).isNull()
}
@Test
fun `when refreshRecipeInfo succeeds expect successful result`() = runTest {
every { authRepo.isAuthorizedFlow } returns flowOf(true)
val slug = "cake"
coEvery { recipeRepo.refreshRecipeInfo(eq(slug)) } returns Result.success(Unit)
val actual = createSubject().refreshRecipeInfo(slug).asFlow().first()
assertThat(actual).isEqualTo(Result.success(Unit))
}
@Test
fun `when refreshRecipeInfo succeeds expect call to repo`() = runTest {
every { authRepo.isAuthorizedFlow } returns flowOf(true)
val slug = "cake"
coEvery { recipeRepo.refreshRecipeInfo(eq(slug)) } returns Result.success(Unit)
createSubject().refreshRecipeInfo(slug).asFlow().first()
coVerify { recipeRepo.refreshRecipeInfo(slug) }
}
@Test
fun `when refreshRecipeInfo fails expect result with error`() = runTest {
every { authRepo.isAuthorizedFlow } returns flowOf(true)
val slug = "cake"
val result = Result.failure<Unit>(RuntimeException())
coEvery { recipeRepo.refreshRecipeInfo(eq(slug)) } returns result
val actual = createSubject().refreshRecipeInfo(slug).asFlow().first()
assertThat(actual).isEqualTo(result)
}
private fun createSubject() = RecipeViewModel(recipeRepo, authRepo, logger)
}