package io.swagger; import io.swagger.jaxrs.Reader; import io.swagger.models.Operation; import io.swagger.models.Swagger; import io.swagger.models.parameters.BodyParameter; import io.swagger.models.parameters.Parameter; import io.swagger.resources.Resource942; import io.swagger.resources.ResourceWithSubResources; import io.swagger.resources.SubResourceHead; import io.swagger.resources.TestResource; import org.testng.annotations.Test; import java.util.Arrays; import static org.testng.Assert.assertEquals; import static org.testng.Assert.assertTrue; public class SubResourceReaderTest { @Test(description = "scan a resource with subresources") public void readResourceWithSubresources() { final Swagger swagger = getSwagger(ResourceWithSubResources.class); assertEquals(getOperationId(swagger, "/employees/{id}"), "getAllEmployees"); assertEquals(getOperationId(swagger, "/employees/{id}/{id}"), "getSubresourceOperation"); assertEquals(getOperationId(swagger, "/employees/noPath"), "getGreeting"); } @Test(description = "scan another resource with subresources") public void readAnotherResourceWithSubresources() { final Swagger swagger = getSwagger(TestResource.class); final Operation get = getGet(swagger, "/test/more/otherStatus"); assertEquals(get.getOperationId(), "otherStatus"); final Parameter qp = get.getParameters().get(0); assertEquals(qp.getIn(), "query"); assertEquals(qp.getName(), "qp"); assertTrue(get.getProduces().containsAll(Arrays.asList("application/json", "application/xml"))); assertEquals(swagger.getPaths().keySet().size(), 2); } @Test(description = "scan resource with class-based sub-resources") public void readResourceWithClassBasedSubresources() { final Swagger swagger = getSwagger(SubResourceHead.class); assertEquals(swagger.getPaths().size(), 3); assertEquals(getOperationId(swagger, "/head/noPath"), "getGreeting"); assertEquals(getOperationId(swagger, "/head/tail/hello"), "getGreeting"); final Operation echo = getGet(swagger, "/head/tail/{string}"); assertEquals(echo.getOperationId(), "getEcho"); assertEquals(echo.getParameters().size(), 1); } @Test(description = "find a body param") public void findBodyParam() { Swagger swagger = getSwagger(Resource942.class); assertTrue(swagger.getPath("/test").getPost().getParameters().get(0) instanceof BodyParameter); } private Swagger getSwagger(Class<?> cls) { return new Reader(new Swagger()).read(cls); } private Operation getGet(Swagger swagger, String path) { return swagger.getPaths().get(path).getGet(); } private String getOperationId(Swagger swagger, String path) { return getGet(swagger, path).getOperationId(); } }