diff --git a/app/src/test/java/com/d4rk/androidtutorials/java/domain/home/GetAppPlayStoreUrlUseCaseTest.java b/app/src/test/java/com/d4rk/androidtutorials/java/domain/home/GetAppPlayStoreUrlUseCaseTest.java index 10dd81db..d54474f2 100644 --- a/app/src/test/java/com/d4rk/androidtutorials/java/domain/home/GetAppPlayStoreUrlUseCaseTest.java +++ b/app/src/test/java/com/d4rk/androidtutorials/java/domain/home/GetAppPlayStoreUrlUseCaseTest.java @@ -1,7 +1,6 @@ package com.d4rk.androidtutorials.java.domain.home; import static org.junit.Assert.assertEquals; -import static org.junit.Assert.assertNull; import static org.junit.Assert.assertThrows; import static org.mockito.Mockito.mock; import static org.mockito.Mockito.verify; @@ -9,53 +8,48 @@ import com.d4rk.androidtutorials.java.data.repository.HomeRepository; +import org.junit.Before; import org.junit.Test; public class GetAppPlayStoreUrlUseCaseTest { - @Test - public void invokeReturnsAppUrl() { - HomeRepository repository = mock(HomeRepository.class); - when(repository.getAppPlayStoreUrl("pkg")).thenReturn("url"); - GetAppPlayStoreUrlUseCase useCase = new GetAppPlayStoreUrlUseCase(repository); + private static final String PACKAGE_NAME = "com.example.pkg"; - String result = useCase.invoke("pkg"); + private HomeRepository repository; + private GetAppPlayStoreUrlUseCase useCase; - assertEquals("url", result); - verify(repository).getAppPlayStoreUrl("pkg"); + @Before + public void setUp() { + repository = mock(HomeRepository.class); + useCase = new GetAppPlayStoreUrlUseCase(repository); } @Test - public void invokeDelegatesNullPackageName() { - HomeRepository repository = mock(HomeRepository.class); - when(repository.getAppPlayStoreUrl(null)).thenReturn("fallback"); - GetAppPlayStoreUrlUseCase useCase = new GetAppPlayStoreUrlUseCase(repository); + public void invokeReturnsUrlForPackage() { + when(repository.getAppPlayStoreUrl(PACKAGE_NAME)).thenReturn("https://play.store/app/com.example.pkg"); - String result = useCase.invoke(null); + String result = useCase.invoke(PACKAGE_NAME); - assertEquals("fallback", result); - verify(repository).getAppPlayStoreUrl(null); + assertEquals("https://play.store/app/com.example.pkg", result); + verify(repository).getAppPlayStoreUrl(PACKAGE_NAME); } @Test - public void invokeReturnsNullWhenRepositoryReturnsNull() { - HomeRepository repository = mock(HomeRepository.class); - when(repository.getAppPlayStoreUrl("pkg")).thenReturn(null); - GetAppPlayStoreUrlUseCase useCase = new GetAppPlayStoreUrlUseCase(repository); + public void invokeReturnsEmptyUrlWhenRepositoryReturnsEmpty() { + when(repository.getAppPlayStoreUrl(PACKAGE_NAME)).thenReturn(""); - String result = useCase.invoke("pkg"); + String result = useCase.invoke(PACKAGE_NAME); - assertNull(result); - verify(repository).getAppPlayStoreUrl("pkg"); + assertEquals("", result); + verify(repository).getAppPlayStoreUrl(PACKAGE_NAME); } @Test public void invokePropagatesRepositoryException() { - HomeRepository repository = mock(HomeRepository.class); - when(repository.getAppPlayStoreUrl("pkg")).thenThrow(new IllegalStateException("err")); - GetAppPlayStoreUrlUseCase useCase = new GetAppPlayStoreUrlUseCase(repository); + when(repository.getAppPlayStoreUrl(PACKAGE_NAME)) + .thenThrow(new IllegalArgumentException("invalid package")); - assertThrows(IllegalStateException.class, () -> useCase.invoke("pkg")); - verify(repository).getAppPlayStoreUrl("pkg"); + assertThrows(IllegalArgumentException.class, () -> useCase.invoke(PACKAGE_NAME)); + verify(repository).getAppPlayStoreUrl(PACKAGE_NAME); } } diff --git a/app/src/test/java/com/d4rk/androidtutorials/java/domain/home/GetDailyTipUseCaseTest.java b/app/src/test/java/com/d4rk/androidtutorials/java/domain/home/GetDailyTipUseCaseTest.java index 63adaee6..fde253ee 100644 --- a/app/src/test/java/com/d4rk/androidtutorials/java/domain/home/GetDailyTipUseCaseTest.java +++ b/app/src/test/java/com/d4rk/androidtutorials/java/domain/home/GetDailyTipUseCaseTest.java @@ -8,27 +8,33 @@ import com.d4rk.androidtutorials.java.data.repository.HomeRepository; +import org.junit.Before; import org.junit.Test; public class GetDailyTipUseCaseTest { + private HomeRepository repository; + private GetDailyTipUseCase useCase; + + @Before + public void setUp() { + repository = mock(HomeRepository.class); + useCase = new GetDailyTipUseCase(repository); + } + @Test - public void invokeReturnsDailyTip() { - HomeRepository repository = mock(HomeRepository.class); - when(repository.dailyTip()).thenReturn("tip"); - GetDailyTipUseCase useCase = new GetDailyTipUseCase(repository); + public void invokeReturnsRepositoryTip() { + when(repository.dailyTip()).thenReturn("Tip of the day"); String result = useCase.invoke(); - assertEquals("tip", result); + assertEquals("Tip of the day", result); verify(repository).dailyTip(); } @Test - public void invokeHandlesEmptyTip() { - HomeRepository repository = mock(HomeRepository.class); + public void invokeReturnsEmptyTip() { when(repository.dailyTip()).thenReturn(""); - GetDailyTipUseCase useCase = new GetDailyTipUseCase(repository); String result = useCase.invoke(); @@ -38,11 +44,9 @@ public void invokeHandlesEmptyTip() { @Test public void invokePropagatesRepositoryException() { - HomeRepository repository = mock(HomeRepository.class); - when(repository.dailyTip()).thenThrow(new IllegalArgumentException("bad")); - GetDailyTipUseCase useCase = new GetDailyTipUseCase(repository); + when(repository.dailyTip()).thenThrow(new IllegalStateException("not available")); - assertThrows(IllegalArgumentException.class, useCase::invoke); + assertThrows(IllegalStateException.class, useCase::invoke); verify(repository).dailyTip(); } } diff --git a/app/src/test/java/com/d4rk/androidtutorials/java/domain/home/GetPlayStoreUrlUseCaseTest.java b/app/src/test/java/com/d4rk/androidtutorials/java/domain/home/GetPlayStoreUrlUseCaseTest.java index e3f2aca1..e82131a0 100644 --- a/app/src/test/java/com/d4rk/androidtutorials/java/domain/home/GetPlayStoreUrlUseCaseTest.java +++ b/app/src/test/java/com/d4rk/androidtutorials/java/domain/home/GetPlayStoreUrlUseCaseTest.java @@ -1,7 +1,6 @@ package com.d4rk.androidtutorials.java.domain.home; import static org.junit.Assert.assertEquals; -import static org.junit.Assert.assertNull; import static org.junit.Assert.assertThrows; import static org.mockito.Mockito.mock; import static org.mockito.Mockito.verify; @@ -9,41 +8,45 @@ import com.d4rk.androidtutorials.java.data.repository.HomeRepository; +import org.junit.Before; import org.junit.Test; public class GetPlayStoreUrlUseCaseTest { + private HomeRepository repository; + private GetPlayStoreUrlUseCase useCase; + + @Before + public void setUp() { + repository = mock(HomeRepository.class); + useCase = new GetPlayStoreUrlUseCase(repository); + } + @Test - public void invokeReturnsUrl() { - HomeRepository repository = mock(HomeRepository.class); - when(repository.getPlayStoreUrl()).thenReturn("url"); - GetPlayStoreUrlUseCase useCase = new GetPlayStoreUrlUseCase(repository); + public void invokeReturnsRepositoryUrl() { + when(repository.getPlayStoreUrl()).thenReturn("https://play.store/app"); String result = useCase.invoke(); - assertEquals("url", result); + assertEquals("https://play.store/app", result); verify(repository).getPlayStoreUrl(); } @Test - public void invokeReturnsNullWhenRepositoryReturnsNull() { - HomeRepository repository = mock(HomeRepository.class); - when(repository.getPlayStoreUrl()).thenReturn(null); - GetPlayStoreUrlUseCase useCase = new GetPlayStoreUrlUseCase(repository); + public void invokeReturnsEmptyUrlWhenRepositoryReturnsEmpty() { + when(repository.getPlayStoreUrl()).thenReturn(""); String result = useCase.invoke(); - assertNull(result); + assertEquals("", result); verify(repository).getPlayStoreUrl(); } @Test public void invokePropagatesRepositoryException() { - HomeRepository repository = mock(HomeRepository.class); - when(repository.getPlayStoreUrl()).thenThrow(new RuntimeException("fail")); - GetPlayStoreUrlUseCase useCase = new GetPlayStoreUrlUseCase(repository); + when(repository.getPlayStoreUrl()).thenThrow(new IllegalStateException("missing")); - assertThrows(RuntimeException.class, useCase::invoke); + assertThrows(IllegalStateException.class, useCase::invoke); verify(repository).getPlayStoreUrl(); } } diff --git a/app/src/test/java/com/d4rk/androidtutorials/java/domain/home/GetPromotedAppsUseCaseTest.java b/app/src/test/java/com/d4rk/androidtutorials/java/domain/home/GetPromotedAppsUseCaseTest.java index 271a1627..65fcd8c4 100644 --- a/app/src/test/java/com/d4rk/androidtutorials/java/domain/home/GetPromotedAppsUseCaseTest.java +++ b/app/src/test/java/com/d4rk/androidtutorials/java/domain/home/GetPromotedAppsUseCaseTest.java @@ -1,7 +1,7 @@ package com.d4rk.androidtutorials.java.domain.home; import static org.junit.Assert.assertThrows; -import static org.mockito.Mockito.any; +import static org.mockito.ArgumentMatchers.any; import static org.mockito.Mockito.doThrow; import static org.mockito.Mockito.mock; import static org.mockito.Mockito.verify; @@ -9,6 +9,7 @@ import com.d4rk.androidtutorials.java.data.model.PromotedApp; import com.d4rk.androidtutorials.java.data.repository.HomeRepository; +import org.junit.Before; import org.junit.Test; import org.mockito.ArgumentCaptor; @@ -17,62 +18,63 @@ public class GetPromotedAppsUseCaseTest { - @Test - public void invokeCallsRepository() { - HomeRepository repository = mock(HomeRepository.class); - GetPromotedAppsUseCase useCase = new GetPromotedAppsUseCase(repository); + private HomeRepository repository; + private GetPromotedAppsUseCase useCase; + private GetPromotedAppsUseCase.Callback callback; + + @Before + public void setUp() { + repository = mock(HomeRepository.class); + useCase = new GetPromotedAppsUseCase(repository); + callback = mock(GetPromotedAppsUseCase.Callback.class); + } - useCase.invoke(apps -> {}); + @Test + public void invokeRequestsPromotedAppsFromRepository() { + useCase.invoke(callback); verify(repository).fetchPromotedApps(any()); } @Test - public void invokeReturnsAppsThroughCallback() { - HomeRepository repository = mock(HomeRepository.class); - GetPromotedAppsUseCase useCase = new GetPromotedAppsUseCase(repository); - GetPromotedAppsUseCase.Callback callback = mock(GetPromotedAppsUseCase.Callback.class); + public void invokeForwardsRepositoryResultsToCallback() { + ArgumentCaptor captor = + ArgumentCaptor.forClass(HomeRepository.PromotedAppsCallback.class); useCase.invoke(callback); - ArgumentCaptor captor = - ArgumentCaptor.forClass(HomeRepository.PromotedAppsCallback.class); verify(repository).fetchPromotedApps(captor.capture()); + List promotedApps = Collections.singletonList( + new PromotedApp("App", "package", "icon") + ); - List apps = List.of(new PromotedApp("App", "pkg", "icon")); - captor.getValue().onResult(apps); + captor.getValue().onResult(promotedApps); - verify(callback).onResult(apps); + verify(callback).onResult(promotedApps); } @Test - public void invokePropagatesEmptyResults() { - HomeRepository repository = mock(HomeRepository.class); - GetPromotedAppsUseCase useCase = new GetPromotedAppsUseCase(repository); - GetPromotedAppsUseCase.Callback callback = mock(GetPromotedAppsUseCase.Callback.class); + public void invokeForwardsEmptyList() { + ArgumentCaptor captor = + ArgumentCaptor.forClass(HomeRepository.PromotedAppsCallback.class); useCase.invoke(callback); - ArgumentCaptor captor = - ArgumentCaptor.forClass(HomeRepository.PromotedAppsCallback.class); verify(repository).fetchPromotedApps(captor.capture()); + List promotedApps = Collections.emptyList(); - List apps = Collections.emptyList(); - captor.getValue().onResult(apps); + captor.getValue().onResult(promotedApps); - verify(callback).onResult(apps); + verify(callback).onResult(promotedApps); } @Test - public void invokePropagatesNullResults() { - HomeRepository repository = mock(HomeRepository.class); - GetPromotedAppsUseCase useCase = new GetPromotedAppsUseCase(repository); - GetPromotedAppsUseCase.Callback callback = mock(GetPromotedAppsUseCase.Callback.class); + public void invokeForwardsNullList() { + ArgumentCaptor captor = + ArgumentCaptor.forClass(HomeRepository.PromotedAppsCallback.class); useCase.invoke(callback); - ArgumentCaptor captor = - ArgumentCaptor.forClass(HomeRepository.PromotedAppsCallback.class); verify(repository).fetchPromotedApps(captor.capture()); captor.getValue().onResult(null); @@ -81,12 +83,10 @@ public void invokePropagatesNullResults() { } @Test - public void invokePropagatesRepositoryException() { - HomeRepository repository = mock(HomeRepository.class); - GetPromotedAppsUseCase useCase = new GetPromotedAppsUseCase(repository); - GetPromotedAppsUseCase.Callback callback = mock(GetPromotedAppsUseCase.Callback.class); - doThrow(new IllegalStateException("failure")) - .when(repository).fetchPromotedApps(any()); + public void invokePropagatesRepositoryExceptions() { + doThrow(new IllegalStateException("failed")) + .when(repository) + .fetchPromotedApps(any()); assertThrows(IllegalStateException.class, () -> useCase.invoke(callback)); verify(repository).fetchPromotedApps(any());