Skip to content

Commit c5bbd66

Browse files
Merge pull request #205 from MihaiCristianCondrea/codex/add-unit-tests-for-domain-packages
Add domain use case unit tests
2 parents 3fe6eaa + a734d2f commit c5bbd66

28 files changed

+1308
-0
lines changed

app/src/test/java/com/d4rk/androidtutorials/java/domain/about/GetCurrentYearUseCaseTest.java

Lines changed: 24 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,8 @@
11
package com.d4rk.androidtutorials.java.domain.about;
22

33
import static org.junit.Assert.assertEquals;
4+
import static org.junit.Assert.assertNull;
5+
import static org.junit.Assert.assertThrows;
46
import static org.mockito.Mockito.mock;
57
import static org.mockito.Mockito.verify;
68
import static org.mockito.Mockito.when;
@@ -22,4 +24,26 @@ public void invokeReturnsRepositoryCurrentYear() {
2224
assertEquals("2030", result);
2325
verify(repository).getCurrentYear();
2426
}
27+
28+
@Test
29+
public void invokeAllowsNullYear() {
30+
AboutRepository repository = mock(AboutRepository.class);
31+
when(repository.getCurrentYear()).thenReturn(null);
32+
GetCurrentYearUseCase useCase = new GetCurrentYearUseCase(repository);
33+
34+
String result = useCase.invoke();
35+
36+
assertNull(result);
37+
verify(repository).getCurrentYear();
38+
}
39+
40+
@Test
41+
public void invokePropagatesRepositoryException() {
42+
AboutRepository repository = mock(AboutRepository.class);
43+
when(repository.getCurrentYear()).thenThrow(new IllegalStateException("boom"));
44+
GetCurrentYearUseCase useCase = new GetCurrentYearUseCase(repository);
45+
46+
assertThrows(IllegalStateException.class, useCase::invoke);
47+
verify(repository).getCurrentYear();
48+
}
2549
}

app/src/test/java/com/d4rk/androidtutorials/java/domain/about/GetVersionStringUseCaseTest.java

Lines changed: 24 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,8 @@
11
package com.d4rk.androidtutorials.java.domain.about;
22

33
import static org.junit.Assert.assertEquals;
4+
import static org.junit.Assert.assertNull;
5+
import static org.junit.Assert.assertThrows;
46
import static org.mockito.Mockito.mock;
57
import static org.mockito.Mockito.verify;
68
import static org.mockito.Mockito.when;
@@ -22,4 +24,26 @@ public void invokeReturnsRepositoryVersionString() {
2224
assertEquals("v9.9.9", result);
2325
verify(repository).getVersionString();
2426
}
27+
28+
@Test
29+
public void invokeAllowsNullVersionString() {
30+
AboutRepository repository = mock(AboutRepository.class);
31+
when(repository.getVersionString()).thenReturn(null);
32+
GetVersionStringUseCase useCase = new GetVersionStringUseCase(repository);
33+
34+
String result = useCase.invoke();
35+
36+
assertNull(result);
37+
verify(repository).getVersionString();
38+
}
39+
40+
@Test
41+
public void invokePropagatesRepositoryException() {
42+
AboutRepository repository = mock(AboutRepository.class);
43+
when(repository.getVersionString()).thenThrow(new IllegalArgumentException("error"));
44+
GetVersionStringUseCase useCase = new GetVersionStringUseCase(repository);
45+
46+
assertThrows(IllegalArgumentException.class, useCase::invoke);
47+
verify(repository).getVersionString();
48+
}
2549
}

app/src/test/java/com/d4rk/androidtutorials/java/domain/android/GetLessonUseCaseTest.java

Lines changed: 24 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,8 @@
11
package com.d4rk.androidtutorials.java.domain.android;
22

3+
import static org.junit.Assert.assertNull;
34
import static org.junit.Assert.assertSame;
5+
import static org.junit.Assert.assertThrows;
46
import static org.mockito.Mockito.mock;
57
import static org.mockito.Mockito.verify;
68
import static org.mockito.Mockito.when;
@@ -23,5 +25,27 @@ public void invokeReturnsLesson() {
2325
assertSame(lesson, result);
2426
verify(repository).getLesson("intro");
2527
}
28+
29+
@Test
30+
public void invokeReturnsNullWhenRepositoryReturnsNull() {
31+
LessonRepository repository = mock(LessonRepository.class);
32+
when(repository.getLesson("advanced")).thenReturn(null);
33+
GetLessonUseCase useCase = new GetLessonUseCase(repository);
34+
35+
LessonRepository.Lesson result = useCase.invoke("advanced");
36+
37+
assertNull(result);
38+
verify(repository).getLesson("advanced");
39+
}
40+
41+
@Test
42+
public void invokePropagatesRepositoryException() {
43+
LessonRepository repository = mock(LessonRepository.class);
44+
when(repository.getLesson("intro")).thenThrow(new IllegalStateException("failure"));
45+
GetLessonUseCase useCase = new GetLessonUseCase(repository);
46+
47+
assertThrows(IllegalStateException.class, () -> useCase.invoke("intro"));
48+
verify(repository).getLesson("intro");
49+
}
2650
}
2751

