Update swagger parser to 2.1.14 (#15644)

* update swagger parser to 2.1.14

* minor fix, update tests
This commit is contained in:
William Cheng 2023-05-27 22:55:56 +08:00 committed by GitHub
parent 5afa33980c
commit e4bf068a88
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
6 changed files with 34 additions and 16 deletions

View File

@ -3616,6 +3616,10 @@ public class DefaultCodegen implements CodegenConfig {
}
protected void updatePropertyForMap(CodegenProperty property, Schema p) {
// throw exception if additionalProperties is false
if (p.getAdditionalProperties() instanceof Boolean && Boolean.FALSE.equals(p.getAdditionalProperties())) {
throw new RuntimeException("additionalProperties cannot be false in updatePropertyForMap.");
}
property.isContainer = true;
property.containerType = "map";
// TODO remove this hack in the future, code should use minProperties and maxProperties for object schemas

View File

@ -524,6 +524,11 @@ public class ModelUtils {
* @return true if the specified schema is a Map schema.
*/
public static boolean isMapSchema(Schema schema) {
// additionalProperties explicitly set to false
if (schema.getAdditionalProperties() instanceof Boolean && Boolean.FALSE.equals(schema.getAdditionalProperties())) {
return false;
}
return (schema instanceof MapSchema) ||
(schema.getAdditionalProperties() instanceof Schema) ||
(schema.getAdditionalProperties() instanceof Boolean && (Boolean) schema.getAdditionalProperties());

View File

@ -337,10 +337,11 @@ public class DefaultCodegenTest {
// It is unfortunate that child.getAdditionalProperties() returns null for a V2 schema.
// We cannot differentiate between 'additionalProperties' not present and
// additionalProperties: true.
Assert.assertNull(map_with_additional_properties_sc.getAdditionalProperties());
// UPDATE fixed in swagger parser 2.1.14
Assert.assertTrue((Boolean) map_with_additional_properties_sc.getAdditionalProperties());
addProps = ModelUtils.getAdditionalProperties(openAPI, map_with_additional_properties_sc);
Assert.assertNull(addProps);
Assert.assertNull(map_with_additional_properties_cp.getAdditionalProperties());
Assert.assertEquals(addProps, new Schema());
Assert.assertNotNull(map_with_additional_properties_cp.getAdditionalProperties());
// map_without_additional_properties
// This property has the following inline schema.
@ -349,7 +350,8 @@ public class DefaultCodegenTest {
// It is unfortunate that child.getAdditionalProperties() returns null for a V2 schema.
// We cannot differentiate between 'additionalProperties' not present and
// additionalProperties: false.
Assert.assertNull(map_without_additional_properties_sc.getAdditionalProperties());
// UPDATE fixed in swagger parser 2.1.14
Assert.assertFalse((Boolean) map_without_additional_properties_sc.getAdditionalProperties());
addProps = ModelUtils.getAdditionalProperties(openAPI, map_without_additional_properties_sc);
Assert.assertNull(addProps);
Assert.assertNull(map_without_additional_properties_cp.getAdditionalProperties());
@ -426,9 +428,10 @@ public class DefaultCodegenTest {
// It is unfortunate that child.getAdditionalProperties() returns null for a V2 schema.
// We cannot differentiate between 'additionalProperties' not present and
// additionalProperties: true.
Assert.assertNull(map_with_additional_properties_sc.getAdditionalProperties());
// UPDATE fixed in swagger parser 2.1.14
Assert.assertTrue((Boolean) map_with_additional_properties_sc.getAdditionalProperties());
addProps = ModelUtils.getAdditionalProperties(openAPI, map_with_additional_properties_sc);
Assert.assertNull(addProps);
Assert.assertEquals(addProps, new Schema());
Assert.assertNotNull(map_with_additional_properties_cp.getAdditionalProperties());
// map_without_additional_properties
@ -438,10 +441,11 @@ public class DefaultCodegenTest {
// It is unfortunate that child.getAdditionalProperties() returns null for a V2 schema.
// We cannot differentiate between 'additionalProperties' not present and
// additionalProperties: false.
Assert.assertNull(map_without_additional_properties_sc.getAdditionalProperties());
// UPDATE fixed in swagger parser 2.1.14
Assert.assertFalse((Boolean) map_without_additional_properties_sc.getAdditionalProperties());
addProps = ModelUtils.getAdditionalProperties(openAPI, map_without_additional_properties_sc);
Assert.assertNull(addProps);
Assert.assertNotNull(map_without_additional_properties_cp.getAdditionalProperties());
Assert.assertEquals(addProps, null);
Assert.assertNull(map_without_additional_properties_cp.getAdditionalProperties());
// check of composed schema model
String schemaName = "Parent";
@ -2386,7 +2390,7 @@ public class DefaultCodegenTest {
assertTrue(names.contains("password"));
assertTrue(names.contains("passwordConfirmation"));
assertTrue(names.contains("oldPassword"));
Optional<CodegenParameter> passwordParameter = operation.formParams.stream().filter(p -> "password".equals(p.paramName)).findFirst();
assertTrue(passwordParameter.isPresent());
assertTrue(passwordParameter.get().isPassword);
@ -4277,7 +4281,7 @@ public class DefaultCodegenTest {
.collect(Collectors.toList());
// JUnit assertions
assertEquals("Messages: " + logsList.stream().map(ILoggingEvent::getMessage).collect(Collectors.toList()),8, logsList.size());
assertEquals("Messages: " + logsList.stream().map(ILoggingEvent::getMessage).collect(Collectors.toList()), 8, logsList.size());
assertEquals("Validation 'minItems' has no effect on schema 'string'. Ignoring!", logsList.get(0)
.getMessage());
assertEquals("Validation 'maxItems' has no effect on schema 'string'. Ignoring!", logsList.get(1)
@ -4324,7 +4328,7 @@ public class DefaultCodegenTest {
.collect(Collectors.toList());
// JUnit assertions
assertEquals("Messages: " + logsList.stream().map(ILoggingEvent::getMessage).collect(Collectors.toList()),8, logsList.size());
assertEquals("Messages: " + logsList.stream().map(ILoggingEvent::getMessage).collect(Collectors.toList()), 8, logsList.size());
assertEquals("Validation 'minItems' has no effect on schema 'integer'. Ignoring!", logsList.get(0)
.getMessage());
assertEquals("Validation 'maxItems' has no effect on schema 'integer'. Ignoring!", logsList.get(1)
@ -4371,7 +4375,7 @@ public class DefaultCodegenTest {
.collect(Collectors.toList());
// JUnit assertions
assertEquals("Messages: " + logsList.stream().map(ILoggingEvent::getMessage).collect(Collectors.toList()),0, logsList.size());
assertEquals("Messages: " + logsList.stream().map(ILoggingEvent::getMessage).collect(Collectors.toList()), 0, logsList.size());
}
@Test

View File

@ -112,10 +112,13 @@ public class YamlGeneratorTest {
TestUtils.ensureContainsFile(files, output, ".openapi-generator/FILES");
TestUtils.ensureContainsFile(files, output, ".openapi-generator/VERSION");
OpenAPI generated = TestUtils.parseSpec(new File(output, "issue_9086.yaml").getPath());
OpenAPI actual = TestUtils.parseSpec("src/test/resources/2_0/issue_9086.yaml");
OpenAPI expected = TestUtils.parseSpec("src/test/resources/2_0/issue_9086_expected.yaml");
// use #toString because the equals methods is a little stricter than necessary for this test
Assert.assertEquals(expected.toString(), generated.toString());
Assert.assertEquals(actual.getComponents().getSchemas().get("bar2").getAdditionalProperties(),
expected.getComponents().getSchemas().get("bar2").getAdditionalProperties());
Assert.assertEquals(actual.getPaths().get("/foo/bar").getPost().getResponses().get("200").getContent().get("*/*").getSchema().getAdditionalProperties(),
expected.getComponents().getSchemas().get("_foo_bar_post_200_response").getAdditionalProperties());
}
}

View File

@ -26,6 +26,7 @@ paths:
components:
schemas:
bar2:
additionalProperties: false
example:
"n": 4.56
properties:
@ -34,6 +35,7 @@ components:
type: number
type: object
_foo_bar_post_200_response:
additionalProperties: false
example:
"n": 1.23
properties:

View File

@ -1478,7 +1478,7 @@
<maven-surefire-plugin.version>3.0.0</maven-surefire-plugin.version>
<openrewrite.version>7.22.0</openrewrite.version>
<swagger-parser-groupid.version>io.swagger.parser.v3</swagger-parser-groupid.version>
<swagger-parser.version>2.1.6</swagger-parser.version>
<swagger-parser.version>2.1.14</swagger-parser.version>
<testng.version>7.5</testng.version>
<violations-maven-plugin.version>1.34</violations-maven-plugin.version>
<wagon-ssh-external.version>3.4.3</wagon-ssh-external.version>