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 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 UpdateDeploymentUsecase}
*
* @author Ushahidi Team <team@ushahidi.com>
*/
@RunWith(RobolectricGradleTestRunner.class)
@Config(sdk = DefaultConfig.EMULATE_SDK, constants = BuildConfig.class)
public class UpdateDeploymentUsecaseTest {
@Mock
private ThreadExecutor mMockThreadExecutor;
@Mock
private PostExecutionThread mMockPostExecutionThread;
@Mock
private DeploymentRepository mMockDeploymentRepository;
@Mock
private Deployment mMockDeployment;
private UpdateDeploymentUsecase mUpdateDeploymentUsecase;
@Before
public void setUp() throws Exception {
MockitoAnnotations.initMocks(this);
mUpdateDeploymentUsecase = new UpdateDeploymentUsecase(mMockDeploymentRepository,
mMockThreadExecutor, mMockPostExecutionThread);
}
@Test
public void shouldSuccessfullyAddDeployment() {
mUpdateDeploymentUsecase.setDeployment(mMockDeployment);
mUpdateDeploymentUsecase.buildUseCaseObservable();
verify(mMockDeploymentRepository).updateEntity(mMockDeployment);
verifyNoMoreInteractions(mMockDeploymentRepository);
verifyZeroInteractions(mMockPostExecutionThread);
verifyZeroInteractions(mMockThreadExecutor);
}
@Test
public void shouldThrowRuntimeException() {
assertThat(mUpdateDeploymentUsecase).isNotNull();
mUpdateDeploymentUsecase.setDeployment(null);
try {
mUpdateDeploymentUsecase.execute(null);
assert_().fail("Should have thrown RuntimeException");
} catch (RuntimeException e) {
assertThat(e).hasMessage("Deployment is null. You must call setDeployment(...)");
}
}
}