Skip to content

Commit a97c7a0

Browse files
Merge pull request #214 from MihaiCristianCondrea/codex/add-unit-tests-for-mainviewmodel
Add MainViewModel delegation tests
2 parents 086458a + 02b2fbd commit a97c7a0

File tree

1 file changed

+26
-29
lines changed

1 file changed

+26
-29
lines changed

app/src/test/java/com/d4rk/androidtutorials/java/ui/screens/main/MainViewModelTest.java

Lines changed: 26 additions & 29 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,7 @@
11
package com.d4rk.androidtutorials.java.ui.screens.main;
22

33
import static org.junit.Assert.assertEquals;
4+
import static org.junit.Assert.assertFalse;
45
import static org.junit.Assert.assertNotNull;
56
import 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

Comments
 (0)