package io.hefuyi.zhihudaily.mvp.presenter;
import org.junit.Before;
import org.junit.Test;
import io.hefuyi.zhihudaily.mvp.contract.DailyStoryContract;
import io.hefuyi.zhihudaily.mvp.model.DailyStories;
import io.hefuyi.zhihudaily.domain.FetchBeforeDailyStoriesUsecase;
import io.hefuyi.zhihudaily.domain.FetchLatestDailyStoriesUsecase;
import rx.Observable;
import static org.mockito.Mockito.mock;
import static org.mockito.Mockito.verify;
import static org.mockito.Mockito.when;
/**
* Created by hefuyi on 16/9/4.
*/
public class DailyStoryPresenterTest {
FetchBeforeDailyStoriesUsecase mBeforeDailyStoriesUsecase;
FetchLatestDailyStoriesUsecase mLatestDailyStoriesUsecase;
DailyStoryContract.View mView;
DailyStoryPresenter mPresenter;
@Before
public void setUp() {
mBeforeDailyStoriesUsecase = mock(FetchBeforeDailyStoriesUsecase.class);
mLatestDailyStoriesUsecase = mock(FetchLatestDailyStoriesUsecase.class);
mView = mock(DailyStoryContract.View.class);
mPresenter = new DailyStoryPresenter(mLatestDailyStoriesUsecase, mBeforeDailyStoriesUsecase);
mPresenter.attachView(mView);
}
@Test
public void testRefresh() {
final DailyStories fakeDailyStory = new DailyStories();
when(mLatestDailyStoriesUsecase.execute()).thenReturn(Observable.just(fakeDailyStory));
mPresenter.refresh();
verify(mView).showRefreshing();
verify(mView).hideRefreshing();
verify(mView).showStory(fakeDailyStory);
}
@Test
public void testRefreshError() {
when(mLatestDailyStoriesUsecase.execute()).thenReturn(Observable.<DailyStories>error(new Throwable()));
mPresenter.refresh();
verify(mView).showRefreshing();
verify(mView).showError("refresh error");
verify(mView).hideRefreshing();
}
@Test
public void testLoadMore() {
String date = "";
DailyStories fakeDailyStory = new DailyStories();
when(mBeforeDailyStoriesUsecase.execute()).thenReturn(Observable.just(fakeDailyStory));
mPresenter.loadMore(date);
verify(mBeforeDailyStoriesUsecase).setDate(date);
verify(mView).appendStory(fakeDailyStory);
}
@Test
public void testLoadMoreError() {
String date = "";
when(mBeforeDailyStoriesUsecase.execute()).thenReturn(Observable.<DailyStories>error(new Throwable()));
mPresenter.loadMore(date);
verify(mBeforeDailyStoriesUsecase).setDate(date);
verify(mView).showError("load more error");
}
}