package com.hitherejoe.bourboncorecommon.ui.browse;
import com.hitherejoe.bourboncorecommon.data.DataManager;
import com.hitherejoe.bourboncorecommon.data.model.Shot;
import com.hitherejoe.bourboncorecommon.util.RxSchedulersOverrideRule;
import com.hitherejoe.bourboncorecommon.util.TestDataFactory;
import org.junit.After;
import org.junit.Before;
import org.junit.Rule;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.mockito.Mock;
import org.mockito.runners.MockitoJUnitRunner;
import java.util.ArrayList;
import java.util.List;
import rx.Single;
import static org.mockito.Mockito.verify;
import static org.mockito.Mockito.when;
@RunWith(MockitoJUnitRunner.class)
public class BrowsePresenterTest {
@Mock
BrowseMvpView mMockBrowseMvpView;
@Mock
DataManager mMockDataManager;
private BrowsePresenter mBrowsePresenter;
@Rule
public final RxSchedulersOverrideRule mOverrideSchedulersRule = new RxSchedulersOverrideRule();
@Before
public void setUp() {
mBrowsePresenter = new BrowsePresenter(mMockDataManager);
mBrowsePresenter.attachView(mMockBrowseMvpView);
}
@After
public void detachView() {
mBrowsePresenter.detachView();
}
@Test
public void getShotsSuccessful() {
List<Shot> shots = TestDataFactory.makeShots(5);
stubDataManagerGetShots(Single.just(shots));
mBrowsePresenter.getShots(0, 0);
verify(mMockBrowseMvpView).showProgress();
verify(mMockBrowseMvpView).showShots(shots);
verify(mMockBrowseMvpView).hideProgress();
}
@Test
public void getShotsEmpty() {
List<Shot> shots = new ArrayList<>();
stubDataManagerGetShots(Single.just(shots));
mBrowsePresenter.getShots(0, 0);
verify(mMockBrowseMvpView).showProgress();
verify(mMockBrowseMvpView).showEmpty();
verify(mMockBrowseMvpView).hideProgress();
}
@Test
public void getShotsFailure() {
stubDataManagerGetShots(Single.<List<Shot>>error(new RuntimeException()));
mBrowsePresenter.getShots(0, 0);
verify(mMockBrowseMvpView).showProgress();
verify(mMockBrowseMvpView).showError();
verify(mMockBrowseMvpView).hideProgress();
}
private void stubDataManagerGetShots(Single<List<Shot>> single) {
when(mMockDataManager.getShots(0, 0)).thenReturn(single);
}
}