Skip to content

Commit 1529a4d

Browse files
Merge pull request #218 from MihaiCristianCondrea/codex/add-tests-for-use-cases-in-home-domain
test: add home domain use case coverage
2 parents 2455e9d + 90920a1 commit 1529a4d

File tree

4 files changed

+92
-91
lines changed

4 files changed

+92
-91
lines changed
Lines changed: 22 additions & 28 deletions
Original file line numberDiff line numberDiff line change
@@ -1,61 +1,55 @@
11
package com.d4rk.androidtutorials.java.domain.home;
22

33
import static org.junit.Assert.assertEquals;
4-
import static org.junit.Assert.assertNull;
54
import static org.junit.Assert.assertThrows;
65
import static org.mockito.Mockito.mock;
76
import static org.mockito.Mockito.verify;
87
import static org.mockito.Mockito.when;
98

109
import com.d4rk.androidtutorials.java.data.repository.HomeRepository;
1110

11+
import org.junit.Before;
1212
import org.junit.Test;
1313

1414
public class GetAppPlayStoreUrlUseCaseTest {
1515

16-
@Test
17-
public void invokeReturnsAppUrl() {
18-
HomeRepository repository = mock(HomeRepository.class);
19-
when(repository.getAppPlayStoreUrl("pkg")).thenReturn("url");
20-
GetAppPlayStoreUrlUseCase useCase = new GetAppPlayStoreUrlUseCase(repository);
16+
private static final String PACKAGE_NAME = "com.example.pkg";
2117

22-
String result = useCase.invoke("pkg");
18+
private HomeRepository repository;
19+
private GetAppPlayStoreUrlUseCase useCase;
2320

24-
assertEquals("url", result);
25-
verify(repository).getAppPlayStoreUrl("pkg");
21+
@Before
22+
public void setUp() {
23+
repository = mock(HomeRepository.class);
24+
useCase = new GetAppPlayStoreUrlUseCase(repository);
2625
}
2726

2827
@Test
29-
public void invokeDelegatesNullPackageName() {
30-
HomeRepository repository = mock(HomeRepository.class);
31-
when(repository.getAppPlayStoreUrl(null)).thenReturn("fallback");
32-
GetAppPlayStoreUrlUseCase useCase = new GetAppPlayStoreUrlUseCase(repository);
28+
public void invokeReturnsUrlForPackage() {
29+
when(repository.getAppPlayStoreUrl(PACKAGE_NAME)).thenReturn("https://play.store/app/com.example.pkg");
3330

34-
String result = useCase.invoke(null);
31+
String result = useCase.invoke(PACKAGE_NAME);
3532

36-
assertEquals("fallback", result);
37-
verify(repository).getAppPlayStoreUrl(null);
33+
assertEquals("https://play.store/app/com.example.pkg", result);
34+
verify(repository).getAppPlayStoreUrl(PACKAGE_NAME);
3835
}
3936

4037
@Test
41-
public void invokeReturnsNullWhenRepositoryReturnsNull() {
42-
HomeRepository repository = mock(HomeRepository.class);
43-
when(repository.getAppPlayStoreUrl("pkg")).thenReturn(null);
44-
GetAppPlayStoreUrlUseCase useCase = new GetAppPlayStoreUrlUseCase(repository);
38+
public void invokeReturnsEmptyUrlWhenRepositoryReturnsEmpty() {
39+
when(repository.getAppPlayStoreUrl(PACKAGE_NAME)).thenReturn("");
4540

46-
String result = useCase.invoke("pkg");
41+
String result = useCase.invoke(PACKAGE_NAME);
4742

48-
assertNull(result);
49-
verify(repository).getAppPlayStoreUrl("pkg");
43+
assertEquals("", result);
44+
verify(repository).getAppPlayStoreUrl(PACKAGE_NAME);
5045
}
5146

5247
@Test
5348
public void invokePropagatesRepositoryException() {
54-
HomeRepository repository = mock(HomeRepository.class);
55-
when(repository.getAppPlayStoreUrl("pkg")).thenThrow(new IllegalStateException("err"));
56-
GetAppPlayStoreUrlUseCase useCase = new GetAppPlayStoreUrlUseCase(repository);
49+
when(repository.getAppPlayStoreUrl(PACKAGE_NAME))
50+
.thenThrow(new IllegalArgumentException("invalid package"));
5751

58-
assertThrows(IllegalStateException.class, () -> useCase.invoke("pkg"));
59-
verify(repository).getAppPlayStoreUrl("pkg");
52+
assertThrows(IllegalArgumentException.class, () -> useCase.invoke(PACKAGE_NAME));
53+
verify(repository).getAppPlayStoreUrl(PACKAGE_NAME);
6054
}
6155
}

app/src/test/java/com/d4rk/androidtutorials/java/domain/home/GetDailyTipUseCaseTest.java

Lines changed: 16 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -8,27 +8,33 @@
88

99
import com.d4rk.androidtutorials.java.data.repository.HomeRepository;
1010

11+
import org.junit.Before;
1112
import org.junit.Test;
1213

1314
public class GetDailyTipUseCaseTest {
1415

16+
private HomeRepository repository;
17+
private GetDailyTipUseCase useCase;
18+
19+
@Before
20+
public void setUp() {
21+
repository = mock(HomeRepository.class);
22+
useCase = new GetDailyTipUseCase(repository);
23+
}
24+
1525
@Test
16-
public void invokeReturnsDailyTip() {
17-
HomeRepository repository = mock(HomeRepository.class);
18-
when(repository.dailyTip()).thenReturn("tip");
19-
GetDailyTipUseCase useCase = new GetDailyTipUseCase(repository);
26+
public void invokeReturnsRepositoryTip() {
27+
when(repository.dailyTip()).thenReturn("Tip of the day");
2028

2129
String result = useCase.invoke();
2230

23-
assertEquals("tip", result);
31+
assertEquals("Tip of the day", result);
2432
verify(repository).dailyTip();
2533
}
2634

2735
@Test
28-
public void invokeHandlesEmptyTip() {
29-
HomeRepository repository = mock(HomeRepository.class);
36+
public void invokeReturnsEmptyTip() {
3037
when(repository.dailyTip()).thenReturn("");
31-
GetDailyTipUseCase useCase = new GetDailyTipUseCase(repository);
3238

3339
String result = useCase.invoke();
3440

@@ -38,11 +44,9 @@ public void invokeHandlesEmptyTip() {
3844

3945
@Test
4046
public void invokePropagatesRepositoryException() {
41-
HomeRepository repository = mock(HomeRepository.class);
42-
when(repository.dailyTip()).thenThrow(new IllegalArgumentException("bad"));
43-
GetDailyTipUseCase useCase = new GetDailyTipUseCase(repository);
47+
when(repository.dailyTip()).thenThrow(new IllegalStateException("not available"));
4448

45-
assertThrows(IllegalArgumentException.class, useCase::invoke);
49+
assertThrows(IllegalStateException.class, useCase::invoke);
4650
verify(repository).dailyTip();
4751
}
4852
}
Lines changed: 18 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -1,49 +1,52 @@
11
package com.d4rk.androidtutorials.java.domain.home;
22

33
import static org.junit.Assert.assertEquals;
4-
import static org.junit.Assert.assertNull;
54
import static org.junit.Assert.assertThrows;
65
import static org.mockito.Mockito.mock;
76
import static org.mockito.Mockito.verify;
87
import static org.mockito.Mockito.when;
98

109
import com.d4rk.androidtutorials.java.data.repository.HomeRepository;
1110

11+
import org.junit.Before;
1212
import org.junit.Test;
1313

1414
public class GetPlayStoreUrlUseCaseTest {
1515

16+
private HomeRepository repository;
17+
private GetPlayStoreUrlUseCase useCase;
18+
19+
@Before
20+
public void setUp() {
21+
repository = mock(HomeRepository.class);
22+
useCase = new GetPlayStoreUrlUseCase(repository);
23+
}
24+
1625
@Test
17-
public void invokeReturnsUrl() {
18-
HomeRepository repository = mock(HomeRepository.class);
19-
when(repository.getPlayStoreUrl()).thenReturn("url");
20-
GetPlayStoreUrlUseCase useCase = new GetPlayStoreUrlUseCase(repository);
26+
public void invokeReturnsRepositoryUrl() {
27+
when(repository.getPlayStoreUrl()).thenReturn("https://play.store/app");
2128

2229
String result = useCase.invoke();
2330

24-
assertEquals("url", result);
31+
assertEquals("https://play.store/app", result);
2532
verify(repository).getPlayStoreUrl();
2633
}
2734

2835
@Test
29-
public void invokeReturnsNullWhenRepositoryReturnsNull() {
30-
HomeRepository repository = mock(HomeRepository.class);
31-
when(repository.getPlayStoreUrl()).thenReturn(null);
32-
GetPlayStoreUrlUseCase useCase = new GetPlayStoreUrlUseCase(repository);
36+
public void invokeReturnsEmptyUrlWhenRepositoryReturnsEmpty() {
37+
when(repository.getPlayStoreUrl()).thenReturn("");
3338

3439
String result = useCase.invoke();
3540

36-
assertNull(result);
41+
assertEquals("", result);
3742
verify(repository).getPlayStoreUrl();
3843
}
3944

4045
@Test
4146
public void invokePropagatesRepositoryException() {
42-
HomeRepository repository = mock(HomeRepository.class);
43-
when(repository.getPlayStoreUrl()).thenThrow(new RuntimeException("fail"));
44-
GetPlayStoreUrlUseCase useCase = new GetPlayStoreUrlUseCase(repository);
47+
when(repository.getPlayStoreUrl()).thenThrow(new IllegalStateException("missing"));
4548

46-
assertThrows(RuntimeException.class, useCase::invoke);
49+
assertThrows(IllegalStateException.class, useCase::invoke);
4750
verify(repository).getPlayStoreUrl();
4851
}
4952
}

app/src/test/java/com/d4rk/androidtutorials/java/domain/home/GetPromotedAppsUseCaseTest.java

Lines changed: 36 additions & 36 deletions
Original file line numberDiff line numberDiff line change
@@ -1,14 +1,15 @@
11
package com.d4rk.androidtutorials.java.domain.home;
22

33
import static org.junit.Assert.assertThrows;
4-
import static org.mockito.Mockito.any;
4+
import static org.mockito.ArgumentMatchers.any;
55
import static org.mockito.Mockito.doThrow;
66
import static org.mockito.Mockito.mock;
77
import static org.mockito.Mockito.verify;
88

99
import com.d4rk.androidtutorials.java.data.model.PromotedApp;
1010
import com.d4rk.androidtutorials.java.data.repository.HomeRepository;
1111

12+
import org.junit.Before;
1213
import org.junit.Test;
1314
import org.mockito.ArgumentCaptor;
1415

@@ -17,62 +18,63 @@
1718

1819
public class GetPromotedAppsUseCaseTest {
1920

20-
@Test
21-
public void invokeCallsRepository() {
22-
HomeRepository repository = mock(HomeRepository.class);
23-
GetPromotedAppsUseCase useCase = new GetPromotedAppsUseCase(repository);
21+
private HomeRepository repository;
22+
private GetPromotedAppsUseCase useCase;
23+
private GetPromotedAppsUseCase.Callback callback;
24+
25+
@Before
26+
public void setUp() {
27+
repository = mock(HomeRepository.class);
28+
useCase = new GetPromotedAppsUseCase(repository);
29+
callback = mock(GetPromotedAppsUseCase.Callback.class);
30+
}
2431

25-
useCase.invoke(apps -> {});
32+
@Test
33+
public void invokeRequestsPromotedAppsFromRepository() {
34+
useCase.invoke(callback);
2635

2736
verify(repository).fetchPromotedApps(any());
2837
}
2938

3039
@Test
31-
public void invokeReturnsAppsThroughCallback() {
32-
HomeRepository repository = mock(HomeRepository.class);
33-
GetPromotedAppsUseCase useCase = new GetPromotedAppsUseCase(repository);
34-
GetPromotedAppsUseCase.Callback callback = mock(GetPromotedAppsUseCase.Callback.class);
40+
public void invokeForwardsRepositoryResultsToCallback() {
41+
ArgumentCaptor<HomeRepository.PromotedAppsCallback> captor =
42+
ArgumentCaptor.forClass(HomeRepository.PromotedAppsCallback.class);
3543

3644
useCase.invoke(callback);
3745

38-
ArgumentCaptor<HomeRepository.PromotedAppsCallback> captor =
39-
ArgumentCaptor.forClass(HomeRepository.PromotedAppsCallback.class);
4046
verify(repository).fetchPromotedApps(captor.capture());
47+
List<PromotedApp> promotedApps = Collections.singletonList(
48+
new PromotedApp("App", "package", "icon")
49+
);
4150

42-
List<PromotedApp> apps = List.of(new PromotedApp("App", "pkg", "icon"));
43-
captor.getValue().onResult(apps);
51+
captor.getValue().onResult(promotedApps);
4452

45-
verify(callback).onResult(apps);
53+
verify(callback).onResult(promotedApps);
4654
}
4755

4856
@Test
49-
public void invokePropagatesEmptyResults() {
50-
HomeRepository repository = mock(HomeRepository.class);
51-
GetPromotedAppsUseCase useCase = new GetPromotedAppsUseCase(repository);
52-
GetPromotedAppsUseCase.Callback callback = mock(GetPromotedAppsUseCase.Callback.class);
57+
public void invokeForwardsEmptyList() {
58+
ArgumentCaptor<HomeRepository.PromotedAppsCallback> captor =
59+
ArgumentCaptor.forClass(HomeRepository.PromotedAppsCallback.class);
5360

5461
useCase.invoke(callback);
5562

56-
ArgumentCaptor<HomeRepository.PromotedAppsCallback> captor =
57-
ArgumentCaptor.forClass(HomeRepository.PromotedAppsCallback.class);
5863
verify(repository).fetchPromotedApps(captor.capture());
64+
List<PromotedApp> promotedApps = Collections.emptyList();
5965

60-
List<PromotedApp> apps = Collections.emptyList();
61-
captor.getValue().onResult(apps);
66+
captor.getValue().onResult(promotedApps);
6267

63-
verify(callback).onResult(apps);
68+
verify(callback).onResult(promotedApps);
6469
}
6570

6671
@Test
67-
public void invokePropagatesNullResults() {
68-
HomeRepository repository = mock(HomeRepository.class);
69-
GetPromotedAppsUseCase useCase = new GetPromotedAppsUseCase(repository);
70-
GetPromotedAppsUseCase.Callback callback = mock(GetPromotedAppsUseCase.Callback.class);
72+
public void invokeForwardsNullList() {
73+
ArgumentCaptor<HomeRepository.PromotedAppsCallback> captor =
74+
ArgumentCaptor.forClass(HomeRepository.PromotedAppsCallback.class);
7175

7276
useCase.invoke(callback);
7377

74-
ArgumentCaptor<HomeRepository.PromotedAppsCallback> captor =
75-
ArgumentCaptor.forClass(HomeRepository.PromotedAppsCallback.class);
7678
verify(repository).fetchPromotedApps(captor.capture());
7779

7880
captor.getValue().onResult(null);
@@ -81,12 +83,10 @@ public void invokePropagatesNullResults() {
8183
}
8284

8385
@Test
84-
public void invokePropagatesRepositoryException() {
85-
HomeRepository repository = mock(HomeRepository.class);
86-
GetPromotedAppsUseCase useCase = new GetPromotedAppsUseCase(repository);
87-
GetPromotedAppsUseCase.Callback callback = mock(GetPromotedAppsUseCase.Callback.class);
88-
doThrow(new IllegalStateException("failure"))
89-
.when(repository).fetchPromotedApps(any());
86+
public void invokePropagatesRepositoryExceptions() {
87+
doThrow(new IllegalStateException("failed"))
88+
.when(repository)
89+
.fetchPromotedApps(any());
9090

9191
assertThrows(IllegalStateException.class, () -> useCase.invoke(callback));
9292
verify(repository).fetchPromotedApps(any());

0 commit comments

Comments
 (0)