package org.bookdash.android.data.book; import org.bookdash.android.data.database.firebase.BookDatabase; import org.bookdash.android.domain.model.firebase.FireBookDetails; import org.bookdash.android.domain.model.firebase.FireLanguage; import org.junit.Before; import org.junit.Test; import org.mockito.Mock; import org.mockito.MockitoAnnotations; import java.util.ArrayList; import java.util.List; import rx.Observable; import rx.observers.TestSubscriber; import static org.junit.Assert.assertEquals; import static org.mockito.Mockito.doReturn; import static org.mockito.Mockito.verify; import static org.mockito.Mockito.when; public class BookServiceImplTest { @Mock BookDatabase bookDatabase; BookServiceImpl bookService; @Before public void setUp() throws Exception { MockitoAnnotations.initMocks(this); bookService = new BookServiceImpl(bookDatabase); } @Test public void testGetLanguages() throws Exception { FireLanguage fireLanguage = new FireLanguage("English", "EN", true, "id123"); ArrayList<FireLanguage> fireLanguages = new ArrayList<>(); fireLanguages.add(fireLanguage); when(bookDatabase.getLanguages()).thenReturn(Observable.<List<FireLanguage>>just(fireLanguages)); TestSubscriber<List<FireLanguage>> testSubscriber = new TestSubscriber<>(); bookService.getLanguages().subscribe(testSubscriber); verify(bookDatabase).getLanguages(); testSubscriber.awaitTerminalEvent(); testSubscriber.assertNoErrors(); final List<List<FireLanguage>> result = testSubscriber.getOnNextEvents(); assertEquals("English", result.get(0).get(0).getLanguageName()); } @Test public void testGetBooksForLanguage() throws Exception { FireLanguage fireLanguage = new FireLanguage("English", "en", true, "123"); FireBookDetails fireBookDetails = new FireBookDetails("Book Title", "url", "cover_url", true, "test description", fireLanguage, System.currentTimeMillis()); ArrayList<FireBookDetails> bookDetails = new ArrayList<>(); bookDetails.add(fireBookDetails); doReturn(Observable.<List<FireBookDetails>>just(bookDetails)).when(bookDatabase).getBooks(); TestSubscriber<List<FireBookDetails>> testSubscriber = new TestSubscriber<>(); bookService.getBooksForLanguage(fireLanguage).subscribe(testSubscriber); verify(bookDatabase).getBooks(); testSubscriber.awaitTerminalEvent(); testSubscriber.assertNoErrors(); final List<List<FireBookDetails>> result = testSubscriber.getOnNextEvents(); assertEquals("Book Title", result.get(0).get(0).getBookTitle()); } }