package org.jsondoc.springmvc.scanner;
import java.util.Iterator;
import org.jsondoc.core.annotation.ApiPathParam;
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.PathVariable;
import org.springframework.web.bind.annotation.RequestMapping;
import com.google.common.collect.Sets;
public class SpringPathVariableBuilderTest {
private JSONDocScanner jsondocScanner = new Spring3JSONDocScanner();
@Controller
@RequestMapping
public class SpringController {
@RequestMapping(value = "/param-one/{id}/{string}")
public void paramOne(@PathVariable Long id, @PathVariable("name") String name) {
}
@RequestMapping(value = "/param-one/{id}/{string}/{test}")
public void paramTwo(@ApiPathParam(name = "id", description = "my description") @PathVariable Long id, @PathVariable("name") String name, @PathVariable @ApiPathParam Long test) {
}
}
@Controller
@RequestMapping
public class SpringController2 {
@RequestMapping(value = "/param-one/{id}/{string}")
public void paramOne(@ApiPathParam(description = "description for id") @PathVariable Long id, @PathVariable("name") String name) {
}
}
@Test
public void testPathVariable() {
ApiDoc apiDoc = jsondocScanner.getApiDocs(Sets.<Class<?>> newHashSet(SpringController.class), MethodDisplay.URI).iterator().next();
Assert.assertEquals("SpringController", apiDoc.getName());
Assert.assertEquals(2, apiDoc.getMethods().size());
for (ApiMethodDoc apiMethodDoc : apiDoc.getMethods()) {
if (apiMethodDoc.getPath().contains("/param-one/{id}/{string}")) {
Assert.assertEquals(2, apiMethodDoc.getPathparameters().size());
Iterator<ApiParamDoc> iterator = apiMethodDoc.getPathparameters().iterator();
ApiParamDoc id = iterator.next();
Assert.assertEquals("", id.getName());
Assert.assertEquals("long", id.getJsondocType().getOneLineText());
ApiParamDoc name = iterator.next();
Assert.assertEquals("name", name.getName());
Assert.assertEquals("string", name.getJsondocType().getOneLineText());
}
if (apiMethodDoc.getPath().contains("/param-one/{id}/{string}/{test}")) {
Assert.assertEquals(3, apiMethodDoc.getPathparameters().size());
Iterator<ApiParamDoc> iterator = apiMethodDoc.getPathparameters().iterator();
ApiParamDoc id = iterator.next();
Assert.assertEquals("id", id.getName());
Assert.assertEquals("long", id.getJsondocType().getOneLineText());
ApiParamDoc name = iterator.next();
Assert.assertEquals("name", name.getName());
Assert.assertEquals("string", name.getJsondocType().getOneLineText());
ApiParamDoc test = iterator.next();
Assert.assertEquals("", test.getName());
Assert.assertEquals("long", test.getJsondocType().getOneLineText());
}
}
}
@Test
public void testPathVariableWithJSONDoc() {
ApiDoc apiDoc = jsondocScanner.getApiDocs(Sets.<Class<?>> newHashSet(SpringController2.class), MethodDisplay.URI).iterator().next();
Assert.assertEquals("SpringController2", apiDoc.getName());
Assert.assertEquals(1, apiDoc.getMethods().size());
for (ApiMethodDoc apiMethodDoc : apiDoc.getMethods()) {
if (apiMethodDoc.getPath().contains("/param-one/{id}/{string}")) {
Assert.assertEquals(2, apiMethodDoc.getPathparameters().size());
Iterator<ApiParamDoc> iterator = apiMethodDoc.getPathparameters().iterator();
ApiParamDoc id = iterator.next();
Assert.assertEquals("", id.getName());
Assert.assertEquals("long", id.getJsondocType().getOneLineText());
Assert.assertEquals("description for id", id.getDescription());
ApiParamDoc name = iterator.next();
Assert.assertEquals("name", name.getName());
Assert.assertEquals("string", name.getJsondocType().getOneLineText());
}
}
}
}