package sagan.support.nav; import java.util.ArrayList; import java.util.List; import org.junit.Test; import org.springframework.data.domain.PageImpl; import org.springframework.data.domain.PageRequest; import static org.hamcrest.CoreMatchers.*; import static org.hamcrest.MatcherAssert.assertThat; public class PaginationInfo_PaginationElementsTests { List<String> content = new ArrayList<>(); @Test public void givenOnePage_rendersCurrentElement() { PageRequest pageRequest = new PageRequest(0, 10); int itemCount = 3; PaginationInfo paginationInfo = new PaginationInfo(new PageImpl<>(content, pageRequest, itemCount)); List<PageElement> pageElements = paginationInfo.getPageElements(); assertThat(pageElements.size(), is(equalTo(1))); assertNotNavigableElementOnPage("1", pageElements.get(0)); } @Test public void givenTwoPages_rendersCurrentElementAndPageTwo() { PageRequest pageRequest = new PageRequest(0, 10); int itemCount = 13; PaginationInfo paginationInfo = new PaginationInfo(new PageImpl<>(content, pageRequest, itemCount)); List<PageElement> pageElements = paginationInfo.getPageElements(); assertThat(paginationInfo.getPageElements().size(), is(equalTo(2))); assertNotNavigableElementOnPage("1", pageElements.get(0)); assertNavigableElementOnPage("2", pageElements.get(1)); } @Test public void givenThreePagesOnPageTwo_rendersCurrentElementAndPageTwo() { PageRequest pageRequest = new PageRequest(1, 10); int itemCount = 23; PaginationInfo paginationInfo = new PaginationInfo(new PageImpl<>(content, pageRequest, itemCount)); List<PageElement> pageElements = paginationInfo.getPageElements(); assertThat(pageElements.size(), is(equalTo(3))); assertNavigableElementOnPage("1", pageElements.get(0)); assertNotNavigableElementOnPage("2", pageElements.get(1)); assertNavigableElementOnPage("3", pageElements.get(2)); } @Test public void givenTenPagesOnPageFive_rendersPreviousTwoPagesAndNextThree() { PageRequest pageRequest = new PageRequest(4, 10); int itemCount = 93; PaginationInfo paginationInfo = new PaginationInfo(new PageImpl<>(content, pageRequest, itemCount)); List<PageElement> pageElements = paginationInfo.getPageElements(); assertThat(paginationInfo.getPageElements().size(), is(equalTo(10))); assertNavigableElementOnPage("3", pageElements.get(2)); assertNavigableElementOnPage("4", pageElements.get(3)); assertNotNavigableElementOnPage("5", pageElements.get(4)); assertNavigableElementOnPage("6", pageElements.get(5)); assertNavigableElementOnPage("7", pageElements.get(6)); assertNavigableElementOnPage("8", pageElements.get(7)); } @Test public void alwaysRendersFirstAndLastPage() { PageRequest pageRequest = new PageRequest(4, 10); int itemCount = 93; PaginationInfo paginationInfo = new PaginationInfo(new PageImpl<>(content, pageRequest, itemCount)); List<PageElement> pageElements = paginationInfo.getPageElements(); assertThat(paginationInfo.getPageElements().size(), is(equalTo(10))); assertNavigableElementOnPage("1", pageElements.get(0)); assertNavigableElementOnPage("10", pageElements.get(9)); } @Test public void rendersEllipsesBetweenNonAdjacentPages() { PageRequest pageRequest = new PageRequest(4, 10); int itemCount = 93; PaginationInfo paginationInfo = new PaginationInfo(new PageImpl<>(content, pageRequest, itemCount)); List<PageElement> pageElements = paginationInfo.getPageElements(); assertThat(paginationInfo.getPageElements().size(), is(equalTo(10))); assertNotNavigableElementOnPage("...", pageElements.get(1)); assertNotNavigableElementOnPage("...", pageElements.get(8)); } @Test public void doesNotRenderEllipsesBetweenAdjacentPages() { PageRequest pageRequest = new PageRequest(2, 10); int itemCount = 63; PaginationInfo paginationInfo = new PaginationInfo(new PageImpl<>(content, pageRequest, itemCount)); List<PageElement> pageElements = paginationInfo.getPageElements(); assertThat(paginationInfo.getPageElements().size(), is(equalTo(7))); assertNavigableElementOnPage("1", pageElements.get(0)); assertNavigableElementOnPage("2", pageElements.get(1)); assertNotNavigableElementOnPage("3", pageElements.get(2)); assertNavigableElementOnPage("4", pageElements.get(3)); assertNavigableElementOnPage("5", pageElements.get(4)); assertNavigableElementOnPage("6", pageElements.get(5)); assertNavigableElementOnPage("7", pageElements.get(6)); } @Test public void rendersFirstSixPagesOnPageOne_givenEnoughNumberOfPages() throws Exception { int currentPageIndex = 0; PageRequest pageRequest = new PageRequest(currentPageIndex, 10); int itemCount = 133; PaginationInfo paginationInfo = new PaginationInfo(new PageImpl<>(content, pageRequest, itemCount)); List<PageElement> pageElements = paginationInfo.getPageElements(); assertThat(paginationInfo.getPageElements().size(), is(equalTo(8))); assertNotNavigableElementOnPage("1", pageElements.get(0)); assertNavigableElementOnPage("2", pageElements.get(1)); assertNavigableElementOnPage("3", pageElements.get(2)); assertNavigableElementOnPage("4", pageElements.get(3)); assertNavigableElementOnPage("5", pageElements.get(4)); assertNavigableElementOnPage("6", pageElements.get(5)); assertNotNavigableElementOnPage("...", pageElements.get(6)); assertNavigableElementOnPage("14", pageElements.get(7)); } @Test public void rendersFirstSixPagesOnPageThree_givenEnoughNumberOfPages() throws Exception { int currentPageIndex = 2; PageRequest pageRequest = new PageRequest(currentPageIndex, 10); int itemCount = 133; PaginationInfo paginationInfo = new PaginationInfo(new PageImpl<>(content, pageRequest, itemCount)); List<PageElement> pageElements = paginationInfo.getPageElements(); assertThat(paginationInfo.getPageElements().size(), is(equalTo(8))); assertNavigableElementOnPage("1", pageElements.get(0)); assertNavigableElementOnPage("2", pageElements.get(1)); assertNotNavigableElementOnPage("3", pageElements.get(2)); assertNavigableElementOnPage("4", pageElements.get(3)); assertNavigableElementOnPage("5", pageElements.get(4)); assertNavigableElementOnPage("6", pageElements.get(5)); assertNotNavigableElementOnPage("...", pageElements.get(6)); assertNavigableElementOnPage("14", pageElements.get(7)); } @Test public void rendersCurrentPage() throws Exception { int currentPageIndex = 2; PageRequest pageRequest = new PageRequest(currentPageIndex, 10); int itemCount = 133; PaginationInfo paginationInfo = new PaginationInfo(new PageImpl<>(content, pageRequest, itemCount)); List<PageElement> pageElements = paginationInfo.getPageElements(); assertThat(pageElements.get(0).isCurrentPage(), is(false)); assertThat(pageElements.get(1).isCurrentPage(), is(false)); assertThat(pageElements.get(2).isCurrentPage(), is(true)); assertThat(pageElements.get(3).isCurrentPage(), is(false)); assertThat(pageElements.get(4).isCurrentPage(), is(false)); assertThat(pageElements.get(5).isCurrentPage(), is(false)); assertThat(pageElements.get(6).isCurrentPage(), is(false)); assertThat(pageElements.get(7).isCurrentPage(), is(false)); } private void assertNotNavigableElementOnPage(String page, PageElement element) { assertThat(element.isNavigable(), is(false)); assertThat(element.getLabel(), is(page)); } private void assertNavigableElementOnPage(String page, PageElement element) { assertThat(element.isNavigable(), is(true)); assertThat(element.getLabel(), is(page)); } }