From 9bfcd770a9046e7bf0b626e2964e72ebce881849 Mon Sep 17 00:00:00 2001 From: Mihai-Cristian Condrea Date: Tue, 16 Sep 2025 17:51:11 +0300 Subject: [PATCH] test: expand DefaultMainRepository unit coverage --- .../repository/DefaultMainRepositoryTest.java | 57 +++++++++++++++---- 1 file changed, 47 insertions(+), 10 deletions(-) diff --git a/app/src/test/java/com/d4rk/androidtutorials/java/data/repository/DefaultMainRepositoryTest.java b/app/src/test/java/com/d4rk/androidtutorials/java/data/repository/DefaultMainRepositoryTest.java index b3ca7e15..ac498089 100644 --- a/app/src/test/java/com/d4rk/androidtutorials/java/data/repository/DefaultMainRepositoryTest.java +++ b/app/src/test/java/com/d4rk/androidtutorials/java/data/repository/DefaultMainRepositoryTest.java @@ -2,9 +2,11 @@ import static org.junit.Assert.assertEquals; import static org.junit.Assert.assertFalse; +import static org.junit.Assert.assertNotNull; import static org.junit.Assert.assertSame; import static org.junit.Assert.assertTrue; import static org.mockito.ArgumentMatchers.anyInt; +import static org.mockito.ArgumentMatchers.any; import static org.mockito.ArgumentMatchers.anyString; import static org.mockito.Mockito.mock; import static org.mockito.Mockito.mockStatic; @@ -81,19 +83,32 @@ public void tearDown() { @Test public void applyThemeSettings_noChangeWhenPreferenceSame() { defaultPrefs.edit().putString("theme", "light").apply(); - AppCompatDelegate.setDefaultNightMode(AppCompatDelegate.MODE_NIGHT_NO); - boolean changed = repository.applyThemeSettings(new String[]{"system", "light", "dark", "auto"}); - assertFalse(changed); - assertEquals(AppCompatDelegate.MODE_NIGHT_NO, AppCompatDelegate.getDefaultNightMode()); + + try (MockedStatic appCompatDelegate = mockStatic(AppCompatDelegate.class)) { + appCompatDelegate.when(AppCompatDelegate::getDefaultNightMode).thenReturn(AppCompatDelegate.MODE_NIGHT_NO); + + boolean changed = repository.applyThemeSettings(new String[]{"system", "light", "dark", "auto"}); + + assertFalse(changed); + appCompatDelegate.verify(AppCompatDelegate::getDefaultNightMode); + appCompatDelegate.verifyNoMoreInteractions(); + } } @Test public void applyThemeSettings_changesWhenPreferenceDiffers() { defaultPrefs.edit().putString("theme", "dark").apply(); - AppCompatDelegate.setDefaultNightMode(AppCompatDelegate.MODE_NIGHT_NO); - boolean changed = repository.applyThemeSettings(new String[]{"system", "light", "dark", "auto"}); - assertTrue(changed); - assertEquals(AppCompatDelegate.MODE_NIGHT_YES, AppCompatDelegate.getDefaultNightMode()); + + try (MockedStatic appCompatDelegate = mockStatic(AppCompatDelegate.class)) { + appCompatDelegate.when(AppCompatDelegate::getDefaultNightMode).thenReturn(AppCompatDelegate.MODE_NIGHT_NO); + + boolean changed = repository.applyThemeSettings(new String[]{"system", "light", "dark", "auto"}); + + assertTrue(changed); + appCompatDelegate.verify(AppCompatDelegate::getDefaultNightMode); + appCompatDelegate.verify(() -> AppCompatDelegate.setDefaultNightMode(AppCompatDelegate.MODE_NIGHT_YES)); + appCompatDelegate.verifyNoMoreInteractions(); + } } @Test @@ -104,6 +119,12 @@ public void getBottomNavLabelVisibilityAndDefaultTabPreferenceReturnStoredValues assertEquals("search", repository.getDefaultTabPreference()); } + @Test + public void getBottomNavLabelVisibilityAndDefaultTabPreferenceReturnDefaultValues() { + assertEquals("never", repository.getBottomNavLabelVisibility()); + assertEquals("home", repository.getDefaultTabPreference()); + } + @Test public void startupScreenDefaultsTrueAndFlipsAfterMark() { assertTrue(repository.shouldShowStartupScreen()); @@ -114,8 +135,24 @@ public void startupScreenDefaultsTrueAndFlipsAfterMark() { @Test public void applyLanguageSettings_setsLocales() { defaultPrefs.edit().putString("language", "fr").apply(); - repository.applyLanguageSettings(); - assertEquals("fr", AppCompatDelegate.getApplicationLocales().toLanguageTags()); + + final LocaleListCompat[] capturedLocale = new LocaleListCompat[1]; + + try (MockedStatic appCompatDelegate = mockStatic(AppCompatDelegate.class)) { + appCompatDelegate + .when(() -> AppCompatDelegate.setApplicationLocales(any(LocaleListCompat.class))) + .thenAnswer(invocation -> { + capturedLocale[0] = invocation.getArgument(0); + return null; + }); + + repository.applyLanguageSettings(); + + assertNotNull(capturedLocale[0]); + assertEquals("fr", capturedLocale[0].toLanguageTags()); + appCompatDelegate.verify(() -> AppCompatDelegate.setApplicationLocales(capturedLocale[0])); + appCompatDelegate.verifyNoMoreInteractions(); + } } @Test