package org.jsondoc.springmvc.scanner;
import org.jsondoc.core.pojo.ApiDoc;
import org.jsondoc.core.pojo.ApiMethodDoc;
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.RequestMapping;
import com.google.common.base.Predicate;
import com.google.common.collect.FluentIterable;
import com.google.common.collect.Sets;
public class SpringPathBuilderTest {
private JSONDocScanner jsondocScanner = new Spring3JSONDocScanner();
@Controller
@RequestMapping
public class SpringController {
@RequestMapping(value = "/path")
public void slashPath() {
}
@RequestMapping(value = "/")
public void path() {
}
@RequestMapping()
public void none() {
}
}
@Controller
@RequestMapping
public class SpringController2 {
@RequestMapping
public void none() {
}
@RequestMapping(value = "/test")
public void test() {
}
}
@Controller
@RequestMapping(value = { "/path1", "/path2" })
public class SpringController3 {
@RequestMapping(value = { "/path3", "/path4" })
public void none() {
}
}
@Controller
@RequestMapping(value = "/path")
public class SpringController4 {
@RequestMapping
public void none() {
}
}
@Controller
@RequestMapping(path = {"/path", "/path2"}, value = "/val1")
public class SpringController5 {
@RequestMapping
public void none() {
}
}
@Test
public void testPath() {
ApiDoc apiDoc = jsondocScanner.getApiDocs(Sets.<Class<?>> newHashSet(SpringController.class), MethodDisplay.URI).iterator().next();
Assert.assertEquals("SpringController", apiDoc.getName());
boolean slashPath = FluentIterable.from(apiDoc.getMethods()).anyMatch(new Predicate<ApiMethodDoc>() {
@Override
public boolean apply(ApiMethodDoc input) {
return input.getPath().contains("/path");
}
});
Assert.assertTrue(slashPath);
boolean slash = FluentIterable.from(apiDoc.getMethods()).anyMatch(new Predicate<ApiMethodDoc>() {
@Override
public boolean apply(ApiMethodDoc input) {
return input.getPath().contains("/");
}
});
Assert.assertTrue(slash);
}
@Test
public void testPath2() {
ApiDoc apiDoc = jsondocScanner.getApiDocs(Sets.<Class<?>> newHashSet(SpringController2.class), MethodDisplay.URI).iterator().next();
Assert.assertEquals("SpringController2", apiDoc.getName());
boolean none = FluentIterable.from(apiDoc.getMethods()).anyMatch(new Predicate<ApiMethodDoc>() {
@Override
public boolean apply(ApiMethodDoc input) {
System.out.println(input.getPath());
return input.getPath().contains("/");
}
});
Assert.assertTrue(none);
boolean test = FluentIterable.from(apiDoc.getMethods()).anyMatch(new Predicate<ApiMethodDoc>() {
@Override
public boolean apply(ApiMethodDoc input) {
return input.getPath().contains("/test");
}
});
Assert.assertTrue(test);
}
@Test
public void testPath3() {
ApiDoc apiDoc = jsondocScanner.getApiDocs(Sets.<Class<?>> newHashSet(SpringController3.class), MethodDisplay.URI).iterator().next();
Assert.assertEquals("SpringController3", apiDoc.getName());
boolean allRight = FluentIterable.from(apiDoc.getMethods()).anyMatch(new Predicate<ApiMethodDoc>() {
@Override
public boolean apply(ApiMethodDoc input) {
boolean allRight =
input.getPath().contains("/path1/path3") &&
input.getPath().contains("/path1/path4") &&
input.getPath().contains("/path2/path3") &&
input.getPath().contains("/path2/path4");
return allRight;
}
});
Assert.assertTrue(allRight);
}
@Test
public void testPath4() {
ApiDoc apiDoc = jsondocScanner.getApiDocs(Sets.<Class<?>> newHashSet(SpringController4.class), MethodDisplay.URI).iterator().next();
Assert.assertEquals("SpringController4", apiDoc.getName());
boolean allRight = FluentIterable.from(apiDoc.getMethods()).anyMatch(new Predicate<ApiMethodDoc>() {
@Override
public boolean apply(ApiMethodDoc input) {
boolean allRight =
input.getPath().contains("/path");
return allRight;
}
});
Assert.assertTrue(allRight);
}
@Test
public void testPath5() {
ApiDoc apiDoc = jsondocScanner.getApiDocs(Sets.<Class<?>> newHashSet(SpringController5.class), MethodDisplay.URI).iterator().next();
Assert.assertEquals("SpringController5", apiDoc.getName());
boolean allRight = FluentIterable.from(apiDoc.getMethods()).anyMatch(new Predicate<ApiMethodDoc>() {
@Override
public boolean apply(ApiMethodDoc input) {
boolean allRight = input.getPath().contains("/path") && input.getPath().contains("/path2") && input.getPath().contains("/val1");
return allRight;
}
});
Assert.assertTrue(allRight);
}
@Test
public void testPathWithMethodDisplayMethod() {
ApiDoc apiDoc = jsondocScanner.getApiDocs(Sets.<Class<?>> newHashSet(SpringController5.class), MethodDisplay.METHOD).iterator().next();
boolean allRight = FluentIterable.from(apiDoc.getMethods()).anyMatch(new Predicate<ApiMethodDoc>() {
@Override
public boolean apply(ApiMethodDoc input) {
boolean allRight = input.getPath().contains("/path") && input.getPath().contains("/path2") && input.getPath().contains("/val1") && input.getDisplayedMethodString().contains("none");
return allRight;
}
});
Assert.assertTrue(allRight);
}
}