Skip to content

Navigation Menu

Sign in
Appearance settings

Search code, repositories, users, issues, pull requests...

Provide feedback

We read every piece of feedback, and take your input very seriously.

Saved searches

Use saved searches to filter your results more quickly

Sign up
Appearance settings

Commit 8c78f8f

Browse files
Fix tests and generify use case parameters.
1 parent b64a353 commit 8c78f8f

File tree

13 files changed

+64
-184
lines changed

13 files changed

+64
-184
lines changed

‎data/src/test/java/com/fernandocejas/android10/sample/data/repository/UserDataRepositoryTest.java

Lines changed: 1 addition & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -24,9 +24,7 @@
2424
import java.util.ArrayList;
2525
import java.util.List;
2626
import org.junit.Before;
27-
import org.junit.Rule;
2827
import org.junit.Test;
29-
import org.junit.rules.ExpectedException;
3028
import org.junit.runner.RunWith;
3129
import org.mockito.Mock;
3230
import org.mockito.runners.MockitoJUnitRunner;
@@ -48,14 +46,9 @@ public class UserDataRepositoryTest {
4846
@Mock private UserEntity mockUserEntity;
4947
@Mock private User mockUser;
5048

51-
@Rule
52-
public ExpectedException expectedException = ExpectedException.none();
53-
5449
@Before
5550
public void setUp() {
56-
userDataRepository = new UserDataRepository(mockUserDataStoreFactory,
57-
mockUserEntityDataMapper);
58-
51+
userDataRepository = new UserDataRepository(mockUserDataStoreFactory, mockUserEntityDataMapper);
5952
given(mockUserDataStoreFactory.create(anyInt())).willReturn(mockUserDataStore);
6053
given(mockUserDataStoreFactory.createCloudDataStore()).willReturn(mockUserDataStore);
6154
}

‎domain/src/main/java/com/fernandocejas/android10/sample/domain/interactor/GetUserDetails.java

Lines changed: 17 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -19,21 +19,15 @@
1919
import com.fernandocejas.android10.sample.domain.executor.PostExecutionThread;
2020
import com.fernandocejas.android10.sample.domain.executor.ThreadExecutor;
2121
import com.fernandocejas.android10.sample.domain.repository.UserRepository;
22-
import com.fernandocejas.arrow.annotations.VisibleForTesting;
23-
import com.fernandocejas.arrow.optional.Optional;
22+
import com.fernandocejas.arrow.checks.Preconditions;
2423
import io.reactivex.Observable;
2524
import javax.inject.Inject;
2625

2726
/**
2827
* This class is an implementation of {@link UseCase} that represents a use case for
2928
* retrieving data related to an specific {@link User}.
3029
*/
31-
public class GetUserDetails extends UseCase<User> {
32-
33-
public static final String PARAM_USER_ID_KEY = "userId";
34-
35-
@VisibleForTesting
36-
static final int PARAM_USER_ID_DEFAULT_VALUE = -1;
30+
public class GetUserDetails extends UseCase<User, GetUserDetails.Params> {
3731

3832
private final UserRepository userRepository;
3933

@@ -44,12 +38,21 @@ public class GetUserDetails extends UseCase<User> {
4438
this.userRepository = userRepository;
4539
}
4640

47-
@Override protected Observable<User> buildUseCaseObservable(Optional<Params> params) {
48-
if (params.isPresent()) {
49-
final int userId = params.get().getInt(PARAM_USER_ID_KEY, PARAM_USER_ID_DEFAULT_VALUE);
50-
return this.userRepository.user(userId);
51-
} else {
52-
return Observable.empty();
41+
@Override Observable<User> buildUseCaseObservable(Params params) {
42+
Preconditions.checkNotNull(params);
43+
return this.userRepository.user(params.userId);
44+
}
45+
46+
public static final class Params {
47+
48+
private final int userId;
49+
50+
private Params(int userId) {
51+
this.userId = userId;
52+
}
53+
54+
public static Params forUser(int userId) {
55+
return new Params(userId);
5356
}
5457
}
5558
}

‎domain/src/main/java/com/fernandocejas/android10/sample/domain/interactor/GetUserList.java

Lines changed: 2 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -19,7 +19,6 @@
1919
import com.fernandocejas.android10.sample.domain.executor.PostExecutionThread;
2020
import com.fernandocejas.android10.sample.domain.executor.ThreadExecutor;
2121
import com.fernandocejas.android10.sample.domain.repository.UserRepository;
22-
import com.fernandocejas.arrow.optional.Optional;
2322
import io.reactivex.Observable;
2423
import java.util.List;
2524
import javax.inject.Inject;
@@ -28,7 +27,7 @@
2827
* This class is an implementation of {@link UseCase} that represents a use case for
2928
* retrieving a collection of all {@link User}.
3029
*/
31-
public class GetUserList extends UseCase<List<User>> {
30+
public class GetUserList extends UseCase<List<User>, Void> {
3231

3332
private final UserRepository userRepository;
3433

@@ -39,7 +38,7 @@ public class GetUserList extends UseCase<List<User>> {
3938
this.userRepository = userRepository;
4039
}
4140

42-
@Override publicObservable<List<User>> buildUseCaseObservable(Optional<Params> params) {
41+
@Override Observable<List<User>> buildUseCaseObservable(Voidunused) {
4342
return this.userRepository.users();
4443
}
4544
}

‎domain/src/main/java/com/fernandocejas/android10/sample/domain/interactor/Params.java

Lines changed: 0 additions & 50 deletions
This file was deleted.

‎domain/src/main/java/com/fernandocejas/android10/sample/domain/interactor/UseCase.java

Lines changed: 6 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -18,7 +18,6 @@
1818
import com.fernandocejas.android10.sample.domain.executor.PostExecutionThread;
1919
import com.fernandocejas.android10.sample.domain.executor.ThreadExecutor;
2020
import com.fernandocejas.arrow.checks.Preconditions;
21-
import com.fernandocejas.arrow.optional.Optional;
2221
import io.reactivex.Observable;
2322
import io.reactivex.disposables.CompositeDisposable;
2423
import io.reactivex.disposables.Disposable;
@@ -33,7 +32,7 @@
3332
* By convention each UseCase implementation will return the result using a {@link DisposableObserver}
3433
* that will execute its job in a background thread and will post the result in the UI thread.
3534
*/
36-
public abstract class UseCase<T> {
35+
public abstract class UseCase<T, Params> {
3736

3837
private final ThreadExecutor threadExecutor;
3938
private final PostExecutionThread postExecutionThread;
@@ -48,17 +47,18 @@ public abstract class UseCase<T> {
4847
/**
4948
* Builds an {@link Observable} which will be used when executing the current {@link UseCase}.
5049
*/
51-
abstract Observable<T> buildUseCaseObservable(Optional<Params> params);
50+
abstract Observable<T> buildUseCaseObservable(Params params);
5251

5352
/**
5453
* Executes the current use case.
5554
*
5655
* @param observer {@link DisposableObserver} which will be listening to the observable build
57-
* by {@link #buildUseCaseObservable(Optional)} ()} method.
58-
* @param params Parameters used to buildexecute this use case.
56+
* by {@link #buildUseCaseObservable(Params)} ()} method.
57+
* @param params Parameters (Optional) used to build/execute this use case.
5958
*/
6059
public void execute(DisposableObserver<T> observer, Params params) {
61-
final Observable<T> observable = this.buildUseCaseObservable(Optional.of(params))
60+
Preconditions.checkNotNull(observer);
61+
final Observable<T> observable = this.buildUseCaseObservable(params)
6262
.subscribeOn(Schedulers.from(threadExecutor))
6363
.observeOn(postExecutionThread.getScheduler());
6464
addDisposable(observable.subscribeWith(observer));

‎domain/src/test/java/com/fernandocejas/android10/sample/domain/interactor/GetUserDetailsTest.java

Lines changed: 9 additions & 24 deletions
Original file line numberDiff line numberDiff line change
@@ -17,16 +17,16 @@
1717

1818
import com.fernandocejas.android10.sample.domain.executor.PostExecutionThread;
1919
import com.fernandocejas.android10.sample.domain.executor.ThreadExecutor;
20+
import com.fernandocejas.android10.sample.domain.interactor.GetUserDetails.Params;
2021
import com.fernandocejas.android10.sample.domain.repository.UserRepository;
21-
import com.fernandocejas.arrow.optional.Optional;
22-
import io.reactivex.Observable;
2322
import org.junit.Before;
23+
import org.junit.Rule;
2424
import org.junit.Test;
25+
import org.junit.rules.ExpectedException;
2526
import org.junit.runner.RunWith;
2627
import org.mockito.Mock;
2728
import org.mockito.runners.MockitoJUnitRunner;
2829

29-
import static org.assertj.core.api.Assertions.assertThat;
3030
import static org.mockito.Mockito.verify;
3131
import static org.mockito.Mockito.verifyNoMoreInteractions;
3232
import static org.mockito.Mockito.verifyZeroInteractions;
@@ -42,6 +42,8 @@ public class GetUserDetailsTest {
4242
@Mock private ThreadExecutor mockThreadExecutor;
4343
@Mock private PostExecutionThread mockPostExecutionThread;
4444

45+
@Rule public ExpectedException expectedException = ExpectedException.none();
46+
4547
@Before
4648
public void setUp() {
4749
getUserDetails = new GetUserDetails(mockUserRepository, mockThreadExecutor,
@@ -50,10 +52,7 @@ public void setUp() {
5052

5153
@Test
5254
public void testGetUserDetailsUseCaseObservableHappyCase() {
53-
final Params params = Params.create();
54-
params.putInt(GetUserDetails.PARAM_USER_ID_KEY, USER_ID);
55-
56-
getUserDetails.buildUseCaseObservable(Optional.of(params));
55+
getUserDetails.buildUseCaseObservable(Params.forUser(USER_ID));
5756

5857
verify(mockUserRepository).user(USER_ID);
5958
verifyNoMoreInteractions(mockUserRepository);
@@ -62,22 +61,8 @@ public void testGetUserDetailsUseCaseObservableHappyCase() {
6261
}
6362

6463
@Test
65-
public void testShouldReturnEmptyObservableWhenNoParameters() {
66-
final Observable observable = getUserDetails.buildUseCaseObservable(Optional.<Params>absent());
67-
68-
assertThat(observable).isEqualTo(Observable.empty());
69-
verifyZeroInteractions(mockUserRepository);
70-
verifyZeroInteractions(mockPostExecutionThread);
71-
verifyZeroInteractions(mockThreadExecutor);
72-
}
73-
74-
@Test
75-
public void testShouldUseDefaultUserIdValueWhenNoUserIdParameter() {
76-
getUserDetails.buildUseCaseObservable(Optional.of(Params.create()));
77-
78-
verify(mockUserRepository).user(GetUserDetails.PARAM_USER_ID_DEFAULT_VALUE);
79-
verifyNoMoreInteractions(mockUserRepository);
80-
verifyZeroInteractions(mockPostExecutionThread);
81-
verifyZeroInteractions(mockThreadExecutor);
64+
public void testShouldFailWhenNoOrEmptyParameters() {
65+
expectedException.expect(NullPointerException.class);
66+
getUserDetails.buildUseCaseObservable(null);
8267
}
8368
}

‎domain/src/test/java/com/fernandocejas/android10/sample/domain/interactor/GetUserListTest.java

Lines changed: 1 addition & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -18,14 +18,12 @@
1818
import com.fernandocejas.android10.sample.domain.executor.PostExecutionThread;
1919
import com.fernandocejas.android10.sample.domain.executor.ThreadExecutor;
2020
import com.fernandocejas.android10.sample.domain.repository.UserRepository;
21-
import com.fernandocejas.arrow.optional.Optional;
2221
import org.junit.Before;
2322
import org.junit.Test;
2423
import org.junit.runner.RunWith;
2524
import org.mockito.Mock;
2625
import org.mockito.runners.MockitoJUnitRunner;
2726

28-
import static org.mockito.Mockito.mock;
2927
import static org.mockito.Mockito.verify;
3028
import static org.mockito.Mockito.verifyNoMoreInteractions;
3129
import static org.mockito.Mockito.verifyZeroInteractions;
@@ -47,22 +45,11 @@ public void setUp() {
4745

4846
@Test
4947
public void testGetUserListUseCaseObservableHappyCase() {
50-
getUserList.buildUseCaseObservable(Optional.of(Params.EMPTY));
48+
getUserList.buildUseCaseObservable(null);
5149

5250
verify(mockUserRepository).users();
5351
verifyNoMoreInteractions(mockUserRepository);
5452
verifyZeroInteractions(mockThreadExecutor);
5553
verifyZeroInteractions(mockPostExecutionThread);
5654
}
57-
58-
@Test
59-
@SuppressWarnings("unchecked")
60-
public void testThereShouldNotBeAnyInteractionWithParams() {
61-
Optional params = mock(Optional.class);
62-
63-
getUserList.buildUseCaseObservable(params);
64-
65-
verify(mockUserRepository).users();
66-
verifyZeroInteractions(params);
67-
}
6855
}

‎domain/src/test/java/com/fernandocejas/android10/sample/domain/interactor/ParamsTest.java

Lines changed: 0 additions & 49 deletions
This file was deleted.

0 commit comments

Comments
(0)

AltStyle によって変換されたページ (->オリジナル) /