From 52ba9f4e796c4212271323d8cb590d63f80b58db Mon Sep 17 00:00:00 2001 From: Mihai-Cristian Condrea Date: Sun, 14 Sep 2025 08:53:04 +0300 Subject: [PATCH 1/2] test: add DefaultHomeLocalDataSource tests --- .../DefaultHomeLocalDataSourceTest.java | 48 +++++++++++++++++++ 1 file changed, 48 insertions(+) create mode 100644 app/src/test/java/com/d4rk/androidtutorials/java/data/source/DefaultHomeLocalDataSourceTest.java diff --git a/app/src/test/java/com/d4rk/androidtutorials/java/data/source/DefaultHomeLocalDataSourceTest.java b/app/src/test/java/com/d4rk/androidtutorials/java/data/source/DefaultHomeLocalDataSourceTest.java new file mode 100644 index 00000000..2a01b386 --- /dev/null +++ b/app/src/test/java/com/d4rk/androidtutorials/java/data/source/DefaultHomeLocalDataSourceTest.java @@ -0,0 +1,48 @@ +package com.d4rk.androidtutorials.java.data.source; + +import static org.junit.Assert.assertEquals; +import static org.mockito.Mockito.mock; +import static org.mockito.Mockito.mockStatic; +import static org.mockito.Mockito.when; + +import android.content.Context; +import android.content.res.Resources; + +import com.d4rk.androidtutorials.java.R; + +import org.junit.Test; +import org.mockito.MockedStatic; + +public class DefaultHomeLocalDataSourceTest { + + @Test + public void playStoreUrlsFormattedCorrectly() { + DefaultHomeLocalDataSource dataSource = + new DefaultHomeLocalDataSource(mockContextWithTips(new String[]{"tip"})); + assertEquals("https://play.google.com/store/apps/details?id=com.d4rk.androidtutorials", dataSource.getPlayStoreUrl()); + assertEquals("https://play.google.com/store/apps/details?id=pkg", dataSource.getAppPlayStoreUrl("pkg")); + } + + @Test + public void dailyTipUsesEpochDayIndex() { + Context context = mockContextWithTips(new String[]{"tip1", "tip2", "tip3"}); + DefaultHomeLocalDataSource dataSource = new DefaultHomeLocalDataSource(context); + + long days = 5L; // 5 days since epoch -> index = 2 + long millis = days * 24L * 60L * 60L * 1000L; + + try (MockedStatic mocked = mockStatic(System.class)) { + mocked.when(System::currentTimeMillis).thenReturn(millis); + assertEquals("tip3", dataSource.getDailyTip()); + } + } + + private static Context mockContextWithTips(String[] tips) { + Context context = mock(Context.class); + Resources resources = mock(Resources.class); + when(context.getApplicationContext()).thenReturn(context); + when(context.getResources()).thenReturn(resources); + when(resources.getStringArray(R.array.daily_tips)).thenReturn(tips); + return context; + } +} From c6f29893924da57bdeb24f27c46e96a28ce14df4 Mon Sep 17 00:00:00 2001 From: Mihai-Cristian Condrea Date: Sun, 14 Sep 2025 09:19:26 +0300 Subject: [PATCH 2/2] test: remove static time mocking --- .../source/DefaultHomeLocalDataSourceTest.java | 15 +++++---------- 1 file changed, 5 insertions(+), 10 deletions(-) diff --git a/app/src/test/java/com/d4rk/androidtutorials/java/data/source/DefaultHomeLocalDataSourceTest.java b/app/src/test/java/com/d4rk/androidtutorials/java/data/source/DefaultHomeLocalDataSourceTest.java index 2a01b386..bde69e70 100644 --- a/app/src/test/java/com/d4rk/androidtutorials/java/data/source/DefaultHomeLocalDataSourceTest.java +++ b/app/src/test/java/com/d4rk/androidtutorials/java/data/source/DefaultHomeLocalDataSourceTest.java @@ -2,7 +2,6 @@ import static org.junit.Assert.assertEquals; import static org.mockito.Mockito.mock; -import static org.mockito.Mockito.mockStatic; import static org.mockito.Mockito.when; import android.content.Context; @@ -11,7 +10,6 @@ import com.d4rk.androidtutorials.java.R; import org.junit.Test; -import org.mockito.MockedStatic; public class DefaultHomeLocalDataSourceTest { @@ -25,16 +23,13 @@ public void playStoreUrlsFormattedCorrectly() { @Test public void dailyTipUsesEpochDayIndex() { - Context context = mockContextWithTips(new String[]{"tip1", "tip2", "tip3"}); + String[] tips = {"tip1", "tip2", "tip3"}; + Context context = mockContextWithTips(tips); DefaultHomeLocalDataSource dataSource = new DefaultHomeLocalDataSource(context); - long days = 5L; // 5 days since epoch -> index = 2 - long millis = days * 24L * 60L * 60L * 1000L; - - try (MockedStatic mocked = mockStatic(System.class)) { - mocked.when(System::currentTimeMillis).thenReturn(millis); - assertEquals("tip3", dataSource.getDailyTip()); - } + long daysSinceEpoch = System.currentTimeMillis() / (24L * 60L * 60L * 1000L); + int expectedIndex = (int) (daysSinceEpoch % tips.length); + assertEquals(tips[expectedIndex], dataSource.getDailyTip()); } private static Context mockContextWithTips(String[] tips) {