package org.jsondoc.springmvc.scanner;
import java.util.Iterator;
import org.jsondoc.core.annotation.ApiQueryParam;
import org.jsondoc.core.pojo.ApiDoc;
import org.jsondoc.core.pojo.ApiMethodDoc;
import org.jsondoc.core.pojo.ApiParamDoc;
import org.jsondoc.core.pojo.JSONDoc.MethodDisplay;
import org.jsondoc.core.scanner.JSONDocScanner;
import org.junit.Assert;
import org.junit.Test;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.ModelAttribute;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestParam;
import com.google.common.collect.Sets;
public class SpringQueryParamBuilderTest {
private JSONDocScanner jsondocScanner = new Spring3JSONDocScanner();
@Controller
@RequestMapping
public class SpringController {
@RequestMapping(value = "/param-one", params = "param")
public void paramOne() {
}
@RequestMapping(value = "/param-two", params = { "param", "param2" })
public void paramTwo() {
}
@RequestMapping(value = "/param-three", params = { "param=value", "param2=value2" })
public void paramThree() {
}
}
@Controller
@RequestMapping(params = { "param", "param2=value2" })
public class SpringController2 {
@RequestMapping(value = "/param-one")
public void paramOne() {
}
@RequestMapping(value = "/param-two", params = "param3")
public void paramTwo() {
}
}
@Controller
@RequestMapping(params = "param")
public class SpringController3 {
@RequestMapping(value = "/param-one")
public void paramOne(@RequestParam(value = "name") String name) {
}
@RequestMapping(value = "/param-two")
public void paramTwo(@RequestParam(value = "name", defaultValue = "test", required = false) String name) {
}
@RequestMapping(value = "/param-three")
public void paramThree(@RequestParam String name) {
}
}
@Controller
@RequestMapping
public class SpringController4 {
@RequestMapping(value = "/")
public void paramOne(@RequestParam @ApiQueryParam(name = "name") String name) {
}
@RequestMapping(value = "/two")
public void paramOne(@RequestParam @ApiQueryParam(name = "name") String name, @RequestParam @ApiQueryParam(name = "test") String test) {
}
}
@Controller
@RequestMapping
public class SpringController5 {
@RequestMapping(value = "/")
public void paramOne(@ModelAttribute(value = "modelAttributePojo") ModelAttributePojo modelAttributePojo) {
}
public class ModelAttributePojo {
}
}
@SuppressWarnings("unused")
@Test
public void testQueryParam() {
ApiDoc apiDoc = jsondocScanner.getApiDocs(Sets.<Class<?>> newHashSet(SpringController.class), MethodDisplay.URI).iterator().next();
Assert.assertEquals("SpringController", apiDoc.getName());
Assert.assertEquals(3, apiDoc.getMethods().size());
for (ApiMethodDoc apiMethodDoc : apiDoc.getMethods()) {
if (apiMethodDoc.getPath().contains("/param-one")) {
Assert.assertEquals(1, apiMethodDoc.getQueryparameters().size());
}
if (apiMethodDoc.getPath().contains("/param-two")) {
Assert.assertEquals(2, apiMethodDoc.getQueryparameters().size());
}
if (apiMethodDoc.getPath().contains("/param-three")) {
Assert.assertEquals(2, apiMethodDoc.getQueryparameters().size());
Iterator<ApiParamDoc> iterator = apiMethodDoc.getQueryparameters().iterator();
ApiParamDoc param = iterator.next();
Assert.assertEquals("param", param.getName());
Assert.assertEquals("value", param.getAllowedvalues()[0]);
ApiParamDoc param2 = iterator.next();
Assert.assertEquals("param2", param2.getName());
Assert.assertEquals("value2", param2.getAllowedvalues()[0]);
}
}
apiDoc = jsondocScanner.getApiDocs(Sets.<Class<?>> newHashSet(SpringController2.class), MethodDisplay.URI).iterator().next();
Assert.assertEquals("SpringController2", apiDoc.getName());
Assert.assertEquals(2, apiDoc.getMethods().size());
for (ApiMethodDoc apiMethodDoc : apiDoc.getMethods()) {
if (apiMethodDoc.getPath().contains("/param-one")) {
Assert.assertEquals(2, apiMethodDoc.getQueryparameters().size());
}
if (apiMethodDoc.getPath().contains("/param-two")) {
Assert.assertEquals(3, apiMethodDoc.getQueryparameters().size());
}
}
apiDoc = jsondocScanner.getApiDocs(Sets.<Class<?>> newHashSet(SpringController3.class), MethodDisplay.URI).iterator().next();
Assert.assertEquals("SpringController3", apiDoc.getName());
Assert.assertEquals(3, apiDoc.getMethods().size());
for (ApiMethodDoc apiMethodDoc : apiDoc.getMethods()) {
if (apiMethodDoc.getPath().contains("/param-one")) {
Assert.assertEquals(2, apiMethodDoc.getQueryparameters().size());
Iterator<ApiParamDoc> iterator = apiMethodDoc.getQueryparameters().iterator();
ApiParamDoc param = iterator.next();
ApiParamDoc queryParam = iterator.next();
Assert.assertEquals("name", queryParam.getName());
Assert.assertEquals("true", queryParam.getRequired());
Assert.assertEquals("string", queryParam.getJsondocType().getOneLineText());
Assert.assertEquals("", queryParam.getDefaultvalue());
}
if (apiMethodDoc.getPath().contains("/param-two")) {
Assert.assertEquals(2, apiMethodDoc.getQueryparameters().size());
Iterator<ApiParamDoc> iterator = apiMethodDoc.getQueryparameters().iterator();
ApiParamDoc param = iterator.next();
ApiParamDoc queryParam = iterator.next();
Assert.assertEquals("name", queryParam.getName());
Assert.assertEquals("false", queryParam.getRequired());
Assert.assertEquals("string", queryParam.getJsondocType().getOneLineText());
Assert.assertEquals("test", queryParam.getDefaultvalue());
}
if (apiMethodDoc.getPath().contains("/param-three")) {
Assert.assertEquals(2, apiMethodDoc.getQueryparameters().size());
Iterator<ApiParamDoc> iterator = apiMethodDoc.getQueryparameters().iterator();
ApiParamDoc param = iterator.next();
ApiParamDoc queryParam = iterator.next();
Assert.assertEquals("", queryParam.getName());
Assert.assertEquals("true", queryParam.getRequired());
Assert.assertEquals("string", queryParam.getJsondocType().getOneLineText());
Assert.assertEquals("", queryParam.getDefaultvalue());
}
}
apiDoc = jsondocScanner.getApiDocs(Sets.<Class<?>> newHashSet(SpringController4.class), MethodDisplay.URI).iterator().next();
Assert.assertEquals("SpringController4", apiDoc.getName());
Assert.assertEquals(2, apiDoc.getMethods().size());
for (ApiMethodDoc apiMethodDoc : apiDoc.getMethods()) {
if (apiMethodDoc.getPath().contains("/")) {
Assert.assertEquals(1, apiMethodDoc.getQueryparameters().size());
ApiParamDoc param = apiMethodDoc.getQueryparameters().iterator().next();
Assert.assertEquals("name", param.getName());
}
if (apiMethodDoc.getPath().contains("/two")) {
Assert.assertEquals(2, apiMethodDoc.getQueryparameters().size());
}
}
apiDoc = jsondocScanner.getApiDocs(Sets.<Class<?>> newHashSet(SpringController5.class), MethodDisplay.URI).iterator().next();
Assert.assertEquals("SpringController5", apiDoc.getName());
Assert.assertEquals(1, apiDoc.getMethods().size());
for (ApiMethodDoc apiMethodDoc : apiDoc.getMethods()) {
if (apiMethodDoc.getPath().contains("/")) {
Assert.assertEquals(1, apiMethodDoc.getQueryparameters().size());
ApiParamDoc param = apiMethodDoc.getQueryparameters().iterator().next();
Assert.assertEquals("modelAttributePojo", param.getName());
Assert.assertEquals("modelattributepojo", param.getJsondocType().getOneLineText());
}
}
}
}