package com.ushahidi.platform.mobile.app.data.repository;
import com.ushahidi.platform.mobile.app.data.BaseTestCase;
import com.ushahidi.platform.mobile.app.data.entity.DeploymentEntity;
import com.ushahidi.platform.mobile.app.data.entity.mapper.DeploymentEntityDataMapper;
import com.ushahidi.platform.mobile.app.data.repository.datasource.deployment.DeploymentDataSource;
import com.ushahidi.platform.mobile.app.data.repository.datasource.deployment.DeploymentDataSourceFactory;
import com.ushahidi.platform.mobile.app.domain.entity.Deployment;
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 java.util.ArrayList;
import java.util.List;
import rx.Observable;
import static org.mockito.BDDMockito.given;
import static org.mockito.Mockito.verify;
/**
* Test suite for {@link DeploymentDataRepository}
*
* @author Ushahidi Team <team@ushahidi.com>
*/
public class DeploymentDataRepositoryTest extends BaseTestCase {
@Rule
public ExpectedException expectedException = ExpectedException.none();
private DeploymentDataRepository mDeploymentDataRepository;
@Mock
private DeploymentDataSourceFactory mMockDeploymentDataSourceFactory;
@Mock
private DeploymentEntityDataMapper mMockDeploymentEntityMapper;
@Mock
private DeploymentDataSource mMockDataSource;
@Mock
private Deployment mMockDeployment;
@Mock
private DeploymentEntity mMockDeploymentEntity;
@Before
public void setUp() throws Exception {
MockitoAnnotations.initMocks(this);
clearSingleton(DeploymentDataRepository.class);
mDeploymentDataRepository = new DeploymentDataRepository(mMockDeploymentDataSourceFactory,
mMockDeploymentEntityMapper);
given(mMockDeploymentDataSourceFactory.createDatabaseDataSource()).willReturn(
mMockDataSource);
}
@Test
public void shouldSuccessfullyAddADeployment() {
given(mMockDataSource.addDeploymentEntity(mMockDeploymentEntity))
.willReturn(Observable.just(1l));
given(mMockDeploymentEntityMapper.map(mMockDeployment)).willReturn(mMockDeploymentEntity);
mDeploymentDataRepository.addEntity(mMockDeployment);
verify(mMockDeploymentDataSourceFactory).createDatabaseDataSource();
verify(mMockDataSource).addDeploymentEntity(mMockDeploymentEntity);
}
@Test
public void shouldSuccessfullyUpdateADeployment() {
given(mMockDataSource.updateDeploymentEntity(mMockDeploymentEntity)).willReturn(
Observable.just(1l));
given(mMockDeploymentEntityMapper.map(mMockDeployment)).willReturn(mMockDeploymentEntity);
mDeploymentDataRepository.updateEntity(mMockDeployment);
verify(mMockDeploymentDataSourceFactory).createDatabaseDataSource();
verify(mMockDataSource).updateDeploymentEntity(mMockDeploymentEntity);
}
@Test
public void shouldSuccessfullyDeleteADeployment() {
given(mMockDataSource.deleteDeploymentEntity(1l)).willReturn(
Observable.just(1l));
mDeploymentDataRepository.deleteEntity(1l);
verify(mMockDeploymentDataSourceFactory).createDatabaseDataSource();
verify(mMockDataSource).deleteDeploymentEntity(1l);
}
@Test
public void shouldSuccessfullyGetADeployment() {
given(mMockDataSource.getDeploymentEntity(1l)).willReturn(
Observable.just(mMockDeploymentEntity));
given(mMockDeploymentEntityMapper.map(mMockDeployment)).willReturn(mMockDeploymentEntity);
mDeploymentDataRepository.getEntity(1l);
verify(mMockDeploymentDataSourceFactory).createDatabaseDataSource();
verify(mMockDataSource).getDeploymentEntity(1l);
}
@Test
public void shouldSuccessfullyGetAListOfDeployments() {
List<DeploymentEntity> deploymentEntities = new ArrayList<>();
deploymentEntities.add(new DeploymentEntity());
List<Deployment> deployments = new ArrayList<>();
deployments.add(new Deployment());
given(mMockDataSource.getDeploymentEntityList()).willReturn(
Observable.just(deploymentEntities));
given(mMockDeploymentEntityMapper.map(deploymentEntities)).willReturn(deployments);
mDeploymentDataRepository.getEntities();
verify(mMockDeploymentDataSourceFactory).createDatabaseDataSource();
verify(mMockDataSource).getDeploymentEntityList();
}
@Test
public void shouldSuccessfullyGetADeploymentByItsStatus() {
DeploymentEntity deploymentEntity = new DeploymentEntity();
deploymentEntity.setStatus(DeploymentEntity.Status.ACTIVATED);
Deployment deployment = new Deployment();
deployment.setStatus(Deployment.Status.ACTIVATED);
given(mMockDataSource.getByStatus(DeploymentEntity.Status.ACTIVATED)).willReturn(
Observable.just(deploymentEntity));
given(mMockDeploymentEntityMapper.map(Deployment.Status.ACTIVATED))
.willReturn(DeploymentEntity.Status.ACTIVATED);
given(mMockDeploymentEntityMapper.map(deployment)).willReturn(deploymentEntity);
mDeploymentDataRepository.getByStatus(Deployment.Status.ACTIVATED);
verify(mMockDeploymentDataSourceFactory).createDatabaseDataSource();
verify(mMockDeploymentEntityMapper).map(Deployment.Status.ACTIVATED);
verify(mMockDataSource).getByStatus(DeploymentEntity.Status.ACTIVATED);
}
}