Skip to content

Commit 137ec51

Browse files
Merge pull request #229 from MihaiCristianCondrea/codex/test-use-cases-in-various-directories
Add callback propagation tests for domain use cases
2 parents 09ad702 + e7ea64e commit 137ec51

File tree

5 files changed

+143
-0
lines changed

5 files changed

+143
-0
lines changed

app/src/test/java/com/d4rk/androidtutorials/java/domain/help/RequestReviewFlowUseCaseTest.java

Lines changed: 38 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,11 +1,13 @@
11
package com.d4rk.androidtutorials.java.domain.help;
22

33
import static org.junit.Assert.assertThrows;
4+
import static org.mockito.Mockito.doAnswer;
45
import static org.mockito.Mockito.doThrow;
56
import static org.mockito.Mockito.mock;
67
import static org.mockito.Mockito.verify;
78

89
import com.d4rk.androidtutorials.java.data.repository.HelpRepository;
10+
import com.google.android.play.core.review.ReviewInfo;
911

1012
import org.junit.Test;
1113

@@ -43,4 +45,40 @@ public void invokePropagatesRepositoryException() {
4345
assertThrows(IllegalStateException.class, () -> useCase.invoke(listener));
4446
verify(repository).requestReviewFlow(listener);
4547
}
48+
49+
@Test
50+
public void invokePropagatesSuccessCallback() {
51+
HelpRepository repository = mock(HelpRepository.class);
52+
HelpRepository.OnReviewInfoListener listener = mock(HelpRepository.OnReviewInfoListener.class);
53+
RequestReviewFlowUseCase useCase = new RequestReviewFlowUseCase(repository);
54+
ReviewInfo info = mock(ReviewInfo.class);
55+
doAnswer(invocation -> {
56+
HelpRepository.OnReviewInfoListener callback = invocation.getArgument(0);
57+
callback.onSuccess(info);
58+
return null;
59+
}).when(repository).requestReviewFlow(listener);
60+
61+
useCase.invoke(listener);
62+
63+
verify(repository).requestReviewFlow(listener);
64+
verify(listener).onSuccess(info);
65+
}
66+
67+
@Test
68+
public void invokePropagatesFailureCallback() {
69+
HelpRepository repository = mock(HelpRepository.class);
70+
HelpRepository.OnReviewInfoListener listener = mock(HelpRepository.OnReviewInfoListener.class);
71+
RequestReviewFlowUseCase useCase = new RequestReviewFlowUseCase(repository);
72+
Exception error = new Exception("fail");
73+
doAnswer(invocation -> {
74+
HelpRepository.OnReviewInfoListener callback = invocation.getArgument(0);
75+
callback.onFailure(error);
76+
return null;
77+
}).when(repository).requestReviewFlow(listener);
78+
79+
useCase.invoke(listener);
80+
81+
verify(repository).requestReviewFlow(listener);
82+
verify(listener).onFailure(error);
83+
}
4684
}

app/src/test/java/com/d4rk/androidtutorials/java/domain/startup/LoadConsentFormUseCaseTest.java

Lines changed: 21 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,13 +1,15 @@
11
package com.d4rk.androidtutorials.java.domain.startup;
22

33
import static org.junit.Assert.assertThrows;
4+
import static org.mockito.Mockito.doAnswer;
45
import static org.mockito.Mockito.doThrow;
56
import static org.mockito.Mockito.mock;
67
import static org.mockito.Mockito.verify;
78

89
import android.app.Activity;
910

1011
import com.d4rk.androidtutorials.java.data.repository.StartupRepository;
12+
import com.google.android.ump.FormError;
1113

1214
import org.junit.Test;
1315

@@ -47,6 +49,25 @@ public void invokeAllowsNullErrorHandler() {
4749
verify(repository).loadConsentForm(activity, null);
4850
}
4951

