package com.khmelenko.lab.varis.presenter;
import com.khmelenko.lab.varis.BuildConfig;
import com.khmelenko.lab.varis.dagger.DaggerTestComponent;
import com.khmelenko.lab.varis.dagger.TestComponent;
import com.khmelenko.lab.varis.network.response.Repo;
import com.khmelenko.lab.varis.network.retrofit.travis.TravisRestClient;
import com.khmelenko.lab.varis.task.TaskError;
import com.khmelenko.lab.varis.task.TaskException;
import com.khmelenko.lab.varis.task.TaskManager;
import com.khmelenko.lab.varis.view.SearchResultsView;
import org.junit.Before;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.robolectric.RobolectricGradleTestRunner;
import org.robolectric.annotation.Config;
import java.util.ArrayList;
import java.util.List;
import javax.inject.Inject;
import de.greenrobot.event.EventBus;
import static org.mockito.Matchers.eq;
import static org.mockito.Mockito.mock;
import static org.mockito.Mockito.spy;
import static org.mockito.Mockito.verify;
import static org.mockito.Mockito.when;
/**
* Testing {@link SearchResultsPresenter}
*
* @author Dmytro Khmelenko (d.khmelenko@gmail.com)
*/
@RunWith(RobolectricGradleTestRunner.class)
@Config(constants = BuildConfig.class, sdk = 21)
public class TestSearchResultsPresenter {
@Inject
TaskManager mTaskManager;
@Inject
EventBus mEventBus;
@Inject
TravisRestClient mTravisRestClient;
private SearchResultsPresenter mSearchResultsPresenter;
private SearchResultsView mSearchResultsView;
@Before
public void setup() {
TestComponent component = DaggerTestComponent.builder().build();
component.inject(this);
mSearchResultsPresenter = spy(new SearchResultsPresenter(mTaskManager, mEventBus));
mSearchResultsView = mock(SearchResultsView.class);
mSearchResultsPresenter.attach(mSearchResultsView);
}
@Test
public void testStartRepoSearch() {
final String searchQuery = "test";
final List<Repo> responseData = new ArrayList<>();
when(mTravisRestClient.getApiService().getRepos(searchQuery)).thenReturn(responseData);
mSearchResultsPresenter.startRepoSearch(searchQuery);
verify(mTaskManager).findRepos(searchQuery);
verify(mSearchResultsView).hideProgress();
verify(mSearchResultsView).setSearchResults(eq(responseData));
}
@Test
public void testStartRepoSearchFailed() {
final String searchQuery = "test";
final int errorCode = 401;
final String errorMsg = "error";
TaskError error = spy(new TaskError(errorCode, errorMsg));
TaskException exception = spy(new TaskException(error));
when(mTravisRestClient.getApiService().getRepos(searchQuery)).thenThrow(exception);
mSearchResultsPresenter.startRepoSearch(searchQuery);
verify(mTaskManager).findRepos(searchQuery);
verify(mSearchResultsView).hideProgress();
verify(mSearchResultsView).showLoadingError(eq(error.getMessage()));
}
}