/* * Copyright (C) 2013-2017 NTT DATA Corporation * * 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 org.terasoluna.gfw.web.pagination; import static org.hamcrest.CoreMatchers.is; import static org.junit.Assert.assertFalse; import static org.junit.Assert.assertNull; import static org.junit.Assert.assertThat; import static org.junit.Assert.assertTrue; import static org.mockito.Mockito.mock; import static org.mockito.Mockito.when; import java.util.ArrayList; import java.util.Iterator; import java.util.List; import java.util.Map; import org.junit.Before; import org.junit.Test; import org.springframework.data.domain.Page; import org.springframework.data.domain.PageImpl; import org.springframework.data.domain.PageRequest; import org.springframework.data.domain.Sort; import org.springframework.data.domain.Sort.Direction; import org.springframework.data.domain.Sort.Order; import org.springframework.web.util.UriComponents; import org.terasoluna.gfw.web.pagination.PaginationInfo.BeginAndEnd; public class PaginationInfoTest { private Page<String> page; private final String pathTmpl = "terasoluna"; private final String queryTmpl = "value=test&page={page}&size={size}"; @Before public void setup() { // Note: // The page property of PageRequest is 0 start. // For example: // // 0(1 page) : 1-5 // 1(2 page) : 6-10 // 2(3 page) : 11-15 // 3(4 page) : 16-20 // 4(5 page) : 21-25 // 5(6 page) : 26-30 // 6(7 page) : 31-35 // ... PageRequest pageable = new PageRequest(5, 5); // set up the Page object for test. // // current page : 6 page (26-30) // total page : 7 page (total : 31) // (not first page and not last page) // 5 dummy record for 6 page(26-30) List<String> mockedList = new ArrayList<String>(); mockedList.add("terasoluna"); mockedList.add("terasoluna"); mockedList.add("terasoluna"); mockedList.add("terasoluna"); mockedList.add("terasoluna"); page = new PageImpl<String>(mockedList, pageable, 31L); } /** * Sort Null set */ @Test public void testCreateAttributeMap_SortNull() { int page = 1; int size = 1; // run Map<String, Object> attributesMap = PaginationInfo.createAttributeMap( page, size, null); // assert assertThat(Integer.valueOf(attributesMap.get("page").toString()), is(page)); assertThat(Integer.valueOf(attributesMap.get("size").toString()), is(size)); assertNull(attributesMap.get("sortOrderProperty")); assertNull(attributesMap.get("sortOrderDirection")); } /** * Sort Set */ @Test public void testCreateAttributeMap_SortSet() { int page = 1; int size = 1; Sort mockedSort = new Sort(Direction.DESC, "id"); // run Map<String, Object> attributesMap = PaginationInfo.createAttributeMap( page, size, mockedSort); // assert assertThat(Integer.valueOf(attributesMap.get("page").toString()), is(page)); assertThat(Integer.valueOf(attributesMap.get("size").toString()), is(size)); assertThat(attributesMap.get("sortOrderProperty").toString(), is("id")); assertThat(attributesMap.get("sortOrderDirection").toString(), is("DESC")); } @Test public void testCreateAttributeMapfail() { // set up int page = 1; int size = 1; Sort sort = mock(Sort.class); Iterator<Order> orders = mock(Iterator.class); when(sort.iterator()).thenReturn(orders); when(orders.hasNext()).thenReturn(false); // run Map<String, Object> attributesMap = PaginationInfo.createAttributeMap( page, size, sort); // assert assertThat(Integer.valueOf(attributesMap.get("page").toString()), is(page)); assertThat(Integer.valueOf(attributesMap.get("size").toString()), is(size)); assertNull(attributesMap.get("sortOrderProperty")); assertNull(attributesMap.get("sortOrderDirection")); } @Test public void testGetCurrent() { PaginationInfo info = new PaginationInfo(page, pathTmpl, queryTmpl, 10); // run int currentNum = info.getCurrent(); // assert assertThat(currentNum, is(5)); } @Test public void testGetPathTmpl() { PaginationInfo info = new PaginationInfo(page, pathTmpl, queryTmpl, 10); // run String path = info.getPathTmpl(); // assert assertThat(path, is(pathTmpl)); } @Test public void testGetQueryTmpl() { PaginationInfo info = new PaginationInfo(page, pathTmpl, queryTmpl, 10); // run String query = info.getQueryTmpl(); // assert assertThat(query, is(queryTmpl)); } @Test public void testGetMaxDisplayCount() { // parameter and expected int maxDisplayCount = 0; PaginationInfo info = new PaginationInfo(page, pathTmpl, queryTmpl, maxDisplayCount); // run int getMaxCountNum = info.getMaxDisplayCount(); // assert assertThat(getMaxCountNum, is(maxDisplayCount)); } @Test public void testGetPageUri() { PaginationInfo info = new PaginationInfo(page, pathTmpl, queryTmpl, 10); // run UriComponents pathQueryStr = info.getPageUri(); // expected String expectedUri = pathTmpl + "?" + queryTmpl; // assert assertThat(pathQueryStr.toUriString(), is(expectedUri)); } @Test public void testGetFirstUrl() { PaginationInfo info = new PaginationInfo(page, pathTmpl, queryTmpl, 0); // expected String expectedURL = "terasoluna?value=test&page=0&size=5"; // run String firstURL = info.getFirstUrl(); // assert assertThat(firstURL, is(expectedURL)); } @Test public void testGetLastUrl() { List<String> mockedList = new ArrayList<String>(); PageRequest pageable = new PageRequest(2, 2); page = new PageImpl<String>(mockedList, pageable, 4L); PaginationInfo info = new PaginationInfo(page, pathTmpl, queryTmpl, 0); // expected String expectedURL = "terasoluna?value=test&page=1&size=2"; // run String lastURL = info.getLastUrl(); // assert assertThat(lastURL, is(expectedURL)); } @Test public void testGetPreviousUrl() { PaginationInfo info = new PaginationInfo(page, pathTmpl, queryTmpl, 0); // expected String expectedURL = "terasoluna?value=test&page=4&size=5"; // run String previousURL = info.getPreviousUrl(); // assert assertThat(previousURL, is(expectedURL)); } @Test public void testGetNextUrl() { PaginationInfo info = new PaginationInfo(page, pathTmpl, queryTmpl, 0); // expected String expectedURL = "terasoluna?value=test&page=6&size=5"; // run String nextURL = info.getNextUrl(); // assert assertThat(nextURL, is(expectedURL)); } /** * current page not first */ @Test public void testIsFirstPage_NotFirst() { PaginationInfo info = new PaginationInfo(page, pathTmpl, queryTmpl, 0); // run boolean result = info.isFirstPage(); // assert assertFalse(result); } /** * current page first */ @Test public void testIsFirstPage_First() { // parameter List<String> mockedList = new ArrayList<String>(); page = new PageImpl<String>(mockedList); PaginationInfo info = new PaginationInfo(page, pathTmpl, queryTmpl, 0); // run boolean result = info.isFirstPage(); // assert assertTrue(result); } /** * current page not last */ @Test public void testIsLastPage_NotLast() { PaginationInfo info = new PaginationInfo(page, pathTmpl, queryTmpl, 0); // run boolean result = info.isLastPage(); // assert assertFalse(result); } /** * current page last */ @Test public void testIsLastPage_Last() { // parameter List<String> mockedList = new ArrayList<String>(); PageRequest pageable = new PageRequest(2, 2); page = new PageImpl<String>(mockedList, pageable, 6L); PaginationInfo info = new PaginationInfo(page, pathTmpl, queryTmpl, 0); // run boolean result = info.isLastPage(); // assert assertTrue(result); } /** * parameter number current page */ @Test public void testIsCurrent_Current() { PaginationInfo info = new PaginationInfo(page, pathTmpl, queryTmpl, 0); // run boolean result = info.isCurrent(5); // assert assertTrue(result); } /** * parameter number not current page */ @Test public void testIsCurrent_NotCurrent() { PaginationInfo info = new PaginationInfo(page, pathTmpl, queryTmpl, 0); // run boolean result = info.isCurrent(1); // assert assertFalse(result); } /** * total pages is smaller than max display count */ @Test public void testGetBeginAndEnd_totalPagesIsSmallerThanMaxDisplayCount() { // create parameter int maxDisplayCount = 10; PaginationInfo info = new PaginationInfo(page, pathTmpl, queryTmpl, maxDisplayCount); // run BeginAndEnd endNumBig = info.getBeginAndEnd(); // assert assertThat(endNumBig.getBegin(), is(0)); assertThat(endNumBig.getEnd(), is(6)); } /** * total pages is greater than max display count */ @Test public void testGetBeginAndEnd_totalPagesIsGreaterThanMaxDisplayCount() { // create parameter int maxDisplayCount = 3; PaginationInfo info = new PaginationInfo(page, pathTmpl, queryTmpl, maxDisplayCount); // run BeginAndEnd endNumBig = info.getBeginAndEnd(); // assert assertThat(endNumBig.getBegin(), is(4)); assertThat(endNumBig.getEnd(), is(6)); } /** * max display count is zero (page link that move to a specific page is not displayed) */ @Test public void testGetBeginAndEnd_maxDisplayCountIsZero() { // create parameter int maxDisplayCount = 0; PaginationInfo info = new PaginationInfo(page, pathTmpl, queryTmpl, maxDisplayCount); // run BeginAndEnd endNumBig = info.getBeginAndEnd(); // assert assertThat(endNumBig.getBegin(), is(5)); assertThat(endNumBig.getEnd(), is(4)); } @Test public void issue12_testGetPageUrl_criteriaQueryIsEmpty() { PaginationInfo info = new PaginationInfo(page, pathTmpl, queryTmpl, "", false, 10); // expected String expectedURL = "terasoluna?value=test&page=0&size=5"; // assert // That the criteria query is not append assertThat(info.getPageUrl(0), is(expectedURL)); } @Test public void issue12_testGetPageUrl_criteriaQueryIsSpecified() { PaginationInfo info = new PaginationInfo(page, pathTmpl, queryTmpl, "a=%2B", false, 10); // expected String expectedURL = "terasoluna?value=test&page=0&size=5&a=%2B"; // assert // That the criteria query is append assertThat(info.getPageUrl(0), is(expectedURL)); } @Test public void issue12_testGetPageUrl_criteriaQueryIsSpecified_startWithQuestionMark() { PaginationInfo info = new PaginationInfo(page, pathTmpl, queryTmpl, "?a=%2B", false, 10); // expected String expectedURL = "terasoluna?value=test&page=1&size=5&a=%2B"; // assert // That the question-mark(?) is remove assertThat(info.getPageUrl(1), is(expectedURL)); assertThat(info.getCriteriaQuery(), is("a=%2B")); } @Test public void issue12_testGetPageUrl_criteriaQueryIsSpecified_startWithAndMark() { PaginationInfo info = new PaginationInfo(page, pathTmpl, queryTmpl, "&a=%2B", false, 10); // expected String expectedURL = "terasoluna?value=test&page=2&size=5&a=%2B"; // assert // That the and-mark(&) is remove assertThat(info.getPageUrl(2), is(expectedURL)); assertThat(info.getCriteriaQuery(), is("a=%2B")); } @Test public void issue12_testGetPageUrl_criteriaQueryIsSpecified_queryTmplNotSpecified() { PaginationInfo info = new PaginationInfo(page, "/{page}/{size}", null, "a=<>&\"'a1", false, 10); // expected String expectedURL = "/3/5?a=<>&"'a1"; // assert // That the question-mark(?) is append assertThat(info.getPageUrl(3), is(expectedURL)); } @Test public void issue12_testGetPageUrl_disableHtmlEscapeOfCriteriaQueryIsTrue_queryTmplNotSpecified() { PaginationInfo info = new PaginationInfo(page, "/{page}/{size}", null, "a=<>&\"'a1", true, 10); // expected String expectedURL = "/3/5?a=<>&\"'a1"; // assert // That the question-mark(?) is append assertThat(info.getPageUrl(3), is(expectedURL)); } }