From 3b88eb65e8f1aac1339416093d2f52cb62dc59e7 Mon Sep 17 00:00:00 2001 From: Kirill Kamakin Date: Sun, 6 Nov 2022 19:37:33 +0100 Subject: [PATCH] Add RecipeViewModel tests --- .../ui/recipes/RecipeViewModelTest.kt | 33 +++++++++++++++++++ 1 file changed, 33 insertions(+) diff --git a/app/src/test/java/gq/kirmanak/mealient/ui/recipes/RecipeViewModelTest.kt b/app/src/test/java/gq/kirmanak/mealient/ui/recipes/RecipeViewModelTest.kt index e433300..22d6fa1 100644 --- a/app/src/test/java/gq/kirmanak/mealient/ui/recipes/RecipeViewModelTest.kt +++ b/app/src/test/java/gq/kirmanak/mealient/ui/recipes/RecipeViewModelTest.kt @@ -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(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) } \ No newline at end of file