package br.com.mgalhardo.guidebook.ui.guidelist; import com.google.gson.Gson; import org.junit.Before; import org.junit.Rule; import org.junit.Test; import java.io.IOException; import java.util.ArrayList; import br.com.mgalhardo.guidebook.domain.aggregation.GuideAggregation; import br.com.mgalhardo.guidebook.domain.repository.GuideRepository; import br.com.mgalhardo.guidebook.presentation.ui.guidelist.GuideListContract; import br.com.mgalhardo.guidebook.presentation.ui.guidelist.GuideListPresenter; import br.com.mgalhardo.guidebook.util.IOUtils; import br.com.mgalhardo.guidebook.util.RxSchedulersOverrideRule; import rx.Observable; import static org.mockito.Mockito.mock; import static org.mockito.Mockito.verify; import static org.mockito.Mockito.verifyNoMoreInteractions; import static org.mockito.Mockito.when; public class GuideListPresenterTest { @Rule public final RxSchedulersOverrideRule rxJavaRule = new RxSchedulersOverrideRule(); Gson gson = new Gson(); GuideRepository guideRepository; GuideListContract.View view; GuideListPresenter presenter; @Before public void setup() { guideRepository = mock(GuideRepository.class); view = mock(GuideListContract.View.class); presenter = new GuideListPresenter(guideRepository); presenter.setView(view); } @Test public void loadGuidesFromRepositoryAndLoadIntoView() throws IOException { String json = IOUtils.readStringFromResourcePath("upcoming-guides.json"); GuideAggregation guideAggregation = gson.fromJson(json, GuideAggregation.class); when(guideRepository.getCompanies()).thenReturn(Observable.just(guideAggregation)); presenter.loadGuides(); verify(guideRepository).getCompanies(); verify(view).showLoadingLayout(); verify(view).showSuccessLayout(); verify(view).setupGuideList(guideAggregation.guides); verifyNoMoreInteractions(guideRepository); verifyNoMoreInteractions(view); } @Test public void loadEmptyGuideListFromRepositoryAndPresentEmptyLayout() throws IOException { GuideAggregation guideAggregation = new GuideAggregation(); guideAggregation.total = 0; guideAggregation.guides = new ArrayList<>(); when(guideRepository.getCompanies()).thenReturn(Observable.just(guideAggregation)); presenter.loadGuides(); verify(guideRepository).getCompanies(); verify(view).showLoadingLayout(); verify(view).showEmptyLayout(); verifyNoMoreInteractions(guideRepository); verifyNoMoreInteractions(view); } @Test public void loadGuidesFromRepositoryFailsAndPresentErrorLayout() { when(guideRepository.getCompanies()) .thenReturn(Observable.<GuideAggregation>error(new NullPointerException())); presenter.loadGuides(); verify(guideRepository).getCompanies(); verify(view).showLoadingLayout(); verify(view).showErrorLayout(); verifyNoMoreInteractions(guideRepository); verifyNoMoreInteractions(view); } }