From 5d960c902ad20df6988b791c36bea11b26870abe Mon Sep 17 00:00:00 2001 From: Shubham Singh Date: Tue, 25 Jan 2022 13:35:32 +0530 Subject: [PATCH] Implemented HomeVMTest --- gradle/wrapper/gradle-wrapper.properties | 6 +- ui-jokes/build.gradle.kts | 1 + .../feat/jokes/ui/joke/home/HomeVMTest.kt | 99 +++++++++++++++++++ 3 files changed, 103 insertions(+), 3 deletions(-) create mode 100644 ui-jokes/src/test/java/com/mutualmobile/feat/jokes/ui/joke/home/HomeVMTest.kt diff --git a/gradle/wrapper/gradle-wrapper.properties b/gradle/wrapper/gradle-wrapper.properties index e2b8017..1a7057d 100644 --- a/gradle/wrapper/gradle-wrapper.properties +++ b/gradle/wrapper/gradle-wrapper.properties @@ -1,6 +1,6 @@ -#Tue Jul 14 15:56:55 IST 2020 +#Tue Jan 25 12:20:13 IST 2022 distributionBase=GRADLE_USER_HOME +distributionUrl=https\://services.gradle.org/distributions/gradle-7.3.3-bin.zip distributionPath=wrapper/dists -zipStoreBase=GRADLE_USER_HOME zipStorePath=wrapper/dists -distributionUrl=https\://services.gradle.org/distributions/gradle-7.0.2-bin.zip +zipStoreBase=GRADLE_USER_HOME diff --git a/ui-jokes/build.gradle.kts b/ui-jokes/build.gradle.kts index 49e23bc..32aa225 100644 --- a/ui-jokes/build.gradle.kts +++ b/ui-jokes/build.gradle.kts @@ -97,4 +97,5 @@ dependencies { testImplementation(TestLib.ROBO_ELECTRIC) testImplementation(TestLib.COROUTINES) testImplementation(TestLib.MOCKK) + testImplementation(TestLib.TURBINE) } \ No newline at end of file diff --git a/ui-jokes/src/test/java/com/mutualmobile/feat/jokes/ui/joke/home/HomeVMTest.kt b/ui-jokes/src/test/java/com/mutualmobile/feat/jokes/ui/joke/home/HomeVMTest.kt new file mode 100644 index 0000000..94a708d --- /dev/null +++ b/ui-jokes/src/test/java/com/mutualmobile/feat/jokes/ui/joke/home/HomeVMTest.kt @@ -0,0 +1,99 @@ +package com.mutualmobile.feat.jokes.ui.joke.home + +import app.cash.turbine.test +import com.mutualmobile.feat.jokes.ui.model.UIJokeMapper +import com.mutualmobile.praxis.data.repository.JokesRepoImpl +import com.mutualmobile.praxis.domain.SafeResult +import com.mutualmobile.praxis.domain.model.DOMJoke +import com.mutualmobile.praxis.domain.model.DOMJokeList +import com.mutualmobile.praxis.domain.usecases.GetFiveRandomJokesUseCase +import com.mutualmobile.praxis.navigator.ComposeNavigator +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.emptyFlow +import kotlinx.coroutines.test.StandardTestDispatcher +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.Test + +@ExperimentalCoroutinesApi +class HomeVMTest { + + private val uiJokesMapper = UIJokeMapper() + + @MockK + private lateinit var navigator: ComposeNavigator + private lateinit var getFiveRandomJokesUseCase: GetFiveRandomJokesUseCase + private lateinit var homeVM: HomeVM + + @MockK + private lateinit var jokesRepoImpl: JokesRepoImpl + + @Before + fun setUp() { + MockKAnnotations.init(this, true) + Dispatchers.setMain(StandardTestDispatcher()) + } + + @After + fun tearDown() { + Dispatchers.resetMain() + } + + @Test + fun `test that loadJokes() completes on success response`() = runTest { + + // This is mocking + coEvery { + navigator.observeResult(any()) + } returns emptyFlow() + + coEvery { + jokesRepoImpl.getFiveRandomJokes() + } returns SafeResult.Success( + data = DOMJokeList( + type = "success", + DOMJokes = listOf( + DOMJoke(0, "Test Joke") + ) + ) + ) + + getFiveRandomJokesUseCase = GetFiveRandomJokesUseCase(jokesRepoImpl) + + homeVM = HomeVM(getFiveRandomJokesUseCase, uiJokesMapper, navigator) + + homeVM.viewState.test { + assert(awaitItem() is HomeViewState.Loading) + assert(awaitItem() is HomeViewState.ShowJokes) + } + } + + @Test + fun `test that loadJokes() fails on failed response`() = runTest { + + // This is mocking + coEvery { + navigator.observeResult(any()) + } returns emptyFlow() + + coEvery { + jokesRepoImpl.getFiveRandomJokes() + } returns SafeResult.Failure() + + getFiveRandomJokesUseCase = GetFiveRandomJokesUseCase(jokesRepoImpl) + + homeVM = HomeVM(getFiveRandomJokesUseCase, uiJokesMapper, navigator) + + homeVM.viewState.test { + assert(awaitItem() is HomeViewState.Loading) + assert(awaitItem() is HomeViewState.Error) + } + } +} \ No newline at end of file