diff --git a/modules/swagger-compat-spec-parser/src/main/java/io/swagger/parser/SwaggerCompatConverter.java b/modules/swagger-compat-spec-parser/src/main/java/io/swagger/parser/SwaggerCompatConverter.java index f8d7efb10e..6978ca31ad 100644 --- a/modules/swagger-compat-spec-parser/src/main/java/io/swagger/parser/SwaggerCompatConverter.java +++ b/modules/swagger-compat-spec-parser/src/main/java/io/swagger/parser/SwaggerCompatConverter.java @@ -2,51 +2,21 @@ import com.fasterxml.jackson.databind.JsonNode; import com.fasterxml.jackson.databind.node.ObjectNode; -import io.swagger.models.ArrayModel; -import io.swagger.models.AuthorizationScope; -import io.swagger.models.Contact; -import io.swagger.models.Info; -import io.swagger.models.License; -import io.swagger.models.Method; +import io.swagger.models.*; import io.swagger.models.Model; -import io.swagger.models.ModelImpl; import io.swagger.models.Operation; -import io.swagger.models.ParamType; -import io.swagger.models.PassAs; -import io.swagger.models.Path; -import io.swagger.models.RefModel; -import io.swagger.models.Response; -import io.swagger.models.Scheme; -import io.swagger.models.Swagger; -import io.swagger.models.apideclaration.Api; -import io.swagger.models.apideclaration.ApiDeclaration; -import io.swagger.models.apideclaration.ExtendedTypedObject; -import io.swagger.models.apideclaration.Items; -import io.swagger.models.apideclaration.ModelProperty; -import io.swagger.models.apideclaration.ResponseMessage; +import io.swagger.models.apideclaration.*; import io.swagger.models.auth.ApiKeyAuthDefinition; import io.swagger.models.auth.AuthorizationValue; import io.swagger.models.auth.In; import io.swagger.models.auth.OAuth2Definition; -import io.swagger.models.parameters.BodyParameter; -import io.swagger.models.parameters.FormParameter; -import io.swagger.models.parameters.HeaderParameter; +import io.swagger.models.parameters.*; import io.swagger.models.parameters.Parameter; -import io.swagger.models.parameters.PathParameter; -import io.swagger.models.parameters.QueryParameter; -import io.swagger.models.parameters.SerializableParameter; import io.swagger.models.properties.ArrayProperty; import io.swagger.models.properties.Property; import io.swagger.models.properties.PropertyBuilder; import io.swagger.models.properties.RefProperty; -import io.swagger.models.resourcelisting.ApiInfo; -import io.swagger.models.resourcelisting.ApiKeyAuthorization; -import io.swagger.models.resourcelisting.ApiListingReference; -import io.swagger.models.resourcelisting.Authorization; -import io.swagger.models.resourcelisting.AuthorizationCodeGrant; -import io.swagger.models.resourcelisting.ImplicitGrant; -import io.swagger.models.resourcelisting.OAuth2Authorization; -import io.swagger.models.resourcelisting.ResourceListing; +import io.swagger.models.resourcelisting.*; import io.swagger.parser.util.RemoteUrl; import io.swagger.report.MessageBuilder; import io.swagger.transform.migrate.ApiDeclarationMigrator; @@ -344,7 +314,8 @@ public Property propertyFromTypedObject(ExtendedTypedObject obj) { return output; } - public Operation convertOperation(String tag, io.swagger.models.apideclaration.Operation operation) { + public Operation convertOperation(String tag, io.swagger.models.apideclaration.Operation operation, + ApiDeclaration apiDeclaration) { Method method; if (operation.getMethod() == null) { @@ -366,16 +337,25 @@ public Operation convertOperation(String tag, io.swagger.models.apideclaration.O output.parameter(convertParameter(parameter)); } - if (operation.getConsumes() != null) { + if (operation.getConsumes() != null && !operation.getConsumes().isEmpty()) { for (String consumes : operation.getConsumes()) { output.consumes(consumes); } + } else if (apiDeclaration.getConsumes() != null) { + for (String consumes : apiDeclaration.getConsumes()) { + output.consumes(consumes); + } } - if (operation.getProduces() != null) { + if (operation.getProduces() != null && !operation.getProduces().isEmpty()) { for (String produces : operation.getProduces()) { output.produces(produces); } + } else if (apiDeclaration.getProduces() != null) { + for (String produces : apiDeclaration.getProduces()) { + output.produces(produces); + } } + for (ResponseMessage message : operation.getResponseMessages()) { Response response = new Response().description(message.getMessage()); @@ -502,7 +482,7 @@ public Swagger convert(ResourceListing resourceListing, List api paths.put(apiPath, path); } for (io.swagger.models.apideclaration.Operation op : ops) { - Operation operation = convertOperation(tag, op); + Operation operation = convertOperation(tag, op, apiDeclaration); if (op.getMethod() != null) { path.set(op.getMethod().toString().toLowerCase(), operation); @@ -541,6 +521,7 @@ public Swagger convert(ResourceListing resourceListing, List api } } + Swagger swagger = new Swagger() .host(host) .scheme(Scheme.forValue(scheme)) diff --git a/modules/swagger-compat-spec-parser/src/test/java/io/swagger/converter/OperationConverterTest.java b/modules/swagger-compat-spec-parser/src/test/java/io/swagger/converter/OperationConverterTest.java index c27ad434be..4567f7823c 100644 --- a/modules/swagger-compat-spec-parser/src/test/java/io/swagger/converter/OperationConverterTest.java +++ b/modules/swagger-compat-spec-parser/src/test/java/io/swagger/converter/OperationConverterTest.java @@ -4,18 +4,16 @@ import io.swagger.models.Operation; import io.swagger.models.ParamType; import io.swagger.models.Response; +import io.swagger.models.apideclaration.ApiDeclaration; import io.swagger.models.apideclaration.ResponseMessage; import io.swagger.models.properties.Property; import io.swagger.models.properties.RefProperty; import io.swagger.parser.SwaggerCompatConverter; import org.testng.annotations.Test; -import java.util.ArrayList; -import java.util.List; +import java.util.*; -import static org.testng.Assert.assertEquals; -import static org.testng.Assert.assertNotNull; -import static org.testng.Assert.assertTrue; +import static org.testng.Assert.*; public class OperationConverterTest { SwaggerCompatConverter converter = new SwaggerCompatConverter(); @@ -56,7 +54,7 @@ public void convertOperation1() throws Exception { parameters.add(param); operation.setParameters(parameters); - Operation converted = converter.convertOperation("tag", operation); + Operation converted = converter.convertOperation("tag", operation, new ApiDeclaration()); assertTrue(converted.getTags().size() == 1); assertEquals(converted.getTags().get(0), "tag"); @@ -78,4 +76,30 @@ public void convertOperation1() throws Exception { RefProperty ref = (RefProperty) property; assertEquals(ref.getSimpleRef(), "Cat"); } + + @Test + public void testConvertOperation_ConsumesAndProducesInheritedFromApiDeclaration() throws Exception { + Set expectedConsumes = new HashSet<>(Arrays.asList("application/json", "application/xml")); + Set expectedProduces = new HashSet<>(Arrays.asList("text/plain")); + + final ApiDeclaration apiDeclaration = new ApiDeclaration(); + apiDeclaration.setConsumes(new ArrayList<>(expectedConsumes)); + apiDeclaration.setProduces(new ArrayList<>(expectedProduces)); + + io.swagger.models.apideclaration.Operation operation = new io.swagger.models.apideclaration.Operation(); + operation.setMethod(Method.GET); + + final SwaggerCompatConverter swaggerCompatConverter = new SwaggerCompatConverter(); + Operation converted = swaggerCompatConverter.convertOperation("tag", operation, apiDeclaration); + + assertSetsAreEqual(expectedConsumes, converted.getConsumes()); + assertSetsAreEqual(expectedProduces, converted.getProduces()); + } + + private void assertSetsAreEqual(Set expectedConsumes, List actualConsumes) { + Set actualConsumesSet = new HashSet<>(); + actualConsumesSet.addAll(actualConsumes); + assertEquals(expectedConsumes.size(), actualConsumes.size()); + assertTrue(actualConsumesSet.containsAll(expectedConsumes)); + } } \ No newline at end of file diff --git a/modules/swagger-parser/src/test/scala/RemoteUrlTest.scala b/modules/swagger-parser/src/test/scala/RemoteUrlTest.scala index 7636bc22a6..156b2c2220 100644 --- a/modules/swagger-parser/src/test/scala/RemoteUrlTest.scala +++ b/modules/swagger-parser/src/test/scala/RemoteUrlTest.scala @@ -9,13 +9,13 @@ import scala.collection.JavaConverters._ @RunWith(classOf[JUnitRunner]) class RemoteUrlTest extends FlatSpec with Matchers { it should "read a remote URL" in { - val output = RemoteUrl.urlToString("http://petstore.swagger.io/v2/pet/3", null) + val output = RemoteUrl.urlToString("http://petstore.swagger.io/v2/pet/1", null) output should not be (null) } it should "set a header" in { val av = new AuthorizationValue("accept", "application/xml", "header") - val output = RemoteUrl.urlToString("http://petstore.swagger.io/v2/pet/3", List(av).asJava) + val output = RemoteUrl.urlToString("http://petstore.swagger.io/v2/pet/1", List(av).asJava) output.trim.charAt(0) should be('<') }