package com.artemzin.qualitymatters.models; import com.artemzin.qualitymatters.api.QualityMattersRestApi; import com.artemzin.qualitymatters.api.entities.Item; import org.junit.Before; import org.junit.Test; import java.util.List; import rx.Single; import static java.util.Arrays.asList; import static org.assertj.core.api.Assertions.assertThat; import static org.assertj.core.api.Assertions.failBecauseExceptionWasNotThrown; import static org.mockito.Mockito.mock; import static org.mockito.Mockito.when; public class ItemsModelTest { private QualityMattersRestApi qualityMattersRestApi; private ItemsModel itemsModel; @Before public void beforeEachTest() { qualityMattersRestApi = mock(QualityMattersRestApi.class); itemsModel = new ItemsModel(qualityMattersRestApi); } @Test public void getItems_shouldReturnItemsFromQualityMattersRestApi() { List<Item> items = asList(mock(Item.class), mock(Item.class)); when(qualityMattersRestApi.items()).thenReturn(Single.just(items)); assertThat(itemsModel.getItems().toBlocking().value()).containsExactlyElementsOf(items); } @Test public void getItems_shouldReturnErrorFromQualityMattersRestApi() { Exception error = new RuntimeException(); when(qualityMattersRestApi.items()).thenReturn(Single.error(error)); try { itemsModel.getItems().toBlocking().value(); failBecauseExceptionWasNotThrown(RuntimeException.class); } catch (Exception expected) { assertThat(expected).isSameAs(error); } } }