Add RecipeViewModel tests
This commit is contained in:
@@ -1,19 +1,24 @@
|
|||||||
package gq.kirmanak.mealient.ui.recipes
|
package gq.kirmanak.mealient.ui.recipes
|
||||||
|
|
||||||
import androidx.arch.core.executor.testing.InstantTaskExecutorRule
|
import androidx.arch.core.executor.testing.InstantTaskExecutorRule
|
||||||
|
import androidx.lifecycle.asFlow
|
||||||
import com.google.common.truth.Truth.assertThat
|
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.recipes.RecipeRepo
|
import gq.kirmanak.mealient.data.recipes.RecipeRepo
|
||||||
import gq.kirmanak.mealient.logging.Logger
|
import gq.kirmanak.mealient.logging.Logger
|
||||||
import gq.kirmanak.mealient.test.FakeLogger
|
import gq.kirmanak.mealient.test.FakeLogger
|
||||||
import io.mockk.MockKAnnotations
|
import io.mockk.MockKAnnotations
|
||||||
|
import io.mockk.coEvery
|
||||||
|
import io.mockk.coVerify
|
||||||
import io.mockk.every
|
import io.mockk.every
|
||||||
import io.mockk.impl.annotations.MockK
|
import io.mockk.impl.annotations.MockK
|
||||||
import kotlinx.coroutines.Dispatchers
|
import kotlinx.coroutines.Dispatchers
|
||||||
import kotlinx.coroutines.ExperimentalCoroutinesApi
|
import kotlinx.coroutines.ExperimentalCoroutinesApi
|
||||||
|
import kotlinx.coroutines.flow.first
|
||||||
import kotlinx.coroutines.flow.flowOf
|
import kotlinx.coroutines.flow.flowOf
|
||||||
import kotlinx.coroutines.test.UnconfinedTestDispatcher
|
import kotlinx.coroutines.test.UnconfinedTestDispatcher
|
||||||
import kotlinx.coroutines.test.resetMain
|
import kotlinx.coroutines.test.resetMain
|
||||||
|
import kotlinx.coroutines.test.runTest
|
||||||
import kotlinx.coroutines.test.setMain
|
import kotlinx.coroutines.test.setMain
|
||||||
import org.junit.After
|
import org.junit.After
|
||||||
import org.junit.Before
|
import org.junit.Before
|
||||||
@@ -71,5 +76,33 @@ class RecipeViewModelTest {
|
|||||||
assertThat(subject.isAuthorized.value).isNull()
|
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)
|
private fun createSubject() = RecipeViewModel(recipeRepo, authRepo, logger)
|
||||||
}
|
}
|
||||||
Reference in New Issue
Block a user