11package com .d4rk .androidtutorials .java .ui .screens .main ;
22
33import static org .junit .Assert .assertEquals ;
4+ import static org .junit .Assert .assertFalse ;
45import static org .junit .Assert .assertNotNull ;
56import static org .junit .Assert .assertTrue ;
67
@@ -37,6 +38,7 @@ public class MainViewModelTest {
3738 private ShouldShowStartupScreenUseCase shouldShowStartupScreenUseCase ;
3839 private MarkStartupScreenShownUseCase markStartupScreenShownUseCase ;
3940 private GetAppUpdateManagerUseCase getAppUpdateManagerUseCase ;
41+ private MainViewModel viewModel ;
4042
4143 private final String [] themeValues = {"MODE_NIGHT_FOLLOW_SYSTEM" , "MODE_NIGHT_NO" , "MODE_NIGHT_YES" };
4244 private final String [] bottomNavBarLabelsValues = {"labeled" , "selected" , "unlabeled" };
@@ -51,15 +53,8 @@ public void setUp() {
5153 shouldShowStartupScreenUseCase = Mockito .mock (ShouldShowStartupScreenUseCase .class );
5254 markStartupScreenShownUseCase = Mockito .mock (MarkStartupScreenShownUseCase .class );
5355 getAppUpdateManagerUseCase = Mockito .mock (GetAppUpdateManagerUseCase .class );
54- }
55-
56- @ Test
57- public void applySettingsUpdatesUiStateForLabeledHome () {
58- Mockito .when (applyThemeSettingsUseCase .invoke (themeValues )).thenReturn (true );
59- Mockito .when (getBottomNavLabelVisibilityUseCase .invoke ()).thenReturn ("labeled" );
60- Mockito .when (getDefaultTabPreferenceUseCase .invoke ()).thenReturn ("home" );
6156
62- MainViewModel viewModel = new MainViewModel (
57+ viewModel = new MainViewModel (
6358 applyThemeSettingsUseCase ,
6459 getBottomNavLabelVisibilityUseCase ,
6560 getDefaultTabPreferenceUseCase ,
@@ -68,6 +63,13 @@ public void applySettingsUpdatesUiStateForLabeledHome() {
6863 markStartupScreenShownUseCase ,
6964 getAppUpdateManagerUseCase
7065 );
66+ }
67+
68+ @ Test
69+ public void applySettingsUpdatesUiStateForLabeledHome () {
70+ Mockito .when (applyThemeSettingsUseCase .invoke (themeValues )).thenReturn (true );
71+ Mockito .when (getBottomNavLabelVisibilityUseCase .invoke ()).thenReturn ("labeled" );
72+ Mockito .when (getDefaultTabPreferenceUseCase .invoke ()).thenReturn ("home" );
7173
7274 List <Boolean > loading = new ArrayList <>();
7375 viewModel .getLoadingState ().observeForever (loading ::add );
@@ -89,16 +91,6 @@ public void applySettingsUpdatesUiStateForSelectedAndroidStudio() {
8991 Mockito .when (getBottomNavLabelVisibilityUseCase .invoke ()).thenReturn ("selected" );
9092 Mockito .when (getDefaultTabPreferenceUseCase .invoke ()).thenReturn ("android_studio" );
9193
92- MainViewModel viewModel = new MainViewModel (
93- applyThemeSettingsUseCase ,
94- getBottomNavLabelVisibilityUseCase ,
95- getDefaultTabPreferenceUseCase ,
96- applyLanguageSettingsUseCase ,
97- shouldShowStartupScreenUseCase ,
98- markStartupScreenShownUseCase ,
99- getAppUpdateManagerUseCase
100- );
101-
10294 List <Boolean > loading = new ArrayList <>();
10395 viewModel .getLoadingState ().observeForever (loading ::add );
10496
@@ -110,7 +102,7 @@ public void applySettingsUpdatesUiStateForSelectedAndroidStudio() {
110102 assertNotNull (state );
111103 assertEquals (NavigationBarView .LABEL_VISIBILITY_SELECTED , state .bottomNavVisibility ());
112104 assertEquals (R .id .navigation_android_studio , state .defaultNavDestination ());
113- assertTrue (! state .themeChanged ());
105+ assertFalse ( state .themeChanged ());
114106 }
115107
116108 @ Test
@@ -119,16 +111,6 @@ public void applySettingsUpdatesUiStateForUnlabeledAbout() {
119111 Mockito .when (getBottomNavLabelVisibilityUseCase .invoke ()).thenReturn ("unlabeled" );
120112 Mockito .when (getDefaultTabPreferenceUseCase .invoke ()).thenReturn ("about" );
121113
122- MainViewModel viewModel = new MainViewModel (
123- applyThemeSettingsUseCase ,
124- getBottomNavLabelVisibilityUseCase ,
125- getDefaultTabPreferenceUseCase ,
126- applyLanguageSettingsUseCase ,
127- shouldShowStartupScreenUseCase ,
128- markStartupScreenShownUseCase ,
129- getAppUpdateManagerUseCase
130- );
131-
132114 List <Boolean > loading = new ArrayList <>();
133115 viewModel .getLoadingState ().observeForever (loading ::add );
134116
@@ -143,6 +125,21 @@ public void applySettingsUpdatesUiStateForUnlabeledAbout() {
143125 assertTrue (state .themeChanged ());
144126 }
145127
128+ @ Test
129+ public void shouldShowStartupScreenDelegatesToUseCase () {
130+ Mockito .when (shouldShowStartupScreenUseCase .invoke ()).thenReturn (false );
131+
132+ assertFalse (viewModel .shouldShowStartupScreen ());
133+ Mockito .verify (shouldShowStartupScreenUseCase ).invoke ();
134+ }
135+
136+ @ Test
137+ public void markStartupScreenShownDelegatesToUseCase () {
138+ viewModel .markStartupScreenShown ();
139+
140+ Mockito .verify (markStartupScreenShownUseCase ).invoke ();
141+ }
142+
146143 private int callVisibilityMode (String value ) throws Exception {
147144 Method method = MainViewModel .class .getDeclaredMethod (
148145 "getVisibilityMode" , String .class , String [].class );
0 commit comments