package com.hitherejoe.androidtvboilerplate.ui.content;
import com.hitherejoe.androidtvboilerplate.data.DataManager;
import com.hitherejoe.androidtvboilerplate.data.model.Cat;
import com.hitherejoe.androidtvboilerplate.test.common.TestDataFactory;
import com.hitherejoe.androidtvboilerplate.util.RxSchedulersOverrideRule;
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.List;
import rx.Single;
import static org.mockito.Matchers.anyListOf;
import static org.mockito.Mockito.never;
import static org.mockito.Mockito.verify;
import static org.mockito.Mockito.when;
@RunWith(MockitoJUnitRunner.class)
public class ContentPresenterTest {
@Mock ContentMvpView mMockContentMvpView;
@Mock DataManager mMockDataManager;
private ContentPresenter mContentPresenter;
@Rule
public final RxSchedulersOverrideRule mOverrideSchedulersRule = new RxSchedulersOverrideRule();
@Before
public void setUp() {
mContentPresenter = new ContentPresenter(mMockDataManager);
mContentPresenter.attachView(mMockContentMvpView);
}
@After
public void detachView() {
mContentPresenter.detachView();
}
@Test
public void getCatsSuccessful() {
List<Cat> cats = TestDataFactory.makeCats(10);
stubDataManagerGetCats(Single.just(cats));
mContentPresenter.getCats(cats);
verify(mMockContentMvpView).showCats(cats);
verify(mMockContentMvpView, never()).showCatsError();
}
@Test
public void getTagsFails() {
List<Cat> cats = TestDataFactory.makeCats(10);
stubDataManagerGetCats(Single.just(cats));
stubDataManagerGetCats(Single.<List<Cat>>error(new RuntimeException()));
mContentPresenter.getCats(cats);
verify(mMockContentMvpView).showCatsError();
verify(mMockContentMvpView, never()).showCats(anyListOf(Cat.class));
}
private void stubDataManagerGetCats(Single<List<Cat>> single) {
when(mMockDataManager.getCats(anyListOf(Cat.class))).thenReturn(single);
}
}