Java tutorial
/** * Copyright (c) 2005-2012 https://github.com/zhangkaitao * * Licensed under the Apache License, Version 2.0 (the "License"); */ package com.luna.common.web.bind.method.annotation; import com.luna.common.web.bind.annotation.PageableDefaults; import org.junit.Before; import org.junit.Test; import org.springframework.beans.factory.annotation.Qualifier; import org.springframework.core.MethodParameter; import org.springframework.data.domain.Pageable; import org.springframework.data.domain.Sort; import org.springframework.mock.web.MockHttpServletRequest; import org.springframework.web.context.request.NativeWebRequest; import org.springframework.web.context.request.ServletWebRequest; import java.lang.reflect.Method; import static org.junit.Assert.assertEquals; /** * <p>User: Zhang Kaitao * <p>Date: 13-1-23 ?3:42 * <p>Version: 1.0 */ public class PageableMethodArgumentResolverTest { Method pageable, pageableAndSort, methodDefaultPageable, parameterDefaultPageable, customNamePrefixPageableAndSort; MockHttpServletRequest request; @Before public void setUp() throws NoSuchMethodException { pageable = Controller.class.getDeclaredMethod("pageable", new Class[] { Pageable.class }); pageableAndSort = Controller.class.getDeclaredMethod("pageable", new Class[] { Pageable.class }); methodDefaultPageable = Controller.class.getDeclaredMethod("methodDefaultPageable", new Class[] { Pageable.class }); parameterDefaultPageable = Controller.class.getDeclaredMethod("parameterDefaultPageable", new Class[] { Pageable.class }); customNamePrefixPageableAndSort = Controller.class.getDeclaredMethod("customNamePrefixPageableAndSort", new Class[] { Pageable.class, Pageable.class }); request = new MockHttpServletRequest(); } @Test public void testPageable() throws Exception { int pn = 1; int pageSize = 10; request.setParameter("page.pn", String.valueOf(pn)); request.setParameter("page.size", String.valueOf(pageSize)); MethodParameter parameter = new MethodParameter(pageable, 0); NativeWebRequest webRequest = new ServletWebRequest(request); Pageable pageable = (Pageable) new PageableMethodArgumentResolver().resolveArgument(parameter, null, webRequest, null); //-10 assertEquals(pn - 1, pageable.getPageNumber()); assertEquals(pageSize, pageable.getPageSize()); assertEquals(null, pageable.getSort()); } @Test public void testPageableAndUnOrderedSort() throws Exception { int pn = 1; int pageSize = 10; request.setParameter("page.pn", String.valueOf(pn)); request.setParameter("page.size", String.valueOf(pageSize)); request.setParameter("sort.id", "desc"); request.setParameter("sort.baseInfo.realname", "asc"); MethodParameter parameter = new MethodParameter(pageableAndSort, 0); NativeWebRequest webRequest = new ServletWebRequest(request); Pageable pageable = (Pageable) new PageableMethodArgumentResolver().resolveArgument(parameter, null, webRequest, null); //-10 assertEquals(pn - 1, pageable.getPageNumber()); assertEquals(pageSize, pageable.getPageSize()); Sort expectedSort = new Sort(Sort.Direction.ASC, "baseInfo.realname") .and(new Sort(Sort.Direction.DESC, "id")); assertEquals(expectedSort, pageable.getSort()); } @Test public void testPageableAndOrderedSort() throws Exception { int pn = 1; int pageSize = 10; request.setParameter("page.pn", String.valueOf(pn)); request.setParameter("page.size", String.valueOf(pageSize)); request.setParameter("sort1.baseInfo.realname", "asc"); request.setParameter("sort2.id", "desc"); MethodParameter parameter = new MethodParameter(pageableAndSort, 0); NativeWebRequest webRequest = new ServletWebRequest(request); Pageable pageable = (Pageable) new PageableMethodArgumentResolver().resolveArgument(parameter, null, webRequest, null); //-10 assertEquals(pn - 1, pageable.getPageNumber()); assertEquals(pageSize, pageable.getPageSize()); Sort expectedSort = new Sort(Sort.Direction.ASC, "baseInfo.realname") .and(new Sort(Sort.Direction.DESC, "id")); assertEquals(expectedSort, pageable.getSort()); } @Test public void testMethodDefaultPageable() throws Exception { MethodParameter parameter = new MethodParameter(methodDefaultPageable, 0); NativeWebRequest webRequest = new ServletWebRequest(request); Pageable pageable = (Pageable) new PageableMethodArgumentResolver().resolveArgument(parameter, null, webRequest, null); assertEquals(Controller.DEFAULT_PAGENUMBER, pageable.getPageNumber()); assertEquals(Controller.DEFAULT_PAGESIZE, pageable.getPageSize()); Sort expectedSort = new Sort(Sort.Direction.DESC, "id").and(new Sort(Sort.Direction.ASC, "name")); assertEquals(expectedSort, pageable.getSort()); } @Test public void testParameterDefaultPageable() throws Exception { MethodParameter parameter = new MethodParameter(parameterDefaultPageable, 0); NativeWebRequest webRequest = new ServletWebRequest(request); Pageable pageable = (Pageable) new PageableMethodArgumentResolver().resolveArgument(parameter, null, webRequest, null); assertEquals(Controller.DEFAULT_PAGENUMBER, pageable.getPageNumber()); assertEquals(Controller.DEFAULT_PAGESIZE, pageable.getPageSize()); Sort expectedSort = new Sort(Sort.Direction.DESC, "id").and(new Sort(Sort.Direction.ASC, "name")); assertEquals(expectedSort, pageable.getSort()); } @Test public void testParameterDefaultPageableAndOverrideSort() throws Exception { request.setParameter("sort2.id", "desc"); request.setParameter("sort1.baseInfo.realname", "asc"); MethodParameter parameter = new MethodParameter(parameterDefaultPageable, 0); NativeWebRequest webRequest = new ServletWebRequest(request); Pageable pageable = (Pageable) new PageableMethodArgumentResolver().resolveArgument(parameter, null, webRequest, null); assertEquals(Controller.DEFAULT_PAGENUMBER, pageable.getPageNumber()); assertEquals(Controller.DEFAULT_PAGESIZE, pageable.getPageSize()); Sort expectedSort = new Sort(Sort.Direction.ASC, "baseInfo.realname") .and(new Sort(Sort.Direction.DESC, "id")); assertEquals(expectedSort, pageable.getSort()); } @Test public void testCustomNamePrefixPageableAndSort() throws Exception { int pn = 1; int pageSize = 10; request.setParameter("foo_page.pn", String.valueOf(pn)); request.setParameter("foo_page.size", String.valueOf(pageSize)); request.setParameter("foo_sort2.id", "desc"); request.setParameter("foo_sort1.baseInfo.realname", "asc"); MethodParameter parameter = new MethodParameter(customNamePrefixPageableAndSort, 0); NativeWebRequest webRequest = new ServletWebRequest(request); Pageable pageable = (Pageable) new PageableMethodArgumentResolver().resolveArgument(parameter, null, webRequest, null); //-10 assertEquals(pn - 1, pageable.getPageNumber()); assertEquals(pageSize, pageable.getPageSize()); Sort expectedSort = new Sort(Sort.Direction.ASC, "baseInfo.realname") .and(new Sort(Sort.Direction.DESC, "id")); assertEquals(expectedSort, pageable.getSort()); } @Test(expected = IllegalStateException.class) public void testErrorSortProperty() throws Exception { int pn = 1; int pageSize = 10; request.setParameter("foo_page.pn", String.valueOf(pn)); request.setParameter("foo_page.size", String.valueOf(pageSize)); request.setParameter("foo_sort2.id$", "desc"); request.setParameter("foo_sort1.baseInfo.realname", "asc"); MethodParameter parameter = new MethodParameter(customNamePrefixPageableAndSort, 0); NativeWebRequest webRequest = new ServletWebRequest(request); Pageable pageable = (Pageable) new PageableMethodArgumentResolver().resolveArgument(parameter, null, webRequest, null); } static class Controller { static final int DEFAULT_PAGESIZE = 198; static final int DEFAULT_PAGENUMBER = 42; public void pageable(Pageable pageable) { } public void pageableAndSort(Pageable pageable) { } @PageableDefaults(value = DEFAULT_PAGESIZE, pageNumber = DEFAULT_PAGENUMBER, sort = { "id=desc", "name=asc" }) public void methodDefaultPageable(Pageable pageable) { } public void parameterDefaultPageable( @PageableDefaults(value = DEFAULT_PAGESIZE, pageNumber = DEFAULT_PAGENUMBER, sort = { "id=desc", "name=asc" }) Pageable pageable) { } public void customNamePrefixPageableAndSort(@Qualifier("foo") Pageable foo, @Qualifier("test") Pageable test) { } } }