Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Original file line number Diff line number Diff line change
@@ -1,61 +1,55 @@
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;
import static org.mockito.Mockito.when;

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);
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -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();

Expand All @@ -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();
}
}
Original file line number Diff line number Diff line change
@@ -1,49 +1,52 @@
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;
import static org.mockito.Mockito.when;

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();
}
}
Original file line number Diff line number Diff line change
@@ -1,14 +1,15 @@
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;

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;

Expand All @@ -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<HomeRepository.PromotedAppsCallback> captor =
ArgumentCaptor.forClass(HomeRepository.PromotedAppsCallback.class);

useCase.invoke(callback);

ArgumentCaptor<HomeRepository.PromotedAppsCallback> captor =
ArgumentCaptor.forClass(HomeRepository.PromotedAppsCallback.class);
verify(repository).fetchPromotedApps(captor.capture());
List<PromotedApp> promotedApps = Collections.singletonList(
new PromotedApp("App", "package", "icon")
);

List<PromotedApp> 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<HomeRepository.PromotedAppsCallback> captor =
ArgumentCaptor.forClass(HomeRepository.PromotedAppsCallback.class);

useCase.invoke(callback);

ArgumentCaptor<HomeRepository.PromotedAppsCallback> captor =
ArgumentCaptor.forClass(HomeRepository.PromotedAppsCallback.class);
verify(repository).fetchPromotedApps(captor.capture());
List<PromotedApp> promotedApps = Collections.emptyList();

List<PromotedApp> 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<HomeRepository.PromotedAppsCallback> captor =
ArgumentCaptor.forClass(HomeRepository.PromotedAppsCallback.class);

useCase.invoke(callback);

ArgumentCaptor<HomeRepository.PromotedAppsCallback> captor =
ArgumentCaptor.forClass(HomeRepository.PromotedAppsCallback.class);
verify(repository).fetchPromotedApps(captor.capture());

captor.getValue().onResult(null);
Expand All @@ -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());
Expand Down