package com.hitherejoe.androidtvboilerplate.ui.search;
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 SearchContentPresenterTest {
@Mock SearchContentMvpView mMockSearchContentMvpView;
@Mock DataManager mMockDataManager;
private SearchContentPresenter mSearchContentPresenter;
@Rule
public final RxSchedulersOverrideRule mOverrideSchedulersRule = new RxSchedulersOverrideRule();
@Before
public void setUp() {
mSearchContentPresenter = new SearchContentPresenter(mMockDataManager);
mSearchContentPresenter.attachView(mMockSearchContentMvpView);
}
@After
public void detachView() {
mSearchContentPresenter.detachView();
}
@Test
public void getCatsSuccessful() {
List<Cat> cats = TestDataFactory.makeCats(10);
stubDataManagerGetCats(Single.just(cats));
mSearchContentPresenter.searchCats(cats);
verify(mMockSearchContentMvpView).showCats(cats);
verify(mMockSearchContentMvpView, never()).showCatsError();
}
@Test
public void getTagsFails() {
List<Cat> cats = TestDataFactory.makeCats(10);
stubDataManagerGetCats(Single.just(cats));
stubDataManagerGetCats(Single.<List<Cat>>error(new RuntimeException()));
mSearchContentPresenter.searchCats(cats);
verify(mMockSearchContentMvpView).showCatsError();
verify(mMockSearchContentMvpView, never()).showCats(anyListOf(Cat.class));
}
private void stubDataManagerGetCats(Single<List<Cat>> single) {
when(mMockDataManager.getCats(anyListOf(Cat.class))).thenReturn(single);
}
}