package io.hefuyi.zhihudaily.mvp.presenter;
import org.junit.Before;
import org.junit.Test;
import io.hefuyi.zhihudaily.mvp.contract.ThemeStoryContract;
import io.hefuyi.zhihudaily.mvp.model.Theme;
import io.hefuyi.zhihudaily.domain.FetchThemeBeforeStoryUsecase;
import io.hefuyi.zhihudaily.domain.FetchThemeUsecase;
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/5.
*/
public class ThemeStoryPresenterTest {
FetchThemeUsecase mThemeUsecase;
FetchThemeBeforeStoryUsecase mBeforeStoryUsecase;
ThemeStoryContract.View mView;
ThemeStoryPresenter mPresenter;
@Before
public void setUp() {
mThemeUsecase = mock(FetchThemeUsecase.class);
mBeforeStoryUsecase = mock(FetchThemeBeforeStoryUsecase.class);
mView = mock(ThemeStoryContract.View.class);
mPresenter = new ThemeStoryPresenter(mThemeUsecase, mBeforeStoryUsecase);
mPresenter.attachView(mView);
}
@Test
public void testRefresh() {
String themeId = "";
Theme fakeTheme = new Theme();
when(mThemeUsecase.execute()).thenReturn(Observable.just(fakeTheme));
mPresenter.refresh(themeId);
verify(mThemeUsecase).setThemeId(themeId);
verify(mView).showRefreshing();
verify(mView).hideRefreshing();
verify(mView).showStory(fakeTheme);
}
@Test
public void testRefreshError() {
String themeId = "";
when(mThemeUsecase.execute()).thenReturn(Observable.<Theme>error(new Throwable()));
mPresenter.refresh(themeId);
verify(mThemeUsecase).setThemeId(themeId);
verify(mView).showRefreshing();
verify(mView).hideRefreshing();
verify(mView).showError("refresh error");
}
@Test
public void testLoadMore() {
String themeId = "";
String lastStoryId = "";
Theme fakeTheme = new Theme();
when(mBeforeStoryUsecase.execute()).thenReturn(Observable.just(fakeTheme));
mPresenter.loadMore(themeId, lastStoryId);
verify(mBeforeStoryUsecase).setStoryId(lastStoryId);
verify(mBeforeStoryUsecase).setThemeId(themeId);
verify(mView).appendStory(fakeTheme);
}
@Test
public void testLoadMoreError() {
String themeId = "";
String lastStoryId = "";
when(mBeforeStoryUsecase.execute()).thenReturn(Observable.<Theme>error(new Throwable()));
mPresenter.loadMore(themeId, lastStoryId);
verify(mBeforeStoryUsecase).setStoryId(lastStoryId);
verify(mBeforeStoryUsecase).setThemeId(themeId);
verify(mView).showError("load more error");
}
}