diff --git a/app/src/test/java/gq/kirmanak/mealient/data/add/impl/AddRecipeRepoTest.kt b/app/src/test/java/gq/kirmanak/mealient/data/add/impl/AddRecipeRepoTest.kt index 801a0a4..bbcb139 100644 --- a/app/src/test/java/gq/kirmanak/mealient/data/add/impl/AddRecipeRepoTest.kt +++ b/app/src/test/java/gq/kirmanak/mealient/data/add/impl/AddRecipeRepoTest.kt @@ -4,8 +4,7 @@ import com.google.common.truth.Truth.assertThat import gq.kirmanak.mealient.data.add.AddRecipeDataSource import gq.kirmanak.mealient.data.add.AddRecipeRepo import gq.kirmanak.mealient.datastore.recipe.AddRecipeStorage -import gq.kirmanak.mealient.logging.Logger -import gq.kirmanak.mealient.test.FakeLogger +import gq.kirmanak.mealient.test.BaseUnitTest import gq.kirmanak.mealient.test.RecipeImplTestData.PORRIDGE_ADD_RECIPE_INFO import gq.kirmanak.mealient.test.RecipeImplTestData.PORRIDGE_RECIPE_DRAFT import io.mockk.* @@ -17,7 +16,7 @@ import org.junit.Before import org.junit.Test @OptIn(ExperimentalCoroutinesApi::class) -class AddRecipeRepoTest { +class AddRecipeRepoTest : BaseUnitTest() { @MockK(relaxUnitFun = true) lateinit var dataSource: AddRecipeDataSource @@ -25,13 +24,11 @@ class AddRecipeRepoTest { @MockK(relaxUnitFun = true) lateinit var storage: AddRecipeStorage - private val logger: Logger = FakeLogger() - private lateinit var subject: AddRecipeRepo @Before - fun setUp() { - MockKAnnotations.init(this) + override fun setUp() { + super.setUp() subject = AddRecipeRepoImpl(dataSource, storage, logger) } diff --git a/app/src/test/java/gq/kirmanak/mealient/data/analytics/AnalyticsImplTest.kt b/app/src/test/java/gq/kirmanak/mealient/data/analytics/AnalyticsImplTest.kt index e37e5b0..4cde2ae 100644 --- a/app/src/test/java/gq/kirmanak/mealient/data/analytics/AnalyticsImplTest.kt +++ b/app/src/test/java/gq/kirmanak/mealient/data/analytics/AnalyticsImplTest.kt @@ -2,15 +2,13 @@ package gq.kirmanak.mealient.data.analytics import com.google.firebase.analytics.FirebaseAnalytics import com.google.firebase.crashlytics.FirebaseCrashlytics -import gq.kirmanak.mealient.logging.Logger -import gq.kirmanak.mealient.test.FakeLogger -import io.mockk.MockKAnnotations +import gq.kirmanak.mealient.test.BaseUnitTest import io.mockk.impl.annotations.MockK import io.mockk.verify import org.junit.Before import org.junit.Test -class AnalyticsImplTest { +class AnalyticsImplTest : BaseUnitTest() { @MockK(relaxUnitFun = true) lateinit var firebaseAnalytics: FirebaseAnalytics @@ -20,11 +18,9 @@ class AnalyticsImplTest { lateinit var subject: Analytics - private val logger: Logger = FakeLogger() - @Before - fun setUp() { - MockKAnnotations.init(this) + override fun setUp() { + super.setUp() subject = AnalyticsImpl(firebaseAnalytics, firebaseCrashlytics, logger) } diff --git a/app/src/test/java/gq/kirmanak/mealient/data/auth/impl/AuthRepoImplTest.kt b/app/src/test/java/gq/kirmanak/mealient/data/auth/impl/AuthRepoImplTest.kt index f77c2bc..db98128 100644 --- a/app/src/test/java/gq/kirmanak/mealient/data/auth/impl/AuthRepoImplTest.kt +++ b/app/src/test/java/gq/kirmanak/mealient/data/auth/impl/AuthRepoImplTest.kt @@ -6,14 +6,13 @@ import gq.kirmanak.mealient.data.auth.AuthRepo import gq.kirmanak.mealient.data.auth.AuthStorage import gq.kirmanak.mealient.data.baseurl.ServerInfoRepo import gq.kirmanak.mealient.datasource.runCatchingExceptCancel -import gq.kirmanak.mealient.logging.Logger import gq.kirmanak.mealient.test.AuthImplTestData.TEST_AUTH_HEADER import gq.kirmanak.mealient.test.AuthImplTestData.TEST_BASE_URL import gq.kirmanak.mealient.test.AuthImplTestData.TEST_PASSWORD import gq.kirmanak.mealient.test.AuthImplTestData.TEST_SERVER_VERSION_V0 import gq.kirmanak.mealient.test.AuthImplTestData.TEST_TOKEN import gq.kirmanak.mealient.test.AuthImplTestData.TEST_USERNAME -import gq.kirmanak.mealient.test.FakeLogger +import gq.kirmanak.mealient.test.BaseUnitTest import io.mockk.* import io.mockk.impl.annotations.MockK import kotlinx.coroutines.ExperimentalCoroutinesApi @@ -24,7 +23,7 @@ import org.junit.Before import org.junit.Test @OptIn(ExperimentalCoroutinesApi::class) -class AuthRepoImplTest { +class AuthRepoImplTest : BaseUnitTest() { @MockK lateinit var dataSource: AuthDataSource @@ -35,13 +34,11 @@ class AuthRepoImplTest { @MockK(relaxUnitFun = true) lateinit var storage: AuthStorage - private val logger: Logger = FakeLogger() - lateinit var subject: AuthRepo @Before - fun setUp() { - MockKAnnotations.init(this) + override fun setUp() { + super.setUp() subject = AuthRepoImpl(storage, dataSource, logger) } diff --git a/app/src/test/java/gq/kirmanak/mealient/data/baseurl/ServerInfoRepoTest.kt b/app/src/test/java/gq/kirmanak/mealient/data/baseurl/ServerInfoRepoTest.kt index 0c58f63..1ce1936 100644 --- a/app/src/test/java/gq/kirmanak/mealient/data/baseurl/ServerInfoRepoTest.kt +++ b/app/src/test/java/gq/kirmanak/mealient/data/baseurl/ServerInfoRepoTest.kt @@ -2,12 +2,10 @@ package gq.kirmanak.mealient.data.baseurl import com.google.common.truth.Truth.assertThat import gq.kirmanak.mealient.datasource.NetworkError -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.BaseUnitTest import gq.kirmanak.mealient.test.RecipeImplTestData.VERSION_INFO_V0 -import io.mockk.MockKAnnotations import io.mockk.coEvery import io.mockk.coVerify import io.mockk.impl.annotations.MockK @@ -17,9 +15,7 @@ import org.junit.Before import org.junit.Test @OptIn(ExperimentalCoroutinesApi::class) -class ServerInfoRepoTest { - - private val logger: Logger = FakeLogger() +class ServerInfoRepoTest : BaseUnitTest() { private lateinit var subject: ServerInfoRepo @@ -30,8 +26,8 @@ class ServerInfoRepoTest { lateinit var dataSource: VersionDataSource @Before - fun setUp() { - MockKAnnotations.init(this) + override fun setUp() { + super.setUp() subject = ServerInfoRepoImpl(storage, dataSource, logger) } diff --git a/app/src/test/java/gq/kirmanak/mealient/data/baseurl/ServerInfoStorageTest.kt b/app/src/test/java/gq/kirmanak/mealient/data/baseurl/ServerInfoStorageTest.kt index 2360d98..5df7a3c 100644 --- a/app/src/test/java/gq/kirmanak/mealient/data/baseurl/ServerInfoStorageTest.kt +++ b/app/src/test/java/gq/kirmanak/mealient/data/baseurl/ServerInfoStorageTest.kt @@ -6,7 +6,7 @@ import gq.kirmanak.mealient.data.baseurl.impl.ServerInfoStorageImpl import gq.kirmanak.mealient.data.storage.PreferencesStorage import gq.kirmanak.mealient.test.AuthImplTestData.TEST_BASE_URL import gq.kirmanak.mealient.test.AuthImplTestData.TEST_VERSION -import io.mockk.MockKAnnotations +import gq.kirmanak.mealient.test.BaseUnitTest import io.mockk.coEvery import io.mockk.coVerify import io.mockk.every @@ -17,7 +17,7 @@ import org.junit.Before import org.junit.Test @OptIn(ExperimentalCoroutinesApi::class) -class ServerInfoStorageTest { +class ServerInfoStorageTest : BaseUnitTest() { @MockK(relaxUnitFun = true) lateinit var preferencesStorage: PreferencesStorage @@ -28,8 +28,8 @@ class ServerInfoStorageTest { private val serverVersionKey = stringPreferencesKey("serverVersionKey") @Before - fun setUp() { - MockKAnnotations.init(this) + override fun setUp() { + super.setUp() subject = ServerInfoStorageImpl(preferencesStorage) every { preferencesStorage.baseUrlKey } returns baseUrlKey every { preferencesStorage.serverVersionKey } returns serverVersionKey diff --git a/app/src/test/java/gq/kirmanak/mealient/data/network/MealieDataSourceWrapperTest.kt b/app/src/test/java/gq/kirmanak/mealient/data/network/MealieDataSourceWrapperTest.kt index 208e1d7..cc23507 100644 --- a/app/src/test/java/gq/kirmanak/mealient/data/network/MealieDataSourceWrapperTest.kt +++ b/app/src/test/java/gq/kirmanak/mealient/data/network/MealieDataSourceWrapperTest.kt @@ -6,12 +6,11 @@ import gq.kirmanak.mealient.data.baseurl.ServerInfoRepo import gq.kirmanak.mealient.datasource.NetworkError import gq.kirmanak.mealient.datasource.v0.MealieDataSourceV0 import gq.kirmanak.mealient.datasource.v1.MealieDataSourceV1 -import gq.kirmanak.mealient.logging.Logger import gq.kirmanak.mealient.test.AuthImplTestData.TEST_AUTH_HEADER import gq.kirmanak.mealient.test.AuthImplTestData.TEST_BASE_URL import gq.kirmanak.mealient.test.AuthImplTestData.TEST_SERVER_VERSION_V0 import gq.kirmanak.mealient.test.AuthImplTestData.TEST_SERVER_VERSION_V1 -import gq.kirmanak.mealient.test.FakeLogger +import gq.kirmanak.mealient.test.BaseUnitTest import gq.kirmanak.mealient.test.RecipeImplTestData.PORRIDGE_ADD_RECIPE_INFO import gq.kirmanak.mealient.test.RecipeImplTestData.PORRIDGE_ADD_RECIPE_REQUEST_V0 import gq.kirmanak.mealient.test.RecipeImplTestData.PORRIDGE_CREATE_RECIPE_REQUEST_V1 @@ -32,7 +31,7 @@ import org.junit.Test import java.io.IOException @OptIn(ExperimentalCoroutinesApi::class) -class MealieDataSourceWrapperTest { +class MealieDataSourceWrapperTest : BaseUnitTest() { @MockK lateinit var serverInfoRepo: ServerInfoRepo @@ -48,11 +47,9 @@ class MealieDataSourceWrapperTest { lateinit var subject: MealieDataSourceWrapper - private val logger: Logger = FakeLogger() - @Before - fun setUp() { - MockKAnnotations.init(this) + override fun setUp() { + super.setUp() subject = MealieDataSourceWrapper(serverInfoRepo, authRepo, v0Source, v1Source, logger) } diff --git a/app/src/test/java/gq/kirmanak/mealient/data/recipes/impl/RecipeImageUrlProviderImplTest.kt b/app/src/test/java/gq/kirmanak/mealient/data/recipes/impl/RecipeImageUrlProviderImplTest.kt index 7637c19..f10ae92 100644 --- a/app/src/test/java/gq/kirmanak/mealient/data/recipes/impl/RecipeImageUrlProviderImplTest.kt +++ b/app/src/test/java/gq/kirmanak/mealient/data/recipes/impl/RecipeImageUrlProviderImplTest.kt @@ -2,9 +2,7 @@ package gq.kirmanak.mealient.data.recipes.impl import com.google.common.truth.Truth.assertThat import gq.kirmanak.mealient.data.baseurl.ServerInfoRepo -import gq.kirmanak.mealient.logging.Logger -import gq.kirmanak.mealient.test.FakeLogger -import io.mockk.MockKAnnotations +import gq.kirmanak.mealient.test.BaseUnitTest import io.mockk.coEvery import io.mockk.impl.annotations.MockK import kotlinx.coroutines.ExperimentalCoroutinesApi @@ -13,18 +11,16 @@ import org.junit.Before import org.junit.Test @OptIn(ExperimentalCoroutinesApi::class) -class RecipeImageUrlProviderImplTest { +class RecipeImageUrlProviderImplTest : BaseUnitTest() { lateinit var subject: RecipeImageUrlProvider @MockK lateinit var serverInfoRepo: ServerInfoRepo - private val logger: Logger = FakeLogger() - @Before - fun setUp() { - MockKAnnotations.init(this) + override fun setUp() { + super.setUp() subject = RecipeImageUrlProviderImpl(serverInfoRepo, logger) prepareBaseURL("https://google.com/") } diff --git a/app/src/test/java/gq/kirmanak/mealient/data/recipes/impl/RecipeRepoTest.kt b/app/src/test/java/gq/kirmanak/mealient/data/recipes/impl/RecipeRepoTest.kt index bc63779..298678e 100644 --- a/app/src/test/java/gq/kirmanak/mealient/data/recipes/impl/RecipeRepoTest.kt +++ b/app/src/test/java/gq/kirmanak/mealient/data/recipes/impl/RecipeRepoTest.kt @@ -6,11 +6,9 @@ import gq.kirmanak.mealient.data.recipes.RecipeRepo import gq.kirmanak.mealient.data.recipes.db.RecipeStorage import gq.kirmanak.mealient.data.recipes.network.RecipeDataSource import gq.kirmanak.mealient.database.recipe.entity.RecipeSummaryEntity -import gq.kirmanak.mealient.logging.Logger -import gq.kirmanak.mealient.test.FakeLogger +import gq.kirmanak.mealient.test.BaseUnitTest import gq.kirmanak.mealient.test.RecipeImplTestData.CAKE_FULL_RECIPE_INFO import gq.kirmanak.mealient.test.RecipeImplTestData.FULL_CAKE_INFO_ENTITY -import io.mockk.MockKAnnotations import io.mockk.coEvery import io.mockk.coVerify import io.mockk.impl.annotations.MockK @@ -20,7 +18,7 @@ import org.junit.Before import org.junit.Test @OptIn(ExperimentalCoroutinesApi::class) -class RecipeRepoTest { +class RecipeRepoTest : BaseUnitTest() { @MockK(relaxUnitFun = true) lateinit var storage: RecipeStorage @@ -34,13 +32,11 @@ class RecipeRepoTest { @MockK lateinit var pagingSourceFactory: InvalidatingPagingSourceFactory - private val logger: Logger = FakeLogger() - lateinit var subject: RecipeRepo @Before - fun setUp() { - MockKAnnotations.init(this) + override fun setUp() { + super.setUp() subject = RecipeRepoImpl(remoteMediator, storage, pagingSourceFactory, dataSource, logger) } diff --git a/app/src/test/java/gq/kirmanak/mealient/data/recipes/impl/RecipesRemoteMediatorTest.kt b/app/src/test/java/gq/kirmanak/mealient/data/recipes/impl/RecipesRemoteMediatorTest.kt index 0cd0cc0..196cd3c 100644 --- a/app/src/test/java/gq/kirmanak/mealient/data/recipes/impl/RecipesRemoteMediatorTest.kt +++ b/app/src/test/java/gq/kirmanak/mealient/data/recipes/impl/RecipesRemoteMediatorTest.kt @@ -7,10 +7,8 @@ import gq.kirmanak.mealient.data.recipes.db.RecipeStorage import gq.kirmanak.mealient.data.recipes.network.RecipeDataSource import gq.kirmanak.mealient.database.recipe.entity.RecipeSummaryEntity import gq.kirmanak.mealient.datasource.NetworkError.Unauthorized -import gq.kirmanak.mealient.logging.Logger -import gq.kirmanak.mealient.test.FakeLogger +import gq.kirmanak.mealient.test.BaseUnitTest import gq.kirmanak.mealient.test.RecipeImplTestData.TEST_RECIPE_SUMMARIES -import io.mockk.MockKAnnotations import io.mockk.coEvery import io.mockk.coVerify import io.mockk.impl.annotations.MockK @@ -22,7 +20,8 @@ import org.junit.Test @ExperimentalCoroutinesApi @OptIn(ExperimentalPagingApi::class) -class RecipesRemoteMediatorTest { +class RecipesRemoteMediatorTest : BaseUnitTest() { + private val pagingConfig = PagingConfig( pageSize = 2, prefetchDistance = 5, @@ -40,11 +39,9 @@ class RecipesRemoteMediatorTest { @MockK(relaxUnitFun = true) lateinit var pagingSourceFactory: InvalidatingPagingSourceFactory - private val logger: Logger = FakeLogger() - @Before - fun setUp() { - MockKAnnotations.init(this) + override fun setUp() { + super.setUp() subject = RecipesRemoteMediator(storage, dataSource, pagingSourceFactory, logger) } diff --git a/app/src/test/java/gq/kirmanak/mealient/extensions/FlowExtensionsKtTest.kt b/app/src/test/java/gq/kirmanak/mealient/extensions/FlowExtensionsKtTest.kt index 58f9101..2fa9781 100644 --- a/app/src/test/java/gq/kirmanak/mealient/extensions/FlowExtensionsKtTest.kt +++ b/app/src/test/java/gq/kirmanak/mealient/extensions/FlowExtensionsKtTest.kt @@ -1,6 +1,7 @@ package gq.kirmanak.mealient.extensions import com.google.common.truth.Truth.assertThat +import gq.kirmanak.mealient.test.BaseUnitTest import kotlinx.coroutines.ExperimentalCoroutinesApi import kotlinx.coroutines.flow.flowOf import kotlinx.coroutines.flow.toList @@ -8,7 +9,7 @@ import kotlinx.coroutines.test.runTest import org.junit.Test @OptIn(ExperimentalCoroutinesApi::class) -class FlowExtensionsKtTest { +class FlowExtensionsKtTest : BaseUnitTest() { @Test fun `when flow has an update then valueUpdatesOnly sends updated value`() = runTest { diff --git a/app/src/test/java/gq/kirmanak/mealient/extensions/ModelMappingsTest.kt b/app/src/test/java/gq/kirmanak/mealient/extensions/ModelMappingsTest.kt index 9a585e5..8b6bd81 100644 --- a/app/src/test/java/gq/kirmanak/mealient/extensions/ModelMappingsTest.kt +++ b/app/src/test/java/gq/kirmanak/mealient/extensions/ModelMappingsTest.kt @@ -1,6 +1,7 @@ package gq.kirmanak.mealient.extensions import com.google.common.truth.Truth.assertThat +import gq.kirmanak.mealient.test.BaseUnitTest import gq.kirmanak.mealient.test.RecipeImplTestData.CAKE_FULL_RECIPE_INFO import gq.kirmanak.mealient.test.RecipeImplTestData.CAKE_RECIPE_ENTITY import gq.kirmanak.mealient.test.RecipeImplTestData.CAKE_SUGAR_RECIPE_INGREDIENT_ENTITY @@ -32,7 +33,7 @@ import gq.kirmanak.mealient.test.RecipeImplTestData.VERSION_RESPONSE_V0 import gq.kirmanak.mealient.test.RecipeImplTestData.VERSION_RESPONSE_V1 import org.junit.Test -class ModelMappingsTest { +class ModelMappingsTest : BaseUnitTest() { @Test fun `when toAddRecipeRequest then fills fields correctly`() { diff --git a/app/src/test/java/gq/kirmanak/mealient/test/BaseUnitTest.kt b/app/src/test/java/gq/kirmanak/mealient/test/BaseUnitTest.kt new file mode 100644 index 0000000..0526aea --- /dev/null +++ b/app/src/test/java/gq/kirmanak/mealient/test/BaseUnitTest.kt @@ -0,0 +1,33 @@ +package gq.kirmanak.mealient.test + +import androidx.arch.core.executor.testing.InstantTaskExecutorRule +import gq.kirmanak.mealient.logging.Logger +import io.mockk.MockKAnnotations +import kotlinx.coroutines.Dispatchers +import kotlinx.coroutines.ExperimentalCoroutinesApi +import kotlinx.coroutines.test.UnconfinedTestDispatcher +import kotlinx.coroutines.test.resetMain +import kotlinx.coroutines.test.setMain +import org.junit.After +import org.junit.Before +import org.junit.Rule + +@OptIn(ExperimentalCoroutinesApi::class) +open class BaseUnitTest { + + @get:Rule + val instantExecutorRule = InstantTaskExecutorRule() + + protected val logger: Logger = FakeLogger() + + @Before + open fun setUp() { + MockKAnnotations.init(this) + Dispatchers.setMain(UnconfinedTestDispatcher()) + } + + @After + fun tearDown() { + Dispatchers.resetMain() + } +} \ No newline at end of file diff --git a/app/src/test/java/gq/kirmanak/mealient/ui/add/AddRecipeViewModelTest.kt b/app/src/test/java/gq/kirmanak/mealient/ui/add/AddRecipeViewModelTest.kt index 130e693..5709d10 100644 --- a/app/src/test/java/gq/kirmanak/mealient/ui/add/AddRecipeViewModelTest.kt +++ b/app/src/test/java/gq/kirmanak/mealient/ui/add/AddRecipeViewModelTest.kt @@ -2,49 +2,34 @@ package gq.kirmanak.mealient.ui.add import com.google.common.truth.Truth.assertThat import gq.kirmanak.mealient.data.add.AddRecipeRepo -import gq.kirmanak.mealient.logging.Logger -import gq.kirmanak.mealient.test.FakeLogger +import gq.kirmanak.mealient.test.BaseUnitTest import gq.kirmanak.mealient.test.RecipeImplTestData.PORRIDGE_ADD_RECIPE_INFO -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.flow.first import kotlinx.coroutines.flow.firstOrNull 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 kotlinx.coroutines.withTimeoutOrNull -import org.junit.After import org.junit.Before import org.junit.Test @OptIn(ExperimentalCoroutinesApi::class) -class AddRecipeViewModelTest { +class AddRecipeViewModelTest : BaseUnitTest() { @MockK(relaxUnitFun = true) lateinit var addRecipeRepo: AddRecipeRepo - private val logger: Logger = FakeLogger() - lateinit var subject: AddRecipeViewModel @Before - fun setUp() { - MockKAnnotations.init(this) - Dispatchers.setMain(UnconfinedTestDispatcher()) + override fun setUp() { + super.setUp() subject = AddRecipeViewModel(addRecipeRepo, logger) } - @After - fun tearDown() { - Dispatchers.resetMain() - } - @Test fun `when saveRecipe fails then addRecipeResult is false`() = runTest { coEvery { addRecipeRepo.saveRecipe() } throws IllegalStateException() diff --git a/app/src/test/java/gq/kirmanak/mealient/ui/baseurl/BaseURLViewModelTest.kt b/app/src/test/java/gq/kirmanak/mealient/ui/baseurl/BaseURLViewModelTest.kt index 355d33f..5d7bab7 100644 --- a/app/src/test/java/gq/kirmanak/mealient/ui/baseurl/BaseURLViewModelTest.kt +++ b/app/src/test/java/gq/kirmanak/mealient/ui/baseurl/BaseURLViewModelTest.kt @@ -1,32 +1,26 @@ 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 import gq.kirmanak.mealient.data.baseurl.VersionInfo import gq.kirmanak.mealient.data.recipes.RecipeRepo -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.BaseUnitTest 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.* -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 { +class BaseURLViewModelTest : BaseUnitTest() { @MockK(relaxUnitFun = true) lateinit var serverInfoRepo: ServerInfoRepo @@ -40,17 +34,11 @@ class BaseURLViewModelTest { @MockK lateinit var versionDataSource: VersionDataSource - @get:Rule - val instantExecutorRule = InstantTaskExecutorRule() - - private val logger: Logger = FakeLogger() - lateinit var subject: BaseURLViewModel @Before - fun setUp() { - MockKAnnotations.init(this) - Dispatchers.setMain(UnconfinedTestDispatcher()) + override fun setUp() { + super.setUp() subject = BaseURLViewModel( serverInfoRepo = serverInfoRepo, authRepo = authRepo, @@ -60,11 +48,6 @@ class BaseURLViewModelTest { ) } - @After - fun tearDown() { - Dispatchers.resetMain() - } - @Test fun `when saveBaseURL expect no version checks given that current URL matches new`() = runTest { setupSaveBaseUrlWithOldUrl() diff --git a/app/src/test/java/gq/kirmanak/mealient/ui/disclaimer/DisclaimerViewModelTest.kt b/app/src/test/java/gq/kirmanak/mealient/ui/disclaimer/DisclaimerViewModelTest.kt index ee950df..19966bb 100644 --- a/app/src/test/java/gq/kirmanak/mealient/ui/disclaimer/DisclaimerViewModelTest.kt +++ b/app/src/test/java/gq/kirmanak/mealient/ui/disclaimer/DisclaimerViewModelTest.kt @@ -2,9 +2,7 @@ package gq.kirmanak.mealient.ui.disclaimer import com.google.common.truth.Truth.assertThat import gq.kirmanak.mealient.data.disclaimer.DisclaimerStorage -import gq.kirmanak.mealient.logging.Logger -import gq.kirmanak.mealient.test.FakeLogger -import io.mockk.MockKAnnotations +import gq.kirmanak.mealient.test.BaseUnitTest import io.mockk.impl.annotations.MockK import kotlinx.coroutines.ExperimentalCoroutinesApi import kotlinx.coroutines.flow.take @@ -15,17 +13,16 @@ import org.junit.Test import java.util.concurrent.TimeUnit @OptIn(ExperimentalCoroutinesApi::class) -class DisclaimerViewModelTest { +class DisclaimerViewModelTest : BaseUnitTest() { + @MockK(relaxUnitFun = true) lateinit var storage: DisclaimerStorage - private val logger: Logger = FakeLogger() - lateinit var subject: DisclaimerViewModel @Before - fun setUp() { - MockKAnnotations.init(this) + override fun setUp() { + super.setUp() subject = DisclaimerViewModel(storage, logger) } 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 22d6fa1..fd817e9 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,32 +1,22 @@ 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 gq.kirmanak.mealient.test.BaseUnitTest 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 -import org.junit.Rule import org.junit.Test @OptIn(ExperimentalCoroutinesApi::class) -class RecipeViewModelTest { +class RecipeViewModelTest : BaseUnitTest() { @MockK lateinit var authRepo: AuthRepo @@ -34,22 +24,6 @@ class RecipeViewModelTest { @MockK(relaxed = true) lateinit var recipeRepo: RecipeRepo - private val logger: Logger = FakeLogger() - - @get:Rule - val instantExecutorRule = InstantTaskExecutorRule() - - @Before - fun setUp() { - MockKAnnotations.init(this) - Dispatchers.setMain(UnconfinedTestDispatcher()) - } - - @After - fun tearDown() { - Dispatchers.resetMain() - } - @Test fun `when authRepo isAuthorized changes to true expect isAuthorized update`() { every { authRepo.isAuthorizedFlow } returns flowOf(false, true) diff --git a/app/src/test/java/gq/kirmanak/mealient/ui/recipes/info/RecipeInfoViewModelTest.kt b/app/src/test/java/gq/kirmanak/mealient/ui/recipes/info/RecipeInfoViewModelTest.kt index 89a8e16..c895e33 100644 --- a/app/src/test/java/gq/kirmanak/mealient/ui/recipes/info/RecipeInfoViewModelTest.kt +++ b/app/src/test/java/gq/kirmanak/mealient/ui/recipes/info/RecipeInfoViewModelTest.kt @@ -1,51 +1,24 @@ package gq.kirmanak.mealient.ui.recipes.info -import androidx.arch.core.executor.testing.InstantTaskExecutorRule import androidx.lifecycle.asFlow import com.google.common.truth.Truth.assertThat import gq.kirmanak.mealient.data.recipes.RecipeRepo import gq.kirmanak.mealient.database.recipe.entity.RecipeIngredientEntity -import gq.kirmanak.mealient.logging.Logger -import gq.kirmanak.mealient.test.FakeLogger +import gq.kirmanak.mealient.test.BaseUnitTest import gq.kirmanak.mealient.test.RecipeImplTestData.FULL_CAKE_INFO_ENTITY -import io.mockk.MockKAnnotations import io.mockk.coEvery import io.mockk.impl.annotations.MockK -import kotlinx.coroutines.Dispatchers import kotlinx.coroutines.ExperimentalCoroutinesApi import kotlinx.coroutines.flow.first -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 -import org.junit.Rule import org.junit.Test @OptIn(ExperimentalCoroutinesApi::class) -class RecipeInfoViewModelTest { - - @get:Rule - val instantExecutorRule = InstantTaskExecutorRule() - - private val logger: Logger = FakeLogger() +class RecipeInfoViewModelTest : BaseUnitTest() { @MockK lateinit var recipeRepo: RecipeRepo - @Before - fun setUp() { - MockKAnnotations.init(this) - Dispatchers.setMain(UnconfinedTestDispatcher()) - - } - - @After - fun tearDown() { - Dispatchers.resetMain() - } - @Test fun `when recipe isn't found then UI state is empty`() = runTest { coEvery { recipeRepo.loadRecipeInfo(eq(RECIPE_ID)) } returns null