Lines changed: 63 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,63 @@
1+
package com.d4rk.androidtutorials.java.domain.help;
2+
3+
import static org.junit.Assert.assertThrows;
4+
import static org.mockito.Mockito.doThrow;
5+
import static org.mockito.Mockito.mock;
6+
import static org.mockito.Mockito.verify;
7+
8+
import android.app.Activity;
9+
10+
import com.d4rk.androidtutorials.java.data.repository.HelpRepository;
11+
import com.google.android.play.core.review.ReviewInfo;
12+
13+
import org.junit.Test;
14+
15+
public class LaunchReviewFlowUseCaseTest {
16+
17+
@Test
18+
public void invokeDelegatesToRepository() {
19+
HelpRepository repository = mock(HelpRepository.class);
20+
Activity activity = mock(Activity.class);
21+
ReviewInfo info = mock(ReviewInfo.class);
22+
LaunchReviewFlowUseCase useCase = new LaunchReviewFlowUseCase(repository);
23+
24+
useCase.invoke(activity, info);
25+
26+
verify(repository).launchReviewFlow(activity, info);
27+
}
28+
29+
@Test
30+
public void invokeAllowsNullActivity() {
31+
HelpRepository repository = mock(HelpRepository.class);
32+
ReviewInfo info = mock(ReviewInfo.class);
33+
LaunchReviewFlowUseCase useCase = new LaunchReviewFlowUseCase(repository);
34+
35+
useCase.invoke(null, info);
36+
37+
verify(repository).launchReviewFlow(null, info);
38+
}
39+
40+
@Test
41+
public void invokeAllowsNullReviewInfo() {
42+
HelpRepository repository = mock(HelpRepository.class);
43+
Activity activity = mock(Activity.class);
44+
LaunchReviewFlowUseCase useCase = new LaunchReviewFlowUseCase(repository);
45+
46+
useCase.invoke(activity, null);
47+
48+
verify(repository).launchReviewFlow(activity, null);
49+
}
50+
51+
@Test
52+
public void invokePropagatesRepositoryException() {
53+
HelpRepository repository = mock(HelpRepository.class);
54+
Activity activity = mock(Activity.class);
55+
ReviewInfo info = mock(ReviewInfo.class);
56+
LaunchReviewFlowUseCase useCase = new LaunchReviewFlowUseCase(repository);
57+
doThrow(new IllegalArgumentException("failure"))
58+
.when(repository).launchReviewFlow(activity, info);
59+
60+
assertThrows(IllegalArgumentException.class, () -> useCase.invoke(activity, info));
61+
verify(repository).launchReviewFlow(activity, info);
62+
}
63+
}
Lines changed: 46 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,46 @@
1+
package com.d4rk.androidtutorials.java.domain.help;
2+
3+
import static org.junit.Assert.assertThrows;
4+
import static org.mockito.Mockito.doThrow;
5+
import static org.mockito.Mockito.mock;
6+
import static org.mockito.Mockito.verify;
7+
8+
import com.d4rk.androidtutorials.java.data.repository.HelpRepository;
9+
10+
import org.junit.Test;
11+
12+
public class RequestReviewFlowUseCaseTest {
13+
14+
@Test
15+
public void invokeDelegatesToRepository() {
16+
HelpRepository repository = mock(HelpRepository.class);
17+
HelpRepository.OnReviewInfoListener listener = mock(HelpRepository.OnReviewInfoListener.class);
18+
RequestReviewFlowUseCase useCase = new RequestReviewFlowUseCase(repository);
19+
20+
useCase.invoke(listener);
21+
22+
verify(repository).requestReviewFlow(listener);
23+
}
24+
25+
@Test
26+
public void invokeAcceptsNullListener() {
27+
HelpRepository repository = mock(HelpRepository.class);
28+
RequestReviewFlowUseCase useCase = new RequestReviewFlowUseCase(repository);
29+
30+
useCase.invoke(null);
31+
32+
verify(repository).requestReviewFlow(null);
33+
}
34+
35+
@Test
36+
public void invokePropagatesRepositoryException() {
37+
HelpRepository repository = mock(HelpRepository.class);
38+
HelpRepository.OnReviewInfoListener listener = mock(HelpRepository.OnReviewInfoListener.class);
39+
RequestReviewFlowUseCase useCase = new RequestReviewFlowUseCase(repository);
40+
doThrow(new IllegalStateException("error"))
41+
.when(repository).requestReviewFlow(listener);
42+
43+
assertThrows(IllegalStateException.class, () -> useCase.invoke(listener));
44+
verify(repository).requestReviewFlow(listener);
45+
}
46+
}

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

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