52+
@Test
53+
public void invokePropagatesFormErrorCallback() {
54+
StartupRepository repository = mock(StartupRepository.class);
55+
Activity activity = mock(Activity.class);
56+
StartupRepository.OnFormError onError = mock(StartupRepository.OnFormError.class);
57+
LoadConsentFormUseCase useCase = new LoadConsentFormUseCase(repository);
58+
FormError formError = mock(FormError.class);
59+
doAnswer(invocation -> {
60+
StartupRepository.OnFormError callback = invocation.getArgument(1);
61+
callback.onFormError(formError);
62+
return null;
63+
}).when(repository).loadConsentForm(activity, onError);
64+
65+
useCase.invoke(activity, onError);
66+
67+
verify(repository).loadConsentForm(activity, onError);
68+
verify(onError).onFormError(formError);
69+
}
70+
5071
@Test
5172
public void invokePropagatesRepositoryException() {
5273
StartupRepository repository = mock(StartupRepository.class);

app/src/test/java/com/d4rk/androidtutorials/java/domain/startup/RequestConsentInfoUseCaseTest.java

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

33
import static org.junit.Assert.assertThrows;
4+
import static org.mockito.Mockito.doAnswer;
45
import static org.mockito.Mockito.doThrow;
56
import static org.mockito.Mockito.mock;
67
import static org.mockito.Mockito.verify;
@@ -9,6 +10,7 @@
910

1011
import com.d4rk.androidtutorials.java.data.repository.StartupRepository;
1112
import com.google.android.ump.ConsentRequestParameters;
13+
import com.google.android.ump.FormError;
1214

1315
import org.junit.Test;
1416

@@ -53,6 +55,47 @@ public void invokeSupportsNullCallbacks() {
5355
verify(repository).requestConsentInfoUpdate(activity, params, null, null);
5456
}
5557

58+
@Test
59+
public void invokePropagatesSuccessCallback() {
60+
StartupRepository repository = mock(StartupRepository.class);
61+
Activity activity = mock(Activity.class);
62+
ConsentRequestParameters params = mock(ConsentRequestParameters.class);
63+
Runnable onSuccess = mock(Runnable.class);
64+
StartupRepository.OnFormError onError = mock(StartupRepository.OnFormError.class);
65+
RequestConsentInfoUseCase useCase = new RequestConsentInfoUseCase(repository);
66+
doAnswer(invocation -> {
67+
Runnable callback = invocation.getArgument(2);
68+
callback.run();
69+
return null;
70+
}).when(repository).requestConsentInfoUpdate(activity, params, onSuccess, onError);
71+
72+
useCase.invoke(activity, params, onSuccess, onError);
73+
74+
verify(repository).requestConsentInfoUpdate(activity, params, onSuccess, onError);
75+
verify(onSuccess).run();
76+
}
77+
78+
@Test
79+
public void invokePropagatesFailureCallback() {
80+
StartupRepository repository = mock(StartupRepository.class);
81+
Activity activity = mock(Activity.class);
82+
ConsentRequestParameters params = mock(ConsentRequestParameters.class);
83+
Runnable onSuccess = mock(Runnable.class);
84+
StartupRepository.OnFormError onError = mock(StartupRepository.OnFormError.class);
85+
RequestConsentInfoUseCase useCase = new RequestConsentInfoUseCase(repository);
86+
FormError error = mock(FormError.class);
87+
doAnswer(invocation -> {
88+
StartupRepository.OnFormError callback = invocation.getArgument(3);
89+
callback.onFormError(error);
90+
return null;
91+
}).when(repository).requestConsentInfoUpdate(activity, params, onSuccess, onError);
92+
93+
useCase.invoke(activity, params, onSuccess, onError);
94+
95+
verify(repository).requestConsentInfoUpdate(activity, params, onSuccess, onError);
96+
verify(onError).onFormError(error);
97+
}
98+
5699
@Test
57100
public void invokePropagatesRepositoryException() {
58101
StartupRepository repository = mock(StartupRepository.class);

app/src/test/java/com/d4rk/androidtutorials/java/domain/support/InitBillingClientUseCaseTest.java

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

33
import static org.junit.Assert.assertThrows;
4+
import static org.mockito.Mockito.doAnswer;
45
import static org.mockito.Mockito.doThrow;
56
import static org.mockito.Mockito.mock;
67
import static org.mockito.Mockito.verify;
@@ -22,6 +23,23 @@ public void invokeDelegatesToRepository() {
2223
verify(repository).initBillingClient(onConnected);
2324
}
2425

26+
@Test
27+
public void invokePropagatesConnectionCallback() {
28+
SupportRepository repository = mock(SupportRepository.class);
29+
Runnable onConnected = mock(Runnable.class);
30+
InitBillingClientUseCase useCase = new InitBillingClientUseCase(repository);
31+
doAnswer(invocation -> {
32+
Runnable callback = invocation.getArgument(0);
33+
callback.run();
34+
return null;
35+
}).when(repository).initBillingClient(onConnected);
36+
37+
useCase.invoke(onConnected);
38+
39+
verify(repository).initBillingClient(onConnected);
40+
verify(onConnected).run();
41+
}
42+
2543
@Test
2644
public void invokeAllowsNullCallback() {
2745
SupportRepository repository = mock(SupportRepository.class);

app/src/test/java/com/d4rk/androidtutorials/java/domain/support/QueryProductDetailsUseCaseTest.java

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

33
import static org.junit.Assert.assertThrows;
4+
import static org.mockito.Mockito.doAnswer;
45
import static org.mockito.Mockito.doThrow;
56
import static org.mockito.Mockito.mock;
67
import static org.mockito.Mockito.verify;
78

9+
import com.android.billingclient.api.ProductDetails;
810
import com.d4rk.androidtutorials.java.data.repository.SupportRepository;
911

1012
import org.junit.Test;
@@ -40,6 +42,27 @@ public void invokeSupportsEmptyProductIds() {
4042
verify(repository).queryProductDetails(ids, listener);
4143
}
4244

45+
@Test
46+
public void invokePropagatesListenerResults() {
47+
SupportRepository repository = mock(SupportRepository.class);
48+
List<String> productIds = List.of("product");
49+
SupportRepository.OnProductDetailsListener listener =
50+
mock(SupportRepository.OnProductDetailsListener.class);
51+
QueryProductDetailsUseCase useCase = new QueryProductDetailsUseCase(repository);
52+
ProductDetails detail = mock(ProductDetails.class);
53+
List<ProductDetails> details = List.of(detail);
54+
doAnswer(invocation -> {
55+
SupportRepository.OnProductDetailsListener callback = invocation.getArgument(1);
56+
callback.onProductDetailsRetrieved(details);
57+
return null;
58+
}).when(repository).queryProductDetails(productIds, listener);
59+
60+
useCase.invoke(productIds, listener);
61+
62+
verify(repository).queryProductDetails(productIds, listener);
63+
verify(listener).onProductDetailsRetrieved(details);
64+
}
65+
4366
@Test
4467
public void invokeSupportsNullArguments() {
4568
SupportRepository repository = mock(SupportRepository.class);

0 commit comments

Comments
 (0)