/* * Copyright 2012 the original author or authors. * * 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. */ package com.github.carlomicieli.nerdmovies.utility; import com.github.carlomicieli.nerdmovies.models.Movie; import org.junit.Test; import org.junit.runner.RunWith; import org.mockito.runners.MockitoJUnitRunner; import java.util.ArrayList; import java.util.Arrays; import java.util.List; import static org.junit.Assert.*; /** * @author Carlo Micieli */ @RunWith(MockitoJUnitRunner.class) public class PaginatedResultTests { @Test public void previousAndNextLinksAreNotShownForOnePageResult() { int page = 1; long nrOfElements = 2; List<Movie> movies = Arrays.asList(new Movie(), new Movie()); PaginatedResult<Movie> pr = new PaginatedResult<Movie>(movies, nrOfElements, page); assertFalse(pr.showNextLink()); assertFalse(pr.showPreviousLink()); } @Test public void showNextLink() { PaginatedResult<Movie> pr = new PaginatedResult<Movie>(new ArrayList<Movie>(), 16, 1, 2); assertFalse(pr.showPreviousLink()); assertTrue(pr.showNextLink()); } @Test public void showPreviousLink() { PaginatedResult<Movie> pr = new PaginatedResult<Movie>(new ArrayList<Movie>(), 20, 2, 10); assertTrue(pr.showPreviousLink()); assertFalse(pr.showNextLink()); } @Test public void calculatingTheNumberOfPages() { PaginatedResult<Movie> pr = new PaginatedResult<Movie>(null, 100, 0, 25); assertEquals(4, pr.getPageCount()); PaginatedResult<Movie> pr2 = new PaginatedResult<Movie>(null, 110, 0, 25); assertEquals(5, pr2.getPageCount()); } @Test(expected = IllegalArgumentException.class) public void invalidPageSizeThrowsAnException() { int pageSize = 0; new PaginatedResult<Movie>(null, 100, 0, pageSize); } @Test public void pageLinksForOnePage() { int page = 1; long nrOfElements = 2; int pageSize = 25; List<Movie> movies = Arrays.asList(new Movie(), new Movie()); PaginatedResult<Movie> pr = new PaginatedResult<Movie>(movies, nrOfElements, page, pageSize); assertEquals(1, pr.getFirstPageLink()); assertEquals(1, pr.getLastPageLink()); List<Integer> links = pr.getPageLinks(); assertNotNull(links); assertEquals(1, links.size()); List<Integer> expected = Arrays.asList(1); assertArrayEquals(expected.toArray(), links.toArray()); } @Test public void paginateResultForTheOnePage() { int page = 1; long nrOfElements = 25; int pageSize = 25; PaginatedResult<Movie> pr = new PaginatedResult<Movie>(new ArrayList<Movie>(), nrOfElements, page, pageSize); List<Movie> movies = pr.getData(); assertNotNull("Movies list is empty", movies); assertEquals(1, pr.getPage()); assertEquals(25, pr.getNrOfElements()); assertEquals(true, pr.isFirstPage()); assertEquals(true, pr.isLastPage()); } @Test public void paginateResultForTheLastPage() { int page = 5; long nrOfElements = 110; int pageSize = 25; PaginatedResult<Movie> pr = new PaginatedResult<Movie>(new ArrayList<Movie>(), nrOfElements, page, pageSize); List<Movie> movies = pr.getData(); assertNotNull("Movies list is empty", movies); assertEquals(5, pr.getPage()); assertEquals(110, pr.getNrOfElements()); assertEquals(false, pr.isFirstPage()); assertEquals(true, pr.isLastPage()); } @Test public void paginateResultForTheMiddlePage() { int page = 3; long nrOfElements = 110; int pageSize = 25; PaginatedResult<Movie> pr = new PaginatedResult<Movie>(new ArrayList<Movie>(), nrOfElements, page, pageSize); List<Movie> movies = pr.getData(); assertNotNull("Movies list is empty", movies); assertEquals(3, pr.getPage()); assertEquals(110, pr.getNrOfElements()); assertEquals(false, pr.isFirstPage()); assertEquals(false, pr.isLastPage()); } @Test public void linksPageNumberForFirst10Pages() { int page = 3; long nrOfElements = 200; int pageSize = 10; PaginatedResult<Movie> pr = new PaginatedResult<Movie>(new ArrayList<Movie>(), nrOfElements, page, pageSize); assertEquals(3, pr.getPage()); assertEquals(20, pr.getPageCount()); assertEquals(1, pr.getFirstPageLink()); assertEquals(10, pr.getLastPageLink()); List<Integer> pageLinks = Arrays.asList(1, 2, 3, 4, 5, 6, 7, 8, 9, 10); assertEquals(pageLinks, pr.getPageLinks()); } @Test public void linksPageNumberForTheMiddlePages() { int page = 10; long nrOfElements = 200; int pageSize = 10; PaginatedResult<Movie> pr = new PaginatedResult<Movie>(new ArrayList<Movie>(), nrOfElements, page, pageSize); assertEquals(10, pr.getPage()); assertEquals(20, pr.getPageCount()); assertEquals(4, pr.getFirstPageLink()); assertEquals(13, pr.getLastPageLink()); List<Integer> pageLinks = Arrays.asList(4, 5, 6, 7, 8, 9, 10, 11, 12, 13); assertEquals(pageLinks, pr.getPageLinks()); } @Test public void linksPageNumberForLast10Pages() { int page = 17; long nrOfElements = 200; int pageSize = 10; PaginatedResult<Movie> pr = new PaginatedResult<Movie>(new ArrayList<Movie>(), nrOfElements, page, pageSize); assertEquals(17, pr.getPage()); assertEquals(20, pr.getPageCount()); assertEquals(11, pr.getFirstPageLink()); assertEquals(20, pr.getLastPageLink()); List<Integer> pageLinks = Arrays.asList(11, 12, 13, 14, 15, 16, 17, 18, 19, 20); assertEquals(pageLinks, pr.getPageLinks()); } }