package com.esoxjem.movieguide.listing;
import com.esoxjem.movieguide.Movie;
import com.esoxjem.movieguide.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.MockitoAnnotations;
import org.robolectric.RobolectricTestRunner;
import java.util.List;
import rx.Observable;
import rx.observers.TestSubscriber;
import rx.schedulers.TestScheduler;
import static org.mockito.Mockito.verify;
import static org.mockito.Mockito.when;
/**
* @author arunsasidharan
*/
@RunWith(RobolectricTestRunner.class)
public class MoviesListingPresenterImplTest
{
@Mock
private MoviesListingInteractor interactor;
@Mock
private MoviesListingView view;
@Mock
Throwable throwable;
@Mock
private List<Movie> movies;
@Rule
public RxSchedulersOverrideRule rxSchedulersOverrideRule = new RxSchedulersOverrideRule();
private MoviesListingPresenterImpl presenter;
@Before
public void setUp() throws Exception
{
MockitoAnnotations.initMocks(this);
presenter = new MoviesListingPresenterImpl(interactor);
}
@After
public void teardown()
{
presenter.destroy();
}
@Test
public void shouldBeAbleToDisplayMovies()
{
TestScheduler testScheduler = new TestScheduler();
TestSubscriber<List<Movie>> testSubscriber = new TestSubscriber<>();
Observable<List<Movie>> responseObservable = Observable.just(movies).subscribeOn(testScheduler);
responseObservable.subscribe(testSubscriber);
when(interactor.fetchMovies()).thenReturn(responseObservable);
presenter.setView(view);
testScheduler.triggerActions();
testSubscriber.assertNoErrors();
testSubscriber.onCompleted();
verify(view).showMovies(movies);
}
}