package io.swagger;
import io.swagger.jaxrs.Reader;
import io.swagger.models.Info;
import io.swagger.models.Scheme;
import io.swagger.models.Swagger;
import io.swagger.resources.ResourceWithConfigAndExtensions;
import io.swagger.util.Json;
import org.testng.annotations.Test;
import java.util.HashSet;
import java.util.Map;
import java.util.Set;
import static org.testng.Assert.assertEquals;
import static org.testng.Assert.assertNotEquals;
import static org.testng.Assert.assertNotNull;
import static org.testng.Assert.assertTrue;
public class ConfigAndExtensionScannerTest {
@Test(description = "scan a resource with extensions")
public void scanResourceWithExtensions() {
Set<Class<?>> classes = new HashSet<Class<?>>();
classes.add(ResourceWithConfigAndExtensions.class);
Swagger swagger = new Reader(new Swagger()).read(classes);
assertEquals(swagger.getPaths().size(), 1);
Info info = swagger.getInfo();
assertNotNull(info);
assertEquals(info.getDescription(), "Custom description");
assertEquals(info.getTermsOfService(), "do-what-you-want");
assertEquals(info.getTitle(), "TheAwesomeApi");
assertEquals(info.getVersion(), "V1.2.3");
assertEquals(info.getContact().getName(), "Sponge-Bob");
assertEquals(info.getContact().getEmail(), "sponge-bob@swagger.io");
assertEquals(info.getContact().getUrl(), "http://swagger.io");
assertEquals(info.getLicense().getName(), "Apache 2.0");
assertEquals(info.getLicense().getUrl(), "http://www.apache.org");
assertEquals(swagger.getConsumes().size(), 2);
assertTrue(swagger.getConsumes().contains("application/json"));
assertTrue(swagger.getConsumes().contains("application/xml"));
assertEquals(swagger.getProduces().size(), 2);
swagger.getProduces().contains("application/json");
swagger.getProduces().contains("application/xml");
assertEquals(swagger.getExternalDocs().getDescription(), "test");
assertEquals(swagger.getExternalDocs().getUrl(), "http://swagger.io");
assertEquals(swagger.getSchemes().size(), 2);
assertTrue(swagger.getSchemes().contains(Scheme.HTTP));
assertTrue(swagger.getSchemes().contains(Scheme.HTTPS));
assertEquals(swagger.getTags().size(), 7);
assertEquals(swagger.getTags().get(0).getName(), "Tag-added-before-read");
assertEquals(swagger.getTags().get(1).getName(), "mytag");
assertEquals(swagger.getTags().get(1).getDescription(), "my tag");
assertEquals(swagger.getTags().get(2).getName(), "anothertag");
assertEquals(swagger.getTags().get(2).getDescription(), "another tag");
assertEquals(swagger.getTags().get(2).getExternalDocs().getDescription(), "test");
assertEquals(swagger.getTags().get(2).getExternalDocs().getUrl(), "http://swagger.io");
assertEquals(swagger.getTags().get(3).getName(), "tagwithextensions");
assertEquals(swagger.getTags().get(3).getDescription(), "my tag");
Map<String, Object> extensions = swagger.getTags().get(3).getVendorExtensions();
assertEquals(extensions.size(), 1);
assertEquals(extensions.get("x-test"), "value");
assertEquals(swagger.getTags().get(4).getName(), "externalinfo");
assertEquals(swagger.getTags().get(5).getName(), "testingtag");
assertEquals(swagger.getTags().get(6).getName(), "Tag-added-after-read");
extensions = swagger.getInfo().getVendorExtensions();
assertEquals(extensions.size(), 3);
assertEquals(extensions.get("x-test1"), "value1");
assertEquals(extensions.get("x-test2"), "value2");
extensions = (Map<String, Object>) extensions.get("x-test");
assertEquals(extensions.get("test1"), "value1");
assertEquals(extensions.get("test2"), "value2");
extensions = swagger.getPath("/who/cares").getOperations().get(0).getVendorExtensions();
assertEquals(extensions.get("x-test"), "value");
String json = Json.pretty(swagger);
assertNotEquals(json.indexOf("\"x-test\" : {"), -1);
assertNotEquals(json.indexOf("\"x-test1\" : \"value1\""), -1);
assertNotEquals(json.indexOf("\"x-test2\" : \"value2\""), -1);
}
}