use of com.hannesdorfmann.mosby3.sample.mvi.businesslogic.model.Product in project mosby by sockeqwe.
the class HomePresenterTest method loadingFirstPageAndNextPage.
@Test
public void loadingFirstPageAndNextPage() {
//
// Prepare mock server to deliver mock response on incoming http request
//
List<Product> mockProductsFirstPage = Arrays.asList(new Product(1, "image", "name", "category1", "description", 21.9), new Product(2, "image", "name", "category1", "description", 21.9), new Product(3, "image", "name", "category1", "description", 21.9), new Product(4, "image", "name", "category1", "description", 21.9), new Product(5, "image", "name", "category1", "description", 21.9));
List<Product> mockProductsNextPage = Arrays.asList(new Product(6, "image", "name", "category2", "description", 21.9), new Product(7, "image", "name", "category2", "description", 21.9), new Product(8, "image", "name", "category2", "description", 21.9), new Product(9, "image", "name", "category2", "description", 21.9));
mockWebServer.enqueue(new MockResponse().setBody(adapter.toJson(mockProductsFirstPage)));
mockWebServer.enqueue(new MockResponse().setBody(adapter.toJson(mockProductsNextPage)));
//
// init the robot to drive to View which triggers intents on the presenter
//
// In a real app you could use dagger or instantiate the Presenter manually like new HomePresenter(...)
HomePresenter presenter = new DependencyInjection().newHomePresenter();
HomeViewRobot robot = new HomeViewRobot(presenter);
//
// We are ready, so let's start: fire intents
//
robot.fireLoadFirstPageIntent();
//
// we expect that 2 view.render() events happened with the following HomeViewState:
// 1. show loading indicator
// 2. show the items with the first page
//
List<FeedItem> expectedDataAfterFristPage = Arrays.asList(new SectionHeader("category1"), mockProductsFirstPage.get(0), mockProductsFirstPage.get(1), mockProductsFirstPage.get(2), new AdditionalItemsLoadable(2, "category1", false, null));
HomeViewState loadingFirstPage = new HomeViewState.Builder().firstPageLoading(true).build();
HomeViewState firstPage = new HomeViewState.Builder().data(expectedDataAfterFristPage).build();
// Check if as expected
robot.assertViewStateRendered(loadingFirstPage, firstPage);
//
// Fire second intent
//
robot.fireLoadNextPageIntent();
//
// we expect that 4 view.render() events happened with the following HomeViewState:
// 1. show loading indicator (caused by loadFirstPageIntent)
// 2. show the items with the first page (caused by loadFirstPageIntent)
// 3. show loading next page indicator
// 4. show next page content (plus original first page content)
//
List<FeedItem> expectedDataAfterNextPage = Arrays.asList(new SectionHeader("category1"), mockProductsFirstPage.get(0), mockProductsFirstPage.get(1), mockProductsFirstPage.get(2), new AdditionalItemsLoadable(2, "category1", false, null), new SectionHeader("category2"), mockProductsNextPage.get(0), mockProductsNextPage.get(1), mockProductsNextPage.get(2), new AdditionalItemsLoadable(1, "category2", false, null));
HomeViewState nextPageLoading = new HomeViewState.Builder().data(expectedDataAfterFristPage).nextPageLoading(true).build();
HomeViewState nextPage = new HomeViewState.Builder().data(expectedDataAfterNextPage).build();
// Check if as expected
robot.assertViewStateRendered(loadingFirstPage, firstPage, nextPageLoading, nextPage);
}
Aggregations