From a9f8c7c6a1bb2392091453c5510f3e2dd3fae611 Mon Sep 17 00:00:00 2001 From: Rajiv Rajan Date: Wed, 29 Apr 2020 14:39:34 +0530 Subject: [PATCH 1/2] Unit test cases for DashboardViewModel --- .../in/projecteka/jataayu/ui/dashboard/DashboardPagerAdapter.kt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/app/src/main/java/in/projecteka/jataayu/ui/dashboard/DashboardPagerAdapter.kt b/app/src/main/java/in/projecteka/jataayu/ui/dashboard/DashboardPagerAdapter.kt index 37810faa..731971d7 100644 --- a/app/src/main/java/in/projecteka/jataayu/ui/dashboard/DashboardPagerAdapter.kt +++ b/app/src/main/java/in/projecteka/jataayu/ui/dashboard/DashboardPagerAdapter.kt @@ -7,7 +7,7 @@ import androidx.fragment.app.FragmentActivity import androidx.viewpager2.adapter.FragmentStateAdapter internal class DashboardPagerAdapter(activity: FragmentActivity) : FragmentStateAdapter(activity) { - val listOfFragments = arrayListOf(UserAccountsFragment.newInstance(), ConsentHostFragment.newInstance()) + private val listOfFragments = arrayListOf(UserAccountsFragment.newInstance(), ConsentHostFragment.newInstance()) override fun createFragment(position: Int): Fragment = listOfFragments[position] From 0eb1ade00b4a287143cad47c25af04e5999cc579 Mon Sep 17 00:00:00 2001 From: Rajiv Rajan Date: Wed, 29 Apr 2020 19:21:52 +0530 Subject: [PATCH 2/2] Unit test cases for DashboardViewModel --- .../dashboard/DashboardViewModelTest.kt | 102 ++++++++++++++++++ 1 file changed, 102 insertions(+) create mode 100644 app/src/test/java/in/projecteka/jataayu/dashboard/DashboardViewModelTest.kt diff --git a/app/src/test/java/in/projecteka/jataayu/dashboard/DashboardViewModelTest.kt b/app/src/test/java/in/projecteka/jataayu/dashboard/DashboardViewModelTest.kt new file mode 100644 index 00000000..0e04738d --- /dev/null +++ b/app/src/test/java/in/projecteka/jataayu/dashboard/DashboardViewModelTest.kt @@ -0,0 +1,102 @@ +package `in`.projecteka.jataayu.dashboard + +import `in`.projecteka.jataayu.R +import `in`.projecteka.jataayu.ui.dashboard.DashboardViewModel +import android.view.MenuItem +import androidx.arch.core.executor.testing.InstantTaskExecutorRule +import androidx.lifecycle.Lifecycle +import androidx.lifecycle.LifecycleOwner +import androidx.lifecycle.LifecycleRegistry +import androidx.lifecycle.Observer +import org.junit.Before +import org.junit.Rule +import org.junit.Test +import org.junit.runner.RunWith +import org.mockito.Mock +import org.mockito.Mockito.* +import org.mockito.MockitoAnnotations +import org.mockito.junit.MockitoJUnitRunner + +@RunWith(MockitoJUnitRunner::class) +class DashboardViewModelTest { + + @Mock + private lateinit var showFragmentObserver: Observer + + @Mock + lateinit var lifecycleOwner: LifecycleOwner + + lateinit var lifecycleRegistry: LifecycleRegistry + + @get:Rule + val instantTaskExecutorRule = InstantTaskExecutorRule() + + private var viewModel: DashboardViewModel = DashboardViewModel() + + @Before + fun setup() { + MockitoAnnotations.initMocks(this) + lifecycleRegistry = LifecycleRegistry(lifecycleOwner) + `when`(lifecycleOwner.lifecycle).thenReturn(lifecycleRegistry) + } + + @Test + fun `no event is observed without redirect being called when lifecycle owner is created`() { + lifecycleRegistry.handleLifecycleEvent(Lifecycle.Event.ON_CREATE) + viewModel.showFragmentEvent.observe(lifecycleOwner, showFragmentObserver) + + verify(showFragmentObserver, never()).onChanged(any()) + + } + + @Test + fun `no event is observed when lifecycle owner is destroyed`() { + lifecycleRegistry.handleLifecycleEvent(Lifecycle.Event.ON_DESTROY) + viewModel.showFragmentEvent.observe(lifecycleOwner, showFragmentObserver) + + verify(showFragmentObserver, never()).onChanged(any()) + + } + + @Test + fun `redirected to home when navigation is clicked to show UserAccounts`(){ + val menuItem = mock(MenuItem::class.java) + `when`(menuItem.itemId).thenReturn(R.id.action_accounts) + + lifecycleRegistry.handleLifecycleEvent(Lifecycle.Event.ON_RESUME) + viewModel.showFragmentEvent.observe(lifecycleOwner,showFragmentObserver) + + viewModel.onNavigationItemSelected(menuItem) + + verify(showFragmentObserver, times(1)).onChanged(DashboardViewModel.Show.USER_ACCOUNT) + verify(showFragmentObserver, never()).onChanged(DashboardViewModel.Show.CONSENT_HOME) + } + + @Test + fun `redirected to consents when navigation is clicked to show Consents`(){ + val menuItem = mock(MenuItem::class.java) + `when`(menuItem.itemId).thenReturn(R.id.action_consents) + + lifecycleRegistry.handleLifecycleEvent(Lifecycle.Event.ON_RESUME) + viewModel.showFragmentEvent.observe(lifecycleOwner,showFragmentObserver) + + viewModel.onNavigationItemSelected(menuItem) + + verify(showFragmentObserver, times(1)).onChanged(DashboardViewModel.Show.CONSENT_HOME) + verify(showFragmentObserver, never()).onChanged(DashboardViewModel.Show.USER_ACCOUNT) + } + + @Test + fun `no redirection when neither consent or home is clicked`(){ + val menuItem = mock(MenuItem::class.java) + `when`(menuItem.itemId).thenReturn(R.id.action_settings) + + lifecycleRegistry.handleLifecycleEvent(Lifecycle.Event.ON_CREATE) + viewModel.showFragmentEvent.observe(lifecycleOwner,showFragmentObserver) + + viewModel.onNavigationItemSelected(menuItem) + + verify(showFragmentObserver, never()).onChanged(DashboardViewModel.Show.CONSENT_HOME) + verify(showFragmentObserver, never()).onChanged(DashboardViewModel.Show.USER_ACCOUNT) + } +} \ No newline at end of file