package io.swagger;
import com.splitresourcesTestImpl.SplitResourceImpl;
import com.subresourcesTest.RootResource;
import io.swagger.jaxrs.config.BeanConfig;
import io.swagger.models.Scheme;
import io.swagger.models.Swagger;
import org.testng.annotations.Test;
import java.util.Arrays;
import java.util.EnumSet;
import java.util.HashSet;
import java.util.Set;
import static org.testng.Assert.assertEquals;
import static org.testng.Assert.assertNotNull;
import static org.testng.Assert.assertTrue;
public class BeanConfigTest {
private final Set<?> expectedKeys = new HashSet<String>(Arrays.asList("/packageA", "/packageB"));
private final Set<Scheme> expectedSchemas = EnumSet.of(Scheme.HTTP, Scheme.HTTPS);
private BeanConfig createBeanConfig(String rp) {
BeanConfig bc = new BeanConfig();
bc.setResourcePackage(rp);
bc.setSchemes(new String[]{"http", "https"});
bc.setHost("petstore.swagger.io");
bc.setBasePath("/api");
bc.setTitle("Petstore Sample API");
bc.setDescription("A sample API that uses a petstore as an example to demonstrate features in the swagger-2.0 specification");
bc.setTermsOfServiceUrl("http://swagger.io/terms/");
bc.setContact("Swagger API Team");
bc.setLicense("MIT");
bc.setLicenseUrl("http://github.com/gruntjs/grunt/blob/master/LICENSE-MIT");
bc.setScan(true);
return bc;
}
@Test(description = "scan a simple resource")
public void shouldScanASimpleResource() {
Swagger swagger = createBeanConfig("com.my.project.resources,org.my.project.resources").getSwagger();
assertNotNull(swagger);
assertEquals(swagger.getPaths().keySet(), expectedKeys);
assertEquals(swagger.getSchemes(), expectedSchemas);
}
@Test(description = "deep scan packages per #1011")
public void shouldDeepScanPakagesPer1011() {
Swagger swagger = createBeanConfig("com.my,org.my").getSwagger();
assertNotNull(swagger);
assertEquals(swagger.getPaths().keySet(), expectedKeys);
assertEquals(swagger.getSchemes(), expectedSchemas);
}
@Test
public void testBeanConfigOnlyScansResourcesAnnoatedWithPaths() throws Exception {
BeanConfig bc = new BeanConfig();
bc.setResourcePackage("com.subresourcesTest");
Set<Class<?>> classes = bc.classes();
assertEquals(classes.size(), 1, "BeanConfig should only pick up the root resource because it has a @Path annotation at the class level");
assertTrue(classes.contains(RootResource.class));
}
@Test
public void testBeanConfigScansSplitResourcesAnnoatedWithPathAndApi() throws Exception {
BeanConfig bc = new BeanConfig();
bc.setResourcePackage("com.splitresourcesTestImpl");
Set<Class<?>> classes = bc.classes();
assertEquals(classes.size(), 1, "BeanConfig should pick up implementations annotated with @Api that have a superinterface with @Path");
assertTrue(classes.contains(SplitResourceImpl.class));
}
}