package com.ushahidi.platform.mobile.app.domain.usecase.deployment;
import com.addhen.android.raiburari.domain.executor.PostExecutionThread;
import com.addhen.android.raiburari.domain.executor.ThreadExecutor;
import com.ushahidi.platform.mobile.app.BuildConfig;
import com.ushahidi.platform.mobile.app.DefaultConfig;
import com.ushahidi.platform.mobile.app.domain.entity.Deployment;
import com.ushahidi.platform.mobile.app.domain.repository.DeploymentRepository;
import org.junit.Before;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.mockito.Mock;
import org.mockito.MockitoAnnotations;
import org.robolectric.RobolectricGradleTestRunner;
import org.robolectric.annotation.Config;
import java.util.ArrayList;
import java.util.List;
import static com.google.common.truth.Truth.assertThat;
import static com.google.common.truth.Truth.assert_;
import static org.mockito.Mockito.verify;
import static org.mockito.Mockito.verifyNoMoreInteractions;
import static org.mockito.Mockito.verifyZeroInteractions;
/**
* Tests {@link ActivateDeploymentUsecase}
*
* @author Ushahidi Team <team@ushahidi.com>
*/
@RunWith(RobolectricGradleTestRunner.class)
@Config(sdk = DefaultConfig.EMULATE_SDK, constants = BuildConfig.class)
public class ActivateDeploymentUsecaseTest {
@Mock
private ThreadExecutor mMockThreadExecutor;
@Mock
private PostExecutionThread mMockPostExecutionThread;
@Mock
private DeploymentRepository mMockDeploymentRepository;
@Mock
private Deployment mMockDeployment;
private ActivateDeploymentUsecase mActivateDeploymentUsecase;
@Before
public void setUp() throws Exception {
MockitoAnnotations.initMocks(this);
mActivateDeploymentUsecase = new ActivateDeploymentUsecase(mMockDeploymentRepository,
mMockThreadExecutor, mMockPostExecutionThread);
}
@Test
public void shouldSuccessfullyAddDeployment() {
List<Deployment> deployments = new ArrayList<>();
deployments.add(mMockDeployment);
mActivateDeploymentUsecase.setDeployment(deployments, 1);
mActivateDeploymentUsecase.buildUseCaseObservable();
verify(mMockDeploymentRepository).updateEntity(deployments.get(0));
verifyNoMoreInteractions(mMockDeploymentRepository);
verifyZeroInteractions(mMockPostExecutionThread);
verifyZeroInteractions(mMockThreadExecutor);
}
@Test
public void shouldThrowRuntimeException() {
assertThat(mActivateDeploymentUsecase).isNotNull();
mActivateDeploymentUsecase.setDeployment(null, 0);
try {
mActivateDeploymentUsecase.execute(null);
assert_().fail("Should have thrown RuntimeException");
} catch (RuntimeException e) {
assertThat(e).hasMessage("Deployments is null you need to call setDeployment(...)");
}
}
}