package io.swagger; import com.fasterxml.jackson.core.JsonProcessingException; import io.swagger.jaxrs.Reader; import io.swagger.jaxrs.config.DefaultReaderConfig; import io.swagger.models.ModelImpl; import io.swagger.models.Operation; import io.swagger.models.Swagger; import io.swagger.models.parameters.BodyParameter; import io.swagger.models.parameters.HeaderParameter; import io.swagger.models.parameters.Parameter; import io.swagger.models.parameters.QueryParameter; import io.swagger.resources.ResourceWithBeanParams; import io.swagger.resources.ResourceWithComplexBodyInputType; import io.swagger.resources.ResourceWithExtensions; import org.testng.annotations.Test; import java.util.List; import java.util.Map; import static org.testng.Assert.assertEquals; import static org.testng.Assert.assertNotNull; import static org.testng.Assert.assertNull; public class ScannerTest { @Test(description = "scan a simple resource") public void scanSimpleResource() { final Swagger swagger = getSwagger(ResourceWithBeanParams.class); final List<Parameter> params = getParameters(swagger, "/{id}"); final Parameter skip = params.get(0); assertEquals(skip.getName(), "skip"); assertEquals(skip.getDescription(), "number of records to skip"); final Parameter limit = params.get(1); assertEquals(limit.getName(), "limit"); assertEquals(limit.getDescription(), "maximum number of records to return"); } @Test(description = "scan another resource") public void scanAnotherResource() { final Swagger swagger = getSwagger(ResourceWithComplexBodyInputType.class); final Operation post = swagger.getPaths().get("/myapi/testPostWithBody").getPost(); assertNotNull(post); assertNotNull(swagger.getDefinitions()); assertNotNull(swagger.getDefinitions().get("ClassWithString")); } @Test( description = "scan resource with extensions") public void scanResourceWithExtensions() throws JsonProcessingException { final Swagger swagger = getSwagger(ResourceWithExtensions.class); assertNotNull( swagger ); Map<String, Object> infoExtensions = swagger.getInfo().getVendorExtensions(); assertEquals("private", infoExtensions.get("x-accessLevel")); Map<String, Object> operationExtensions = swagger.getPath("/rest/test").getGet().getVendorExtensions(); assertEquals("/hello-world/v1/", operationExtensions.get("x-externalPath")); } @Test(description = "scan a bean param resource") public void scanBeanParamResource() { final Swagger swagger = getSwagger(ResourceWithBeanParams.class); final List<Parameter> params = getParameters(swagger, "/bean/{id}"); final HeaderParameter headerParam1 = (HeaderParameter) params.get(0); assertEquals(headerParam1.getDefaultValue(), 1); assertEquals(headerParam1.getName(), "test order annotation 1"); final HeaderParameter headerParam2 = (HeaderParameter) params.get(1); assertEquals(headerParam2.getDefaultValue(), 2); assertEquals(headerParam2.getName(), "test order annotation 2"); final QueryParameter priority1 = (QueryParameter) params.get(2); assertNull(priority1.getDefaultValue()); assertEquals(priority1.getName(), "test priority 1"); final QueryParameter priority2 = (QueryParameter) params.get(3); assertEquals(priority2.getDefaultValue(), 4); assertEquals(priority2.getName(), "test priority 2"); final ModelImpl bodyParam1 = (ModelImpl) ((BodyParameter) params.get(4)).getSchema(); assertEquals(bodyParam1.getDefaultValue(), "bodyParam"); } private List<Parameter> getParameters(Swagger swagger, String path) { return swagger.getPaths().get(path).getGet().getParameters(); } private Swagger getSwagger(Class<?> clas) { DefaultReaderConfig config = new DefaultReaderConfig(); config.setScanAllResources(true); return new Reader(new Swagger(), config).read(clas); } }