mirror of
https://github.com/android10/Android-CleanArchitecture.git
synced 2026-03-13 10:13:41 +08:00
Added unit tests for DiskUserDataStore and UserDataRepository
This commit is contained in:
@@ -4,5 +4,128 @@
|
||||
*/
|
||||
package com.fernandocejas.android10.sample.data.repository;
|
||||
|
||||
public class UserDataRepositoryTest {
|
||||
import com.fernandocejas.android10.sample.data.ApplicationTestCase;
|
||||
import com.fernandocejas.android10.sample.data.entity.UserEntity;
|
||||
import com.fernandocejas.android10.sample.data.entity.mapper.UserEntityDataMapper;
|
||||
import com.fernandocejas.android10.sample.data.exception.RepositoryErrorBundle;
|
||||
import com.fernandocejas.android10.sample.data.repository.datasource.UserDataStore;
|
||||
import com.fernandocejas.android10.sample.data.repository.datasource.UserDataStoreFactory;
|
||||
import com.fernandocejas.android10.sample.domain.User;
|
||||
import com.fernandocejas.android10.sample.domain.repository.UserRepository;
|
||||
import org.junit.Before;
|
||||
import org.junit.Rule;
|
||||
import org.junit.Test;
|
||||
import org.junit.rules.ExpectedException;
|
||||
import org.mockito.Mock;
|
||||
import org.mockito.MockitoAnnotations;
|
||||
import org.mockito.invocation.InvocationOnMock;
|
||||
import org.mockito.stubbing.Answer;
|
||||
|
||||
import static org.mockito.BDDMockito.given;
|
||||
import static org.mockito.Matchers.any;
|
||||
import static org.mockito.Matchers.anyInt;
|
||||
import static org.mockito.Mockito.doAnswer;
|
||||
import static org.mockito.Mockito.doNothing;
|
||||
import static org.mockito.Mockito.verify;
|
||||
import static org.mockito.Mockito.verifyZeroInteractions;
|
||||
|
||||
public class UserDataRepositoryTest extends ApplicationTestCase {
|
||||
|
||||
private static final int FAKE_USER_ID = 123;
|
||||
|
||||
private UserDataRepository userDataRepository;
|
||||
|
||||
@Mock
|
||||
private UserDataStoreFactory mockUserDataStoreFactory;
|
||||
@Mock
|
||||
private UserEntityDataMapper mockUserEntityDataMapper;
|
||||
@Mock
|
||||
private UserDataStore mockUserDataStore;
|
||||
@Mock
|
||||
private UserEntity mockUserEntity;
|
||||
@Mock
|
||||
private User mockUser;
|
||||
@Mock
|
||||
private UserRepository.UserDetailsCallback mockUserDetailsRepositoryCallback;
|
||||
@Mock
|
||||
private UserRepository.UserListCallback mockUserListRepositoryCallback;
|
||||
|
||||
@Rule
|
||||
public ExpectedException expectedException = ExpectedException.none();
|
||||
|
||||
@Before
|
||||
public void setUp() {
|
||||
MockitoAnnotations.initMocks(this);
|
||||
resetSingleton(UserDataRepository.class);
|
||||
userDataRepository = UserDataRepository.getInstance(mockUserDataStoreFactory,
|
||||
mockUserEntityDataMapper);
|
||||
|
||||
given(mockUserDataStoreFactory.create(anyInt())).willReturn(mockUserDataStore);
|
||||
given(mockUserDataStoreFactory.createCloudDataStore()).willReturn(mockUserDataStore);
|
||||
}
|
||||
|
||||
@Test
|
||||
public void testGetUserDetailsSuccess() {
|
||||
doAnswer(new Answer() {
|
||||
@Override public Object answer(InvocationOnMock invocation) throws Throwable {
|
||||
((UserDataStore.UserDetailsCallback) invocation.getArguments()[1]).onUserEntityLoaded(
|
||||
mockUserEntity);
|
||||
return null;
|
||||
}
|
||||
}).when(mockUserDataStore).getUserEntityDetails(anyInt(),
|
||||
any(UserDataStore.UserDetailsCallback.class));
|
||||
given(mockUserEntityDataMapper.transform(mockUserEntity)).willReturn(mockUser);
|
||||
|
||||
userDataRepository.getUserById(FAKE_USER_ID, mockUserDetailsRepositoryCallback);
|
||||
|
||||
verify(mockUserEntityDataMapper).transform(mockUserEntity);
|
||||
verify(mockUserDetailsRepositoryCallback).onUserLoaded(mockUser);
|
||||
}
|
||||
|
||||
@Test
|
||||
public void testGetUserDetailsNullResult() {
|
||||
doAnswer(new Answer() {
|
||||
@Override public Object answer(InvocationOnMock invocation) throws Throwable {
|
||||
((UserDataStore.UserDetailsCallback) invocation.getArguments()[1]).onUserEntityLoaded(
|
||||
mockUserEntity);
|
||||
return null;
|
||||
}
|
||||
}).when(mockUserDataStore).getUserEntityDetails(anyInt(),
|
||||
any(UserDataStore.UserDetailsCallback.class));
|
||||
given(mockUserEntityDataMapper.transform(mockUserEntity)).willReturn(null);
|
||||
|
||||
doNothing().when(mockUserDetailsRepositoryCallback).onError(any(RepositoryErrorBundle.class));
|
||||
|
||||
userDataRepository.getUserById(FAKE_USER_ID, mockUserDetailsRepositoryCallback);
|
||||
|
||||
verify(mockUserEntityDataMapper).transform(mockUserEntity);
|
||||
verify(mockUserDetailsRepositoryCallback).onError(any(RepositoryErrorBundle.class));
|
||||
}
|
||||
|
||||
@Test
|
||||
public void testGetUserByIdError() {
|
||||
doAnswer(new Answer() {
|
||||
@Override public Object answer(InvocationOnMock invocation) throws Throwable {
|
||||
((UserDataStore.UserDetailsCallback) invocation.getArguments()[1]).onError(
|
||||
any(Exception.class));
|
||||
return null;
|
||||
}
|
||||
}).when(mockUserDataStore).getUserEntityDetails(anyInt(),
|
||||
any(UserDataStore.UserDetailsCallback.class));
|
||||
|
||||
userDataRepository.getUserById(FAKE_USER_ID, mockUserDetailsRepositoryCallback);
|
||||
|
||||
verify(mockUserDetailsRepositoryCallback).onError(any(RepositoryErrorBundle.class));
|
||||
verifyZeroInteractions(mockUserEntityDataMapper);
|
||||
}
|
||||
|
||||
@Test
|
||||
public void testInvalidParametersConstructor() {
|
||||
resetSingleton(UserDataRepository.class);
|
||||
|
||||
expectedException.expect(IllegalArgumentException.class);
|
||||
expectedException.expectMessage("Invalid null parameter");
|
||||
|
||||
userDataRepository = UserDataRepository.getInstance(null, null);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -36,7 +36,7 @@ public class DiskUserDataStoreTest extends ApplicationTestCase {
|
||||
private ArgumentCaptor<UserCache.UserCacheCallback> userCacheCallbackArgumentCaptor;
|
||||
|
||||
@Rule
|
||||
ExpectedException expectedException = ExpectedException.none();
|
||||
public ExpectedException expectedException = ExpectedException.none();
|
||||
|
||||
@Before
|
||||
public void setUp() {
|
||||
@@ -73,6 +73,6 @@ public class DiskUserDataStoreTest extends ApplicationTestCase {
|
||||
@Test
|
||||
public void testGetUserEntityListUnsupported() {
|
||||
expectedException.expect(UnsupportedOperationException.class);
|
||||
diskUserDataStore.getUsersEntityList(any(UserDataStore.UserListCallback.class));
|
||||
diskUserDataStore.getUsersEntityList(null);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -7,6 +7,7 @@ package com.fernandocejas.android10.sample.data.repository;
|
||||
import com.fernandocejas.android10.sample.data.entity.UserEntity;
|
||||
import com.fernandocejas.android10.sample.data.entity.mapper.UserEntityDataMapper;
|
||||
import com.fernandocejas.android10.sample.data.exception.RepositoryErrorBundle;
|
||||
import com.fernandocejas.android10.sample.data.exception.UserNotFoundException;
|
||||
import com.fernandocejas.android10.sample.data.repository.datasource.UserDataStore;
|
||||
import com.fernandocejas.android10.sample.data.repository.datasource.UserDataStoreFactory;
|
||||
import com.fernandocejas.android10.sample.domain.User;
|
||||
@@ -79,7 +80,11 @@ public class UserDataRepository implements UserRepository {
|
||||
userDataStore.getUserEntityDetails(userId, new UserDataStore.UserDetailsCallback() {
|
||||
@Override public void onUserEntityLoaded(UserEntity userEntity) {
|
||||
User user = UserDataRepository.this.userEntityDataMapper.transform(userEntity);
|
||||
userCallback.onUserLoaded(user);
|
||||
if (user != null) {
|
||||
userCallback.onUserLoaded(user);
|
||||
} else {
|
||||
userCallback.onError(new RepositoryErrorBundle(new UserNotFoundException()));
|
||||
}
|
||||
}
|
||||
|
||||
@Override public void onError(Exception exception) {
|
||||
|
||||
Reference in New Issue
Block a user