com.luna.common.web.bind.method.annotation.PageableMethodArgumentResolverTest.java Source code

Java tutorial

Introduction

Here is the source code for com.luna.common.web.bind.method.annotation.PageableMethodArgumentResolverTest.java

Source

/**
 * 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) {
        }

    }
}