/*************************GO-LICENSE-START********************************* * Copyright 2014 ThoughtWorks, Inc. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. *************************GO-LICENSE-END***********************************/ package com.thoughtworks.go.server.util; import java.util.Arrays; import org.junit.Test; import static org.hamcrest.core.Is.is; import static org.junit.Assert.assertThat; import static org.junit.Assert.fail; public class PaginationTest { @Test public void shouldNotCreatePaginationWithMoreThan300Records() { try { Pagination.pageStartingAt(0, 1000, 301); } catch (Exception e) { assertThat(e.getMessage(), is("The max number of perPage is [300].")); } } @Test public void shouldCreatePaginationWithLessEquals300Records() { try { Pagination.pageStartingAt(0, 1000, 300); } catch (Exception e) { fail(); } } @Test public void shouldCreatePaginationProvidingNull() { try { Pagination.pageStartingAt(0, 1000, null); } catch (Exception e) { fail(); } } @Test public void shouldHavePage1ForFirst() { Pagination pagination = Pagination.pageStartingAt(0, 1000, 10); assertThat(pagination.getCurrentPage(), is(1)); assertThat(pagination.getTotalPages(), is(100)); } @Test public void shouldHavePage1ForEndOfPage() { Pagination pagination = Pagination.pageStartingAt(9, 1000, 10); assertThat(pagination.getCurrentPage(), is(1)); } @Test public void shouldHavePage2ForTenth() { Pagination pagination = Pagination.pageStartingAt(10, 1000, 10); assertThat(pagination.getCurrentPage(), is(2)); } @Test public void shouldHaveOffsetForPreviousPage() { Pagination pagination = Pagination.pageStartingAt(70, 1000, 10); assertThat(pagination.getCurrentPage(), is(8)); assertThat(pagination.getPreviousPage(), is(7)); assertThat(pagination.getPreviousOffset(), is(60)); assertThat(pagination.getNextPage(), is(9)); assertThat(pagination.getNextOffset(), is(80)); assertThat(pagination.hasNextPage(), is(true)); assertThat(pagination.hasPreviousPage(), is(true)); } @Test public void shouldHaveOffsetsForFinalPage() { Pagination pagination = Pagination.pageStartingAt(11, 16, 10); assertThat(pagination.getCurrentPage(), is(2)); assertThat(pagination.hasNextPage(), is(false)); assertThat(pagination.hasPreviousPage(), is(true)); } @Test public void shouldReturnHasPreviousAndNextPages() { Pagination pagination = Pagination.pageStartingAt(10, 16, 10); assertThat(pagination.hasPreviousPage(), is(true)); assertThat(pagination.hasNextPage(), is(false)); } @Test public void shouldHaveOffsetsForFirstPage() { Pagination pagination = Pagination.pageStartingAt(0, 16, 10); assertThat(pagination.getCurrentPage(), is(1)); assertThat(pagination.hasNextPage(), is(true)); assertThat(pagination.hasPreviousPage(), is(false)); } @Test public void shouldFindPageForAGivenOffset() { assertThat(Pagination.pageFor(0, 10, 3), is(Pagination.pageStartingAt(0, 10, 3))); assertThat(Pagination.pageFor(1, 10, 3), is(Pagination.pageStartingAt(0, 10, 3))); assertThat(Pagination.pageFor(2, 10, 3), is(Pagination.pageStartingAt(0, 10, 3))); assertThat(Pagination.pageFor(3, 10, 3), is(Pagination.pageStartingAt(3, 10, 3))); assertThat(Pagination.pageFor(4, 10, 3), is(Pagination.pageStartingAt(3, 10, 3))); assertThat(Pagination.pageFor(5, 10, 3), is(Pagination.pageStartingAt(3, 10, 3))); assertThat(Pagination.pageFor(6, 10, 3), is(Pagination.pageStartingAt(6, 10, 3))); } @Test public void shouldFindPageForAGivenPage() { assertThat(Pagination.pageByNumber(1, 10, 3), is(Pagination.pageStartingAt(0, 10, 3))); assertThat(Pagination.pageByNumber(2, 10, 3), is(Pagination.pageStartingAt(3, 10, 3))); assertThat(Pagination.pageByNumber(3, 10, 3), is(Pagination.pageStartingAt(6, 10, 3))); } @Test public void shouldUnderstandFirstPage() { assertThat(Pagination.pageStartingAt(3, 10, 3).getFirstPage(), is(1)); assertThat(Pagination.pageStartingAt(6, 10, 3).getFirstPage(), is(1)); } @Test public void shouldUnderstandLastPage() { assertThat(Pagination.pageStartingAt(3, 10, 3).getLastPage(), is(4)); assertThat(Pagination.pageStartingAt(6, 10, 3).getLastPage(), is(4)); assertThat(Pagination.pageStartingAt(0, 2, 3).getLastPage(), is(1)); assertThat(Pagination.pageStartingAt(2, 3, 3).getLastPage(), is(1)); } @Test public void shouldReturnAllPagesIfLessThan9() { assertThat(Pagination.pageByNumber(1, 8, 1).getPages(), is(Arrays.asList(Pagination.currentPage(1), Pagination.page(2), Pagination.page(3), Pagination.page(4), Pagination.page(5), Pagination.page(6), Pagination.page(7), Pagination.page(8), Pagination.page(2, "next")))); assertThat(Pagination.pageByNumber(1, 3, 1).getPages(), is(Arrays.asList(Pagination.currentPage(1), Pagination.page(2), Pagination.page(3), Pagination.page(2, "next")))); } @Test public void shouldShowDotsIfMoreThan8Pages() { assertThat(Pagination.pageByNumber(5, 9, 1).getPages(), is(Arrays.asList(Pagination.page(4, "prev"), Pagination.page(1), Pagination.PageNumber.DOTS, Pagination.page(3), Pagination.page(4), Pagination.currentPage(5), Pagination.page(6), Pagination.page(7), Pagination.PageNumber.DOTS, Pagination.page(9), Pagination.page(6, "next")))); assertThat(Pagination.pageByNumber(5, 100, 1).getPages(), is(Arrays.asList(Pagination.page(4, "prev"), Pagination.page(1), Pagination.PageNumber.DOTS, Pagination.page(3), Pagination.page(4), Pagination.currentPage(5), Pagination.page(6), Pagination.page(7), Pagination.PageNumber.DOTS, Pagination.page(100), Pagination.page(6, "next")))); } @Test public void shouldShowDotsAtEndIfOnFirst4Pages() { assertThat(Pagination.pageByNumber(1, 100, 1).getPages(), is(Arrays.asList(Pagination.currentPage(1), Pagination.page(2), Pagination.page(3), Pagination.PageNumber.DOTS, Pagination.page(100), Pagination.page(2, "next")))); assertThat(Pagination.pageByNumber(2, 100, 1).getPages(), is(Arrays.asList(Pagination.page(1, "prev"), Pagination.page(1), Pagination.currentPage(2), Pagination.page(3), Pagination.page(4), Pagination.PageNumber.DOTS, Pagination.page(100), Pagination.page(3, "next")))); assertThat(Pagination.pageByNumber(3, 100, 1).getPages(), is(Arrays.asList(Pagination.page(2, "prev"), Pagination.page(1), Pagination.page(2), Pagination.currentPage(3), Pagination.page(4), Pagination.page(5), Pagination.PageNumber.DOTS, Pagination.page(100), Pagination.page(4, "next")))); assertThat(Pagination.pageByNumber(4, 100, 1).getPages(), is(Arrays.asList(Pagination.page(3, "prev"), Pagination.page(1), Pagination.page(2), Pagination.page(3), Pagination.currentPage(4), Pagination.page(5), Pagination.page(6), Pagination.PageNumber.DOTS, Pagination.page(100), Pagination.page(5, "next")))); } @Test public void shouldShowDotsAtStartIfOnLast4Pages() { assertThat(Pagination.pageByNumber(97, 100, 1).getPages(), is(Arrays.asList(Pagination.page(96, "prev"), Pagination.page(1), Pagination.PageNumber.DOTS, Pagination.page(95), Pagination.page(96), Pagination.currentPage(97), Pagination.page(98), Pagination.page(99), Pagination.page(100), Pagination.page(98, "next")))); assertThat(Pagination.pageByNumber(98, 100, 1).getPages(), is(Arrays.asList(Pagination.page(97, "prev"), Pagination.page(1), Pagination.PageNumber.DOTS, Pagination.page(96), Pagination.page(97), Pagination.currentPage(98), Pagination.page(99), Pagination.page(100), Pagination.page(99, "next")))); assertThat(Pagination.pageByNumber(99, 100, 1).getPages(), is(Arrays.asList(Pagination.page(98, "prev"), Pagination.page(1), Pagination.PageNumber.DOTS, Pagination.page(97), Pagination.page(98), Pagination.currentPage(99), Pagination.page(100), Pagination.page(100, "next")))); assertThat(Pagination.pageByNumber(100, 100, 1).getPages(), is(Arrays.asList(Pagination.page(99, "prev"), Pagination.page(1), Pagination.PageNumber.DOTS, Pagination.page(98), Pagination.page(99), Pagination.currentPage(100)))); } @Test public void shouldUnderstandDotsPageNumber() { assertThat(Pagination.PageNumber.DOTS.isDots(), is(true)); assertThat(Pagination.page(1).isDots(), is(false)); } @Test public void shouldUnderstandPageNumberAndLabel() { assertThat(Pagination.PageNumber.DOTS.getLabel(), is("...")); assertThat(Pagination.PageNumber.DOTS.getNumber(), is(-1)); assertThat(Pagination.page(5).getLabel(), is("5")); assertThat(Pagination.page(5).getNumber(), is(5)); assertThat(Pagination.page(10, "foo").getLabel(), is("foo")); assertThat(Pagination.page(10, "foo").getNumber(), is(10)); } @Test public void shouldUnderstandIfCurrent() { assertThat(Pagination.currentPage(5).isCurrent(), is(true)); assertThat(Pagination.page(5).isCurrent(), is(false)); } }