From 02b2fbd8a040b31dee55f303e40c4cc1e465b023 Mon Sep 17 00:00:00 2001 From: Mihai-Cristian Condrea Date: Tue, 16 Sep 2025 17:49:29 +0300 Subject: [PATCH] Add MainViewModel delegation tests --- .../ui/screens/main/MainViewModelTest.java | 55 +++++++++---------- 1 file changed, 26 insertions(+), 29 deletions(-) diff --git a/app/src/test/java/com/d4rk/androidtutorials/java/ui/screens/main/MainViewModelTest.java b/app/src/test/java/com/d4rk/androidtutorials/java/ui/screens/main/MainViewModelTest.java index fd66b9ba..3a5c96ac 100644 --- a/app/src/test/java/com/d4rk/androidtutorials/java/ui/screens/main/MainViewModelTest.java +++ b/app/src/test/java/com/d4rk/androidtutorials/java/ui/screens/main/MainViewModelTest.java @@ -1,6 +1,7 @@ package com.d4rk.androidtutorials.java.ui.screens.main; import static org.junit.Assert.assertEquals; +import static org.junit.Assert.assertFalse; import static org.junit.Assert.assertNotNull; import static org.junit.Assert.assertTrue; @@ -37,6 +38,7 @@ public class MainViewModelTest { private ShouldShowStartupScreenUseCase shouldShowStartupScreenUseCase; private MarkStartupScreenShownUseCase markStartupScreenShownUseCase; private GetAppUpdateManagerUseCase getAppUpdateManagerUseCase; + private MainViewModel viewModel; private final String[] themeValues = {"MODE_NIGHT_FOLLOW_SYSTEM", "MODE_NIGHT_NO", "MODE_NIGHT_YES"}; private final String[] bottomNavBarLabelsValues = {"labeled", "selected", "unlabeled"}; @@ -51,15 +53,8 @@ public void setUp() { shouldShowStartupScreenUseCase = Mockito.mock(ShouldShowStartupScreenUseCase.class); markStartupScreenShownUseCase = Mockito.mock(MarkStartupScreenShownUseCase.class); getAppUpdateManagerUseCase = Mockito.mock(GetAppUpdateManagerUseCase.class); - } - - @Test - public void applySettingsUpdatesUiStateForLabeledHome() { - Mockito.when(applyThemeSettingsUseCase.invoke(themeValues)).thenReturn(true); - Mockito.when(getBottomNavLabelVisibilityUseCase.invoke()).thenReturn("labeled"); - Mockito.when(getDefaultTabPreferenceUseCase.invoke()).thenReturn("home"); - MainViewModel viewModel = new MainViewModel( + viewModel = new MainViewModel( applyThemeSettingsUseCase, getBottomNavLabelVisibilityUseCase, getDefaultTabPreferenceUseCase, @@ -68,6 +63,13 @@ public void applySettingsUpdatesUiStateForLabeledHome() { markStartupScreenShownUseCase, getAppUpdateManagerUseCase ); + } + + @Test + public void applySettingsUpdatesUiStateForLabeledHome() { + Mockito.when(applyThemeSettingsUseCase.invoke(themeValues)).thenReturn(true); + Mockito.when(getBottomNavLabelVisibilityUseCase.invoke()).thenReturn("labeled"); + Mockito.when(getDefaultTabPreferenceUseCase.invoke()).thenReturn("home"); List loading = new ArrayList<>(); viewModel.getLoadingState().observeForever(loading::add); @@ -89,16 +91,6 @@ public void applySettingsUpdatesUiStateForSelectedAndroidStudio() { Mockito.when(getBottomNavLabelVisibilityUseCase.invoke()).thenReturn("selected"); Mockito.when(getDefaultTabPreferenceUseCase.invoke()).thenReturn("android_studio"); - MainViewModel viewModel = new MainViewModel( - applyThemeSettingsUseCase, - getBottomNavLabelVisibilityUseCase, - getDefaultTabPreferenceUseCase, - applyLanguageSettingsUseCase, - shouldShowStartupScreenUseCase, - markStartupScreenShownUseCase, - getAppUpdateManagerUseCase - ); - List loading = new ArrayList<>(); viewModel.getLoadingState().observeForever(loading::add); @@ -110,7 +102,7 @@ public void applySettingsUpdatesUiStateForSelectedAndroidStudio() { assertNotNull(state); assertEquals(NavigationBarView.LABEL_VISIBILITY_SELECTED, state.bottomNavVisibility()); assertEquals(R.id.navigation_android_studio, state.defaultNavDestination()); - assertTrue(!state.themeChanged()); + assertFalse(state.themeChanged()); } @Test @@ -119,16 +111,6 @@ public void applySettingsUpdatesUiStateForUnlabeledAbout() { Mockito.when(getBottomNavLabelVisibilityUseCase.invoke()).thenReturn("unlabeled"); Mockito.when(getDefaultTabPreferenceUseCase.invoke()).thenReturn("about"); - MainViewModel viewModel = new MainViewModel( - applyThemeSettingsUseCase, - getBottomNavLabelVisibilityUseCase, - getDefaultTabPreferenceUseCase, - applyLanguageSettingsUseCase, - shouldShowStartupScreenUseCase, - markStartupScreenShownUseCase, - getAppUpdateManagerUseCase - ); - List loading = new ArrayList<>(); viewModel.getLoadingState().observeForever(loading::add); @@ -143,6 +125,21 @@ public void applySettingsUpdatesUiStateForUnlabeledAbout() { assertTrue(state.themeChanged()); } + @Test + public void shouldShowStartupScreenDelegatesToUseCase() { + Mockito.when(shouldShowStartupScreenUseCase.invoke()).thenReturn(false); + + assertFalse(viewModel.shouldShowStartupScreen()); + Mockito.verify(shouldShowStartupScreenUseCase).invoke(); + } + + @Test + public void markStartupScreenShownDelegatesToUseCase() { + viewModel.markStartupScreenShown(); + + Mockito.verify(markStartupScreenShownUseCase).invoke(); + } + private int callVisibilityMode(String value) throws Exception { Method method = MainViewModel.class.getDeclaredMethod( "getVisibilityMode", String.class, String[].class);