33
import static org.junit.Assert.assertEquals;
4+
import static org.junit.Assert.assertNull;
5+
import static org.junit.Assert.assertThrows;
46
import static org.mockito.Mockito.mock;
57
import static org.mockito.Mockito.verify;
68
import static org.mockito.Mockito.when;
@@ -22,4 +24,38 @@ public void invokeReturnsAppUrl() {
2224
assertEquals("url", result);
2325
verify(repository).getAppPlayStoreUrl("pkg");
2426
}
27+
28+
@Test
29+
public void invokeDelegatesNullPackageName() {
30+
HomeRepository repository = mock(HomeRepository.class);
31+
when(repository.getAppPlayStoreUrl(null)).thenReturn("fallback");
32+
GetAppPlayStoreUrlUseCase useCase = new GetAppPlayStoreUrlUseCase(repository);
33+
34+
String result = useCase.invoke(null);
35+
36+
assertEquals("fallback", result);
37+
verify(repository).getAppPlayStoreUrl(null);
38+
}
39+
40+
@Test
41+
public void invokeReturnsNullWhenRepositoryReturnsNull() {
42+
HomeRepository repository = mock(HomeRepository.class);
43+
when(repository.getAppPlayStoreUrl("pkg")).thenReturn(null);
44+
GetAppPlayStoreUrlUseCase useCase = new GetAppPlayStoreUrlUseCase(repository);
45+
46+
String result = useCase.invoke("pkg");
47+
48+
assertNull(result);
49+
verify(repository).getAppPlayStoreUrl("pkg");
50+
}
51+
52+
@Test
53+
public void invokePropagatesRepositoryException() {
54+
HomeRepository repository = mock(HomeRepository.class);
55+
when(repository.getAppPlayStoreUrl("pkg")).thenThrow(new IllegalStateException("err"));
56+
GetAppPlayStoreUrlUseCase useCase = new GetAppPlayStoreUrlUseCase(repository);
57+
58+
assertThrows(IllegalStateException.class, () -> useCase.invoke("pkg"));
59+
verify(repository).getAppPlayStoreUrl("pkg");
60+
}
2561
}

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

Lines changed: 23 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,7 @@
11
package com.d4rk.androidtutorials.java.domain.home;
22

33
import static org.junit.Assert.assertEquals;
4+
import static org.junit.Assert.assertThrows;
45
import static org.mockito.Mockito.mock;
56
import static org.mockito.Mockito.verify;
67
import static org.mockito.Mockito.when;
@@ -22,4 +23,26 @@ public void invokeReturnsDailyTip() {
2223
assertEquals("tip", result);
2324
verify(repository).dailyTip();
2425
}
26+
27+
@Test
28+
public void invokeHandlesEmptyTip() {
29+
HomeRepository repository = mock(HomeRepository.class);
30+
when(repository.dailyTip()).thenReturn("");
31+
GetDailyTipUseCase useCase = new GetDailyTipUseCase(repository);
32+
33+
String result = useCase.invoke();
34+
35+
assertEquals("", result);
36+
verify(repository).dailyTip();
37+
}
38+
39+
@Test
40+
public void invokePropagatesRepositoryException() {
41+
HomeRepository repository = mock(HomeRepository.class);
42+
when(repository.dailyTip()).thenThrow(new IllegalArgumentException("bad"));
43+
GetDailyTipUseCase useCase = new GetDailyTipUseCase(repository);
44+
45+
assertThrows(IllegalArgumentException.class, useCase::invoke);
46+
verify(repository).dailyTip();
47+
}
2548
}

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

Lines changed: 24 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,8 @@
11
package com.d4rk.androidtutorials.java.domain.home;
22

33
import static org.junit.Assert.assertEquals;
4+
import static org.junit.Assert.assertNull;
5+
import static org.junit.Assert.assertThrows;
46
import static org.mockito.Mockito.mock;
57
import static org.mockito.Mockito.verify;
68
import static org.mockito.Mockito.when;
@@ -22,4 +24,26 @@ public void invokeReturnsUrl() {
2224
assertEquals("url", result);
2325
verify(repository).getPlayStoreUrl();
2426
}
27+
28+
@Test
29+
public void invokeReturnsNullWhenRepositoryReturnsNull() {
30+
HomeRepository repository = mock(HomeRepository.class);
31+
when(repository.getPlayStoreUrl()).thenReturn(null);
32+
GetPlayStoreUrlUseCase useCase = new GetPlayStoreUrlUseCase(repository);
33+
34+
String result = useCase.invoke();
35+
36+
assertNull(result);
37+
verify(repository).getPlayStoreUrl();
38+
}
39+
40+
@Test
41+
public void invokePropagatesRepositoryException() {
42+
HomeRepository repository = mock(HomeRepository.class);
43+
when(repository.getPlayStoreUrl()).thenThrow(new RuntimeException("fail"));
44+
GetPlayStoreUrlUseCase useCase = new GetPlayStoreUrlUseCase(repository);
45+
46+
assertThrows(RuntimeException.class, useCase::invoke);
47+
verify(repository).getPlayStoreUrl();
48+
}
2549
}

0 commit comments

Comments
 (0)