diff --git a/pom.xml b/pom.xml index a65b03171ab..f45f6dbb385 100644 --- a/pom.xml +++ b/pom.xml @@ -438,6 +438,11 @@ logback-core ${logback.version} + + org.codehaus.janino + janino + 3.1.11 + diff --git a/samples/client/3_0_3_unit_test/python/src/unit_test_api/components/schema/uniqueitems_false_validation.py b/samples/client/3_0_3_unit_test/python/src/unit_test_api/components/schema/uniqueitems_false_validation.py index c7cd553346d..0bb08617d2c 100644 --- a/samples/client/3_0_3_unit_test/python/src/unit_test_api/components/schema/uniqueitems_false_validation.py +++ b/samples/client/3_0_3_unit_test/python/src/unit_test_api/components/schema/uniqueitems_false_validation.py @@ -10,4 +10,17 @@ from __future__ import annotations from unit_test_api.shared_imports.schema_imports import * # pyright: ignore [reportWildcardImportFromLibrary] -UniqueitemsFalseValidation: typing_extensions.TypeAlias = schemas.AnyTypeSchema + + +@dataclasses.dataclass(frozen=True) +class UniqueitemsFalseValidation( + schemas.AnyTypeSchema[schemas.immutabledict[str, schemas.OUTPUT_BASE_TYPES], typing.Tuple[schemas.OUTPUT_BASE_TYPES, ...]], +): + """NOTE: This class is auto generated by OpenAPI JSON Schema Generator. + Ref: https://github.com/openapi-json-schema-tools/openapi-json-schema-generator + + Do not edit the class manually. + """ + # any type + unique_items: bool = False + diff --git a/samples/client/3_1_0_unit_test/python/src/unit_test_api/components/schema/uniqueitems_false_validation.py b/samples/client/3_1_0_unit_test/python/src/unit_test_api/components/schema/uniqueitems_false_validation.py index 0f57295ee10..0b1e02cf304 100644 --- a/samples/client/3_1_0_unit_test/python/src/unit_test_api/components/schema/uniqueitems_false_validation.py +++ b/samples/client/3_1_0_unit_test/python/src/unit_test_api/components/schema/uniqueitems_false_validation.py @@ -10,4 +10,17 @@ from __future__ import annotations from unit_test_api.shared_imports.schema_imports import * # pyright: ignore [reportWildcardImportFromLibrary] -UniqueitemsFalseValidation: typing_extensions.TypeAlias = schemas.AnyTypeSchema + + +@dataclasses.dataclass(frozen=True) +class UniqueitemsFalseValidation( + schemas.AnyTypeSchema[schemas.immutabledict[str, schemas.OUTPUT_BASE_TYPES], typing.Tuple[schemas.OUTPUT_BASE_TYPES, ...]], +): + """NOTE: This class is auto generated by OpenAPI JSON Schema Generator. + Ref: https://github.com/openapi-json-schema-tools/openapi-json-schema-generator + + Do not edit the class manually. + """ + # any type + unique_items: bool = False + diff --git a/samples/client/3_1_0_unit_test/python/src/unit_test_api/components/schema/uniqueitems_false_with_an_array_of_items.py b/samples/client/3_1_0_unit_test/python/src/unit_test_api/components/schema/uniqueitems_false_with_an_array_of_items.py index f1dde470e8c..c64ed411129 100644 --- a/samples/client/3_1_0_unit_test/python/src/unit_test_api/components/schema/uniqueitems_false_with_an_array_of_items.py +++ b/samples/client/3_1_0_unit_test/python/src/unit_test_api/components/schema/uniqueitems_false_with_an_array_of_items.py @@ -31,4 +31,5 @@ class UniqueitemsFalseWithAnArrayOfItems( _0, _1, ) + unique_items: bool = False diff --git a/samples/client/petstore/java/.openapi-generator/FILES b/samples/client/petstore/java/.openapi-generator/FILES index 843df8a800b..d210fd4e6db 100644 --- a/samples/client/petstore/java/.openapi-generator/FILES +++ b/samples/client/petstore/java/.openapi-generator/FILES @@ -103,6 +103,7 @@ docs/components/schemas/NullableShape.md docs/components/schemas/NullableString.md docs/components/schemas/NumberOnly.md docs/components/schemas/NumberSchema.md +docs/components/schemas/NumberWithExclusiveMinMax.md docs/components/schemas/NumberWithValidations.md docs/components/schemas/ObjWithRequiredProps.md docs/components/schemas/ObjWithRequiredPropsBase.md @@ -406,6 +407,7 @@ src/main/java/org/openapijsonschematools/client/components/schemas/NullableShape src/main/java/org/openapijsonschematools/client/components/schemas/NullableString.java src/main/java/org/openapijsonschematools/client/components/schemas/NumberOnly.java src/main/java/org/openapijsonschematools/client/components/schemas/NumberSchema.java +src/main/java/org/openapijsonschematools/client/components/schemas/NumberWithExclusiveMinMax.java src/main/java/org/openapijsonschematools/client/components/schemas/NumberWithValidations.java src/main/java/org/openapijsonschematools/client/components/schemas/ObjWithRequiredProps.java src/main/java/org/openapijsonschematools/client/components/schemas/ObjWithRequiredPropsBase.java diff --git a/samples/client/petstore/java/README.md b/samples/client/petstore/java/README.md index 1c42187e95b..a8e8c5745ba 100644 --- a/samples/client/petstore/java/README.md +++ b/samples/client/petstore/java/README.md @@ -234,6 +234,7 @@ allowed input and output types. | [NullableString.NullableString1](docs/components/schemas/NullableString.md#nullablestring1) | | | [NumberSchema.NumberSchema1](docs/components/schemas/NumberSchema.md#numberschema1) | | | [NumberOnly.NumberOnly1](docs/components/schemas/NumberOnly.md#numberonly1) | | +| [NumberWithExclusiveMinMax.NumberWithExclusiveMinMax1](docs/components/schemas/NumberWithExclusiveMinMax.md#numberwithexclusiveminmax1) | | | [NumberWithValidations.NumberWithValidations1](docs/components/schemas/NumberWithValidations.md#numberwithvalidations1) | | | [ObjWithRequiredProps.ObjWithRequiredProps1](docs/components/schemas/ObjWithRequiredProps.md#objwithrequiredprops1) | | | [ObjWithRequiredPropsBase.ObjWithRequiredPropsBase1](docs/components/schemas/ObjWithRequiredPropsBase.md#objwithrequiredpropsbase1) | | diff --git a/samples/client/petstore/java/docs/components/schemas/NumberWithExclusiveMinMax.md b/samples/client/petstore/java/docs/components/schemas/NumberWithExclusiveMinMax.md new file mode 100644 index 00000000000..b8e4a87791f --- /dev/null +++ b/samples/client/petstore/java/docs/components/schemas/NumberWithExclusiveMinMax.md @@ -0,0 +1,27 @@ +# NumberWithExclusiveMinMax +org.openapijsonschematools.client.components.schemas.NumberWithExclusiveMinMax.java +public class NumberWithExclusiveMinMax + +A class that contains necessary nested schema classes, and classes to store validated list and map payloads + +## Nested Class Summary +| Modifier and Type | Class and Description | +| ----------------- | ---------------------- | +| static class | [NumberWithExclusiveMinMax.NumberWithExclusiveMinMax1](#numberwithexclusiveminmax1)
schema class | + +## NumberWithExclusiveMinMax1 +public static class NumberWithExclusiveMinMax1
+extends JsonSchema + +A schema class that validates payloads +### Field Summary +| Modifier and Type | Field and Description | +| ----------------- | ---------------------- | +| static LinkedHashMap |keywordToValidator
new LinkedHashMap<>(Map.ofEntries(
    new KeywordEntry("type", new TypeValidator(Set.of(
        Integer.class,
        Long.class,
        Float.class,
        Double.class
    ))),
    new KeywordEntry("exclusiveMaximum", new ExclusiveMaximumValidator(12)),
    new KeywordEntry("exclusiveMinimum", new ExclusiveMinimumValidator(10))
)); | + +### Method Summary +| Modifier and Type | Method and Description | +| ----------------- | ---------------------- | +| static Number | validate(Number arg, SchemaConfiguration configuration) | + +[[Back to top]](#top) [[Back to Component Schemas]](../../../README.md#Component-Schemas) [[Back to README]](../../../README.md) diff --git a/samples/client/petstore/java/src/main/java/org/openapijsonschematools/client/components/schemas/NumberWithExclusiveMinMax.java b/samples/client/petstore/java/src/main/java/org/openapijsonschematools/client/components/schemas/NumberWithExclusiveMinMax.java new file mode 100644 index 00000000000..18eed901ca4 --- /dev/null +++ b/samples/client/petstore/java/src/main/java/org/openapijsonschematools/client/components/schemas/NumberWithExclusiveMinMax.java @@ -0,0 +1,50 @@ +package org.openapijsonschematools.client.components.schemas; +import java.util.LinkedHashMap; +import java.util.Map; +import java.util.Set; +import org.openapijsonschematools.client.configurations.SchemaConfiguration; +import org.openapijsonschematools.client.exceptions.ValidationException; +import org.openapijsonschematools.client.schemas.validation.ExclusiveMaximumValidator; +import org.openapijsonschematools.client.schemas.validation.ExclusiveMinimumValidator; +import org.openapijsonschematools.client.schemas.validation.JsonSchema; +import org.openapijsonschematools.client.schemas.validation.KeywordEntry; +import org.openapijsonschematools.client.schemas.validation.KeywordValidator; +import org.openapijsonschematools.client.schemas.validation.TypeValidator; + +public class NumberWithExclusiveMinMax { + // nest classes so all schemas and input/output classes can be public + + + public static class NumberWithExclusiveMinMax1 extends JsonSchema { + /* + NOTE: This class is auto generated by OpenAPI JSON Schema Generator. + Ref: https://github.com/openapi-json-schema-tools/openapi-json-schema-generator + + Do not edit the class manually. + */ + public static final LinkedHashMap keywordToValidator = new LinkedHashMap<>(Map.ofEntries( + new KeywordEntry("type", new TypeValidator(Set.of( + Integer.class, + Long.class, + Float.class, + Double.class + ))), + new KeywordEntry("exclusiveMaximum", new ExclusiveMaximumValidator(12)), + new KeywordEntry("exclusiveMinimum", new ExclusiveMinimumValidator(10)) + )); + public static int validate(int arg, SchemaConfiguration configuration) throws ValidationException { + return JsonSchema.validateInt(NumberWithExclusiveMinMax1.class, arg, configuration); + } + + public static long validate(long arg, SchemaConfiguration configuration) throws ValidationException { + return JsonSchema.validateLong(NumberWithExclusiveMinMax1.class, arg, configuration); + } + + public static float validate(float arg, SchemaConfiguration configuration) throws ValidationException { + return JsonSchema.validateFloat(NumberWithExclusiveMinMax1.class, arg, configuration); + } + + public static double validate(double arg, SchemaConfiguration configuration) throws ValidationException { + return JsonSchema.validateDouble(NumberWithExclusiveMinMax1.class, arg, configuration); + } + }} diff --git a/samples/client/petstore/java/src/test/java/org/openapijsonschematools/client/components/schemas/NumberWithExclusiveMinMaxTest.java b/samples/client/petstore/java/src/test/java/org/openapijsonschematools/client/components/schemas/NumberWithExclusiveMinMaxTest.java new file mode 100644 index 00000000000..f32f20b211e --- /dev/null +++ b/samples/client/petstore/java/src/test/java/org/openapijsonschematools/client/components/schemas/NumberWithExclusiveMinMaxTest.java @@ -0,0 +1,17 @@ +package org.openapijsonschematools.client.components.schemas; + +import org.junit.Assert; +import org.junit.Test; +import org.openapijsonschematools.client.configurations.JsonSchemaKeywordFlags; +import org.openapijsonschematools.client.configurations.SchemaConfiguration; +import org.openapijsonschematools.client.exceptions.ValidationException; +import org.openapijsonschematools.client.schemas.validation.JsonSchema; +import org.openapijsonschematools.client.schemas.MapMaker; + +import java.util.Arrays; +import java.util.List; +import java.util.AbstractMap; + +public class NumberWithExclusiveMinMaxTest { + static final SchemaConfiguration configuration = new SchemaConfiguration(JsonSchemaKeywordFlags.ofNone()); +} diff --git a/samples/client/petstore/python/.openapi-generator/FILES b/samples/client/petstore/python/.openapi-generator/FILES index d8a5fd45cd9..5ba6ce35185 100644 --- a/samples/client/petstore/python/.openapi-generator/FILES +++ b/samples/client/petstore/python/.openapi-generator/FILES @@ -136,6 +136,7 @@ docs/components/schema/nullable_shape.md docs/components/schema/nullable_string.md docs/components/schema/number.md docs/components/schema/number_only.md +docs/components/schema/number_with_exclusive_min_max.md docs/components/schema/number_with_validations.md docs/components/schema/obj_with_required_props.md docs/components/schema/obj_with_required_props_base.md @@ -646,6 +647,7 @@ src/petstore_api/components/schema/nullable_shape.py src/petstore_api/components/schema/nullable_string.py src/petstore_api/components/schema/number.py src/petstore_api/components/schema/number_only.py +src/petstore_api/components/schema/number_with_exclusive_min_max.py src/petstore_api/components/schema/number_with_validations.py src/petstore_api/components/schema/obj_with_required_props.py src/petstore_api/components/schema/obj_with_required_props_base.py diff --git a/samples/client/petstore/python/README.md b/samples/client/petstore/python/README.md index 95f4efd50d4..d7ccae1b955 100644 --- a/samples/client/petstore/python/README.md +++ b/samples/client/petstore/python/README.md @@ -323,6 +323,7 @@ Class | Description [NullableString](docs/components/schema/nullable_string.md) | [Number](docs/components/schema/number.md) | [NumberOnly](docs/components/schema/number_only.md) | +[NumberWithExclusiveMinMax](docs/components/schema/number_with_exclusive_min_max.md) | [NumberWithValidations](docs/components/schema/number_with_validations.md) | [ObjWithRequiredProps](docs/components/schema/obj_with_required_props.md) | [ObjWithRequiredPropsBase](docs/components/schema/obj_with_required_props_base.md) | diff --git a/samples/client/petstore/python/docs/components/schema/number_with_exclusive_min_max.md b/samples/client/petstore/python/docs/components/schema/number_with_exclusive_min_max.md new file mode 100644 index 00000000000..114a1f4d3c9 --- /dev/null +++ b/samples/client/petstore/python/docs/components/schema/number_with_exclusive_min_max.md @@ -0,0 +1,12 @@ +# NumberWithExclusiveMinMax +petstore_api.components.schema.number_with_exclusive_min_max +``` +type: schemas.Schema +``` + +## validate method +Input Type | Return Type | Notes +------------ | ------------- | ------------- +float, int | float, int | + +[[Back to top]](#top) [[Back to Component Schemas]](../../../README.md#Component-Schemas) [[Back to README]](../../../README.md) diff --git a/samples/client/petstore/python/src/petstore_api/components/schema/composed_none.py b/samples/client/petstore/python/src/petstore_api/components/schema/composed_none.py index 36e09bcaa5c..f71cbfae8e7 100644 --- a/samples/client/petstore/python/src/petstore_api/components/schema/composed_none.py +++ b/samples/client/petstore/python/src/petstore_api/components/schema/composed_none.py @@ -29,3 +29,4 @@ class ComposedNone( type(None), }) all_of: AllOf = dataclasses.field(default_factory=lambda: schemas.tuple_to_instance(AllOf)) # type: ignore + diff --git a/samples/client/petstore/python/src/petstore_api/components/schema/number_with_exclusive_min_max.py b/samples/client/petstore/python/src/petstore_api/components/schema/number_with_exclusive_min_max.py new file mode 100644 index 00000000000..98c78dd7c6f --- /dev/null +++ b/samples/client/petstore/python/src/petstore_api/components/schema/number_with_exclusive_min_max.py @@ -0,0 +1,29 @@ +# coding: utf-8 + +""" + OpenAPI Petstore + This spec is mainly for testing Petstore server and contains fake endpoints, models. Please do not use this for any other purpose. Special characters: " \ # noqa: E501 + The version of the OpenAPI document: 1.0.0 + Generated by: https://github.com/openapi-json-schema-tools/openapi-json-schema-generator +""" + +from __future__ import annotations +from petstore_api.shared_imports.schema_imports import * # pyright: ignore [reportWildcardImportFromLibrary] + + + +@dataclasses.dataclass(frozen=True) +class NumberWithExclusiveMinMax( + schemas.NumberSchema +): + """NOTE: This class is auto generated by OpenAPI JSON Schema Generator. + Ref: https://github.com/openapi-json-schema-tools/openapi-json-schema-generator + + Do not edit the class manually. + """ + types: typing.FrozenSet[typing.Type] = frozenset({ + float, + int, + }) + exclusive_maximum: typing.Union[int, float] = 12 + exclusive_minimum: typing.Union[int, float] = 10 diff --git a/samples/client/petstore/python/src/petstore_api/components/schemas/__init__.py b/samples/client/petstore/python/src/petstore_api/components/schemas/__init__.py index 6fca9d7e6c6..325e3a54b44 100644 --- a/samples/client/petstore/python/src/petstore_api/components/schemas/__init__.py +++ b/samples/client/petstore/python/src/petstore_api/components/schemas/__init__.py @@ -89,6 +89,7 @@ from petstore_api.components.schema.nullable_string import NullableString from petstore_api.components.schema.number import Number from petstore_api.components.schema.number_only import NumberOnly +from petstore_api.components.schema.number_with_exclusive_min_max import NumberWithExclusiveMinMax from petstore_api.components.schema.number_with_validations import NumberWithValidations from petstore_api.components.schema.obj_with_required_props import ObjWithRequiredProps from petstore_api.components.schema.obj_with_required_props_base import ObjWithRequiredPropsBase diff --git a/samples/client/petstore/python/test/components/schema/test_number_with_exclusive_min_max.py b/samples/client/petstore/python/test/components/schema/test_number_with_exclusive_min_max.py new file mode 100644 index 00000000000..4f3c8cd34b9 --- /dev/null +++ b/samples/client/petstore/python/test/components/schema/test_number_with_exclusive_min_max.py @@ -0,0 +1,25 @@ +# coding: utf-8 + +""" + OpenAPI Petstore + This spec is mainly for testing Petstore server and contains fake endpoints, models. Please do not use this for any other purpose. Special characters: " \ # noqa: E501 + The version of the OpenAPI document: 1.0.0 + Generated by: https://github.com/openapi-json-schema-tools/openapi-json-schema-generator +""" + +import unittest + +import petstore_api +from petstore_api.components.schema.number_with_exclusive_min_max import NumberWithExclusiveMinMax +from petstore_api.configurations import schema_configuration + + +class TestNumberWithExclusiveMinMax(unittest.TestCase): + """NumberWithExclusiveMinMax unit test stubs""" + configuration = schema_configuration.SchemaConfiguration( + disabled_json_schema_keywords={'format'} + ) + + +if __name__ == '__main__': + unittest.main() diff --git a/src/main/java/org/openapijsonschematools/codegen/common/ModelUtils.java b/src/main/java/org/openapijsonschematools/codegen/common/ModelUtils.java index fd96f2dd2ee..1f195a49656 100644 --- a/src/main/java/org/openapijsonschematools/codegen/common/ModelUtils.java +++ b/src/main/java/org/openapijsonschematools/codegen/common/ModelUtils.java @@ -1503,17 +1503,20 @@ public static void syncValidationProperties(Schema schema, CodegenSchema target) BigDecimal multipleOf = schema.getMultipleOf(); BigDecimal minimum = schema.getMinimum(); BigDecimal maximum = schema.getMaximum(); - Boolean exclusiveMinimum = schema.getExclusiveMinimum(); - if (minimum == null && schema.getExclusiveMinimumValue() != null) { - minimum = schema.getExclusiveMinimumValue(); - exclusiveMinimum = Boolean.TRUE; + // 3.1.0 use case + BigDecimal exclusiveMinimum = schema.getExclusiveMinimumValue(); + // 3.1.0 use case + BigDecimal exclusiveMaximum = schema.getExclusiveMaximumValue(); + // 3.0.0-3.0.3 use case + if (Boolean.TRUE.equals(schema.getExclusiveMinimum())) { + exclusiveMinimum = minimum; + minimum = null; } - Boolean exclusiveMaximum = schema.getExclusiveMaximum(); - if (maximum == null && schema.getExclusiveMaximumValue() != null) { - maximum = schema.getExclusiveMaximumValue(); - exclusiveMaximum = Boolean.TRUE; + // 3.0.0-3.0.3 use case + if (Boolean.TRUE.equals(schema.getExclusiveMaximum())) { + exclusiveMaximum = maximum; + maximum = null; } - if (isArraySchema(schema)) { setArrayValidations(minItems, maxItems, uniqueItems, target); } else if (isTypeObjectSchema(schema)) { @@ -1551,24 +1554,12 @@ private static void setStringValidations(Integer minLength, Integer maxLength, S if (maxLength != null) target.maxLength = maxLength; } - private static void setNumericValidations(Schema schema, BigDecimal multipleOf, BigDecimal minimum, BigDecimal maximum, Boolean exclusiveMinimum, Boolean exclusiveMaximum, CodegenSchema target) { - if (multipleOf != null) target.multipleOf = multipleOf; - if (minimum != null) { - if (isIntegerSchema(schema)) { - target.minimum = String.valueOf(minimum.longValue()); - } else { - target.minimum = String.valueOf(minimum); - } - if (exclusiveMinimum != null) target.exclusiveMinimum = exclusiveMinimum; - } - if (maximum != null) { - if (isIntegerSchema(schema)) { - target.maximum = String.valueOf(maximum.longValue()); - } else { - target.maximum = String.valueOf(maximum); - } - if (exclusiveMaximum != null) target.exclusiveMaximum = exclusiveMaximum; - } + private static void setNumericValidations(Schema schema, BigDecimal multipleOf, BigDecimal minimum, BigDecimal maximum, BigDecimal exclusiveMinimum, BigDecimal exclusiveMaximum, CodegenSchema target) { + target.multipleOf = multipleOf; + target.minimum = minimum; + target.maximum = maximum; + target.exclusiveMinimum = exclusiveMinimum; + target.exclusiveMaximum = exclusiveMaximum; } private static ObjectMapper getRightMapper(String data) { diff --git a/src/main/java/org/openapijsonschematools/codegen/generators/openapimodels/CodegenSchema.java b/src/main/java/org/openapijsonschematools/codegen/generators/openapimodels/CodegenSchema.java index 802ffee0f35..ba877a82a36 100644 --- a/src/main/java/org/openapijsonschematools/codegen/generators/openapimodels/CodegenSchema.java +++ b/src/main/java/org/openapijsonschematools/codegen/generators/openapimodels/CodegenSchema.java @@ -19,6 +19,7 @@ import io.swagger.v3.oas.models.ExternalDocumentation; +import java.math.BigDecimal; import java.util.ArrayList; import java.util.HashMap; import java.util.LinkedHashMap; @@ -32,10 +33,10 @@ public class CodegenSchema { // 3.0.0 public String title; public Number multipleOf; - public String maximum; - public Boolean exclusiveMaximum; - public String minimum; - public Boolean exclusiveMinimum; + public BigDecimal maximum; + public BigDecimal exclusiveMaximum; + public BigDecimal minimum; + public BigDecimal exclusiveMinimum; public Integer maxLength; public Integer minLength; public CodegenPatternInfo patternInfo; @@ -169,10 +170,10 @@ public List keywords() { if (minProperties != null) { keywords.add("minProperties"); } - if (maximum != null && exclusiveMaximum == null) { + if (maximum != null) { keywords.add("maximum"); } - if (minimum != null && exclusiveMinimum == null) { + if (minimum != null) { keywords.add("minimum"); } if (multipleOf != null) { @@ -303,7 +304,7 @@ public boolean isSimpleInteger() { if (!types.contains("integer")) { return false; } - if (allOf != null || anyOf != null || oneOf != null || not != null || if_ != null || then != null || else_ != null || enumInfo != null || constInfo != null || maximum != null || minimum != null || multipleOf != null) { + if (allOf != null || anyOf != null || oneOf != null || not != null || if_ != null || then != null || else_ != null || enumInfo != null || constInfo != null || maximum != null || minimum != null || exclusiveMaximum != null || exclusiveMinimum != null || multipleOf != null) { return false; } return true; @@ -319,7 +320,7 @@ public boolean isSimpleNumber() { if (!types.contains("number")) { return false; } - if (allOf != null || anyOf != null || oneOf != null || not != null || if_ != null || then != null || else_ != null || enumInfo != null || constInfo != null || maximum != null || minimum != null || multipleOf != null) { + if (allOf != null || anyOf != null || oneOf != null || not != null || if_ != null || then != null || else_ != null || enumInfo != null || constInfo != null || maximum != null || minimum != null || exclusiveMaximum != null || exclusiveMinimum != null || multipleOf != null) { return false; } return true; @@ -377,7 +378,7 @@ public boolean isSimpleAnyType() { if (types != null) { return false; } - if (allOf != null || anyOf != null || oneOf != null || not != null || if_ != null || then != null || else_ != null || enumInfo != null || constInfo != null || properties != null || requiredProperties != null || hasDiscriminatorWithNonEmptyMapping() != false || additionalProperties != null || dependentRequired != null || dependentSchemas != null || propertyNames != null || maxProperties != null || minProperties != null || patternProperties != null || unevaluatedProperties != null || items != null || uniqueItems != null || maxItems != null || minItems != null || contains != null || maxContains != null || minContains != null || prefixItems != null || unevaluatedItems != null || format != null || maxLength != null || minLength != null || maximum != null || minimum != null || multipleOf != null || patternInfo != null) { + if (allOf != null || anyOf != null || oneOf != null || not != null || if_ != null || then != null || else_ != null || enumInfo != null || constInfo != null || properties != null || requiredProperties != null || hasDiscriminatorWithNonEmptyMapping() != false || additionalProperties != null || dependentRequired != null || dependentSchemas != null || propertyNames != null || maxProperties != null || minProperties != null || patternProperties != null || unevaluatedProperties != null || items != null || uniqueItems != null || maxItems != null || minItems != null || contains != null || maxContains != null || minContains != null || prefixItems != null || unevaluatedItems != null || format != null || maxLength != null || minLength != null || maximum != null || minimum != null || exclusiveMaximum != null || exclusiveMinimum != null || multipleOf != null || patternInfo != null) { return false; } return true; diff --git a/src/main/resources/java/src/main/java/packagename/components/schemas/SchemaClass/_exclusiveMaximum.hbs b/src/main/resources/java/src/main/java/packagename/components/schemas/SchemaClass/_exclusiveMaximum.hbs index 46c2aa69e4e..83273f80699 100644 --- a/src/main/resources/java/src/main/java/packagename/components/schemas/SchemaClass/_exclusiveMaximum.hbs +++ b/src/main/resources/java/src/main/java/packagename/components/schemas/SchemaClass/_exclusiveMaximum.hbs @@ -1,5 +1,5 @@ {{#if forDocs}} -    new KeywordEntry("exclusiveMaximum", new ExclusiveMaximumValidator({{maximum}})){{#unless @last}},{{/unless}}
+    new KeywordEntry("exclusiveMaximum", new ExclusiveMaximumValidator({{exclusiveMaximum}})){{#unless @last}},{{/unless}}
{{~else}} -new KeywordEntry("exclusiveMaximum", new ExclusiveMaximumValidator({{maximum}})){{#unless @last}},{{/unless}} +new KeywordEntry("exclusiveMaximum", new ExclusiveMaximumValidator({{exclusiveMaximum}})){{#unless @last}},{{/unless}} {{/if}} \ No newline at end of file diff --git a/src/main/resources/java/src/main/java/packagename/components/schemas/SchemaClass/_exclusiveMinimum.hbs b/src/main/resources/java/src/main/java/packagename/components/schemas/SchemaClass/_exclusiveMinimum.hbs index e9e75d84bab..0fb56705da7 100644 --- a/src/main/resources/java/src/main/java/packagename/components/schemas/SchemaClass/_exclusiveMinimum.hbs +++ b/src/main/resources/java/src/main/java/packagename/components/schemas/SchemaClass/_exclusiveMinimum.hbs @@ -1,5 +1,5 @@ {{#if forDocs}} -    new KeywordEntry("exclusiveMinimum", new ExclusiveMinimumValidator({{minimum}})){{#unless @last}},{{/unless}}
+    new KeywordEntry("exclusiveMinimum", new ExclusiveMinimumValidator({{exclusiveMinimum}})){{#unless @last}},{{/unless}}
{{~else}} -new KeywordEntry("exclusiveMinimum", new ExclusiveMinimumValidator({{minimum}})){{#unless @last}},{{/unless}} +new KeywordEntry("exclusiveMinimum", new ExclusiveMinimumValidator({{exclusiveMinimum}})){{#unless @last}},{{/unless}} {{/if}} \ No newline at end of file diff --git a/src/main/resources/python/components/schemas/schema_cls/_exclusive_maximum.hbs b/src/main/resources/python/components/schemas/schema_cls/_exclusive_maximum.hbs new file mode 100644 index 00000000000..791275da1aa --- /dev/null +++ b/src/main/resources/python/components/schemas/schema_cls/_exclusive_maximum.hbs @@ -0,0 +1 @@ +exclusive_maximum: typing.Union[int, float] = {{exclusiveMaximum}} diff --git a/src/main/resources/python/components/schemas/schema_cls/_exclusive_minimum.hbs b/src/main/resources/python/components/schemas/schema_cls/_exclusive_minimum.hbs new file mode 100644 index 00000000000..f871cc86f52 --- /dev/null +++ b/src/main/resources/python/components/schemas/schema_cls/_exclusive_minimum.hbs @@ -0,0 +1 @@ +exclusive_minimum: typing.Union[int, float] = {{exclusiveMinimum}} diff --git a/src/main/resources/python/components/schemas/schema_cls/_maximum.hbs b/src/main/resources/python/components/schemas/schema_cls/_maximum.hbs index 92ce76989e9..5aa99575c49 100644 --- a/src/main/resources/python/components/schemas/schema_cls/_maximum.hbs +++ b/src/main/resources/python/components/schemas/schema_cls/_maximum.hbs @@ -1 +1 @@ -{{#if exclusiveMaximum}}exclusive_maximum{{else}}inclusive_maximum{{/if}}: typing.Union[int, float] = {{maximum}} +inclusive_maximum: typing.Union[int, float] = {{maximum}} diff --git a/src/main/resources/python/components/schemas/schema_cls/_minimum.hbs b/src/main/resources/python/components/schemas/schema_cls/_minimum.hbs index c510f0c4a65..73ec7295eec 100644 --- a/src/main/resources/python/components/schemas/schema_cls/_minimum.hbs +++ b/src/main/resources/python/components/schemas/schema_cls/_minimum.hbs @@ -1 +1 @@ -{{#if exclusiveMinimum}}exclusive_minimum{{else}}inclusive_minimum{{/if}}: typing.Union[int, float] = {{minimum}} +inclusive_minimum: typing.Union[int, float] = {{minimum}} diff --git a/src/main/resources/python/components/schemas/schema_cls/_schema_anytype_or_multitype.hbs b/src/main/resources/python/components/schemas/schema_cls/_schema_anytype_or_multitype.hbs index 4b4a6184c70..1d176daa906 100644 --- a/src/main/resources/python/components/schemas/schema_cls/_schema_anytype_or_multitype.hbs +++ b/src/main/resources/python/components/schemas/schema_cls/_schema_anytype_or_multitype.hbs @@ -54,9 +54,9 @@ class {{jsonPathPiece.camelCase}}( {{#if properties}} {{> components/schemas/schema_cls/_properties }} {{/if}} -{{#if uniqueItems}} +{{#neq uniqueItems null }} {{> components/schemas/schema_cls/_unique_items }} -{{/if}} +{{/neq}} {{#neq maxLength null}} {{> components/schemas/schema_cls/_max_length }} {{/neq}} @@ -81,6 +81,12 @@ class {{jsonPathPiece.camelCase}}( {{#if minimum}} {{> components/schemas/schema_cls/_minimum }} {{/if}} +{{#neq exclusiveMaximum null }} + {{> components/schemas/schema_cls/_exclusive_maximum }} +{{/neq}} +{{#neq exclusiveMinimum null }} + {{> components/schemas/schema_cls/_exclusive_minimum }} +{{/neq}} {{#if multipleOf}} {{> components/schemas/schema_cls/_multiple_of }} {{/if}} diff --git a/src/main/resources/python/components/schemas/schema_cls/_schema_list.hbs b/src/main/resources/python/components/schemas/schema_cls/_schema_list.hbs index 2a4490e75a6..c3d58efb3c3 100644 --- a/src/main/resources/python/components/schemas/schema_cls/_schema_list.hbs +++ b/src/main/resources/python/components/schemas/schema_cls/_schema_list.hbs @@ -16,9 +16,9 @@ class {{jsonPathPiece.camelCase}}( """ {{/if}} types: typing.FrozenSet[typing.Type] = frozenset({tuple}) - {{#if uniqueItems}} + {{#neq uniqueItems null }} {{> components/schemas/schema_cls/_unique_items }} - {{/if}} + {{/neq}} {{#neq maxItems null}} {{> components/schemas/schema_cls/_max_items }} {{/neq}} diff --git a/src/main/resources/python/components/schemas/schema_cls/_schema_number.hbs b/src/main/resources/python/components/schemas/schema_cls/_schema_number.hbs index 22e25cc6913..a4eaa3a715e 100644 --- a/src/main/resources/python/components/schemas/schema_cls/_schema_number.hbs +++ b/src/main/resources/python/components/schemas/schema_cls/_schema_number.hbs @@ -25,6 +25,12 @@ class {{jsonPathPiece.camelCase}}( {{#if minimum}} {{> components/schemas/schema_cls/_minimum }} {{/if}} +{{#neq exclusiveMaximum null }} + {{> components/schemas/schema_cls/_exclusive_maximum }} +{{/neq}} +{{#neq exclusiveMinimum null }} + {{> components/schemas/schema_cls/_exclusive_minimum }} +{{/neq}} {{#if multipleOf}} {{> components/schemas/schema_cls/_multiple_of }} {{/if}} diff --git a/src/main/resources/python/components/schemas/schema_cls/schema_cls.hbs b/src/main/resources/python/components/schemas/schema_cls/schema_cls.hbs index 87d11596e9c..d936980ae2d 100644 --- a/src/main/resources/python/components/schemas/schema_cls/schema_cls.hbs +++ b/src/main/resources/python/components/schemas/schema_cls/schema_cls.hbs @@ -2,49 +2,57 @@ {{> components/schemas/schema_cls/_schema_var_equals_cls }} {{else}} {{#eq types null }} - {{#or allOf anyOf oneOf not if_ then else_ enumInfo constInfo properties requiredProperties hasDiscriminatorWithNonEmptyMapping additionalProperties dependentRequired dependentSchemas propertyNames (neq maxProperties null) (neq minProperties null) patternProperties unevaluatedProperties items uniqueItems (neq maxItems null) (neq minItems null) contains (neq maxContains null) (neq minContains null) prefixItems unevaluatedItems format (neq maxLength null) (neq minLength null) maximum minimum multipleOf patternInfo }} -{{> components/schemas/schema_cls/_schema_anytype_or_multitype }} - {{else}} + {{#if isSimpleAnyType }} {{> components/schemas/schema_cls/_schema_var_equals_cls }} - {{/or}} + {{else}} +{{> components/schemas/schema_cls/_schema_anytype_or_multitype }} + {{/if}} {{else}} {{! types exist }} {{#eq types.size 1}} {{! one type }} {{#each types}} {{#eq this "object"}} - {{#or allOf anyOf oneOf not if_ then else_ properties requiredProperties hasDiscriminatorWithNonEmptyMapping additionalProperties dependentRequired dependentSchemas propertyNames (neq maxProperties null) (neq minProperties null) patternProperties unevaluatedProperties }} -{{> components/schemas/schema_cls/_schema_dict }} - {{else}} + {{#if isSimpleObject }} {{> components/schemas/schema_cls/_schema_var_equals_cls }} - {{/or}} + {{else}} +{{> components/schemas/schema_cls/_schema_dict }} + {{/if}} {{else}} {{#eq this "array"}} - {{#or allOf anyOf oneOf not if_ then else_ items uniqueItems contains (neq maxContains null) (neq minContains null) (neq maxItems null) (neq minItems null) prefixItems unevaluatedItems }} -{{> components/schemas/schema_cls/_schema_list }} - {{else}} + {{#if isSimpleArray }} {{> components/schemas/schema_cls/_schema_var_equals_cls }} - {{/or}} + {{else}} +{{> components/schemas/schema_cls/_schema_list }} + {{/if}} {{else}} {{#eq this "boolean"}} - {{#or allOf anyOf oneOf not if_ then else_ enumInfo constInfo }} -{{> components/schemas/schema_cls/_schema_boolean }} - {{else}} + {{#if isSimpleBoolean }} {{> components/schemas/schema_cls/_schema_var_equals_cls }} - {{/or}} + {{else}} +{{> components/schemas/schema_cls/_schema_boolean }} + {{/if}} {{else}} {{#or (eq this "number") (eq this "integer") }} - {{#or allOf anyOf oneOf not if_ then else_ enumInfo constInfo maximum minimum multipleOf }} -{{> components/schemas/schema_cls/_schema_number }} - {{else}} + {{#or isSimpleInteger isSimpleNumber }} {{> components/schemas/schema_cls/_schema_var_equals_cls }} + {{else}} +{{> components/schemas/schema_cls/_schema_number }} {{/or}} {{else}} - {{#or allOf anyOf oneOf not if_ then else_ enumInfo constInfo defaultValue (neq maxLength null) (neq minLength null) patternInfo }} + {{#eq this "string"}} + {{#if isSimpleString }} +{{> components/schemas/schema_cls/_schema_var_equals_cls }} + {{else}} {{> components/schemas/schema_cls/_schema_string }} + {{/if}} {{else}} + {{#if isSimpleNull }} {{> components/schemas/schema_cls/_schema_var_equals_cls }} - {{/or}} + {{else}} +{{> components/schemas/schema_cls/_schema_anytype_or_multitype }} + {{/if}} + {{/eq}} {{/or}} {{/eq}} {{/eq}} diff --git a/src/test/java/org/openapijsonschematools/codegen/generators/DefaultGeneratorTest.java b/src/test/java/org/openapijsonschematools/codegen/generators/DefaultGeneratorTest.java index ce5c96c1260..a2d2a8dc5f1 100644 --- a/src/test/java/org/openapijsonschematools/codegen/generators/DefaultGeneratorTest.java +++ b/src/test/java/org/openapijsonschematools/codegen/generators/DefaultGeneratorTest.java @@ -66,6 +66,7 @@ import org.testng.annotations.Ignore; import org.testng.annotations.Test; +import java.math.BigDecimal; import java.util.Arrays; import java.util.Collections; import java.util.HashMap; @@ -2069,7 +2070,7 @@ public void testItemsPresent() { "#/components/schemas/" + modelName, "#/components/schemas/" + modelName ); - assertEquals(cm.items.maximum, "7"); + assertEquals(cm.items.maximum, new BigDecimal(7)); modelName = "ObjectWithValidationsInArrayPropItems"; sc = openAPI.getComponents().getSchemas().get(modelName); @@ -2079,7 +2080,7 @@ public void testItemsPresent() { "#/components/schemas/" + modelName ); CodegenKey ck = codegen.getKey("arrayProp", "misc"); - assertEquals(cm.properties.get(ck).items.maximum, "7"); + assertEquals(cm.properties.get(ck).items.maximum, new BigDecimal(7)); String path; Operation operation; @@ -2088,17 +2089,17 @@ public void testItemsPresent() { path = "/ref_array_with_validations_in_items/{items}"; operation = openAPI.getPaths().get(path).getPost(); co = codegen.fromOperation(operation, getOperationPath(path, "post"), null); - assertEquals(co.parameters.pathParameters.get(0).schema.refInfo.ref.items.maximum, "7"); // disabled because refed + assertEquals(co.parameters.pathParameters.get(0).schema.refInfo.ref.items.maximum, new BigDecimal(7)); CodegenKey applicationJson = codegen.getKey("application/json", "misc"); - assertEquals(co.requestBody.content.get(applicationJson).schema.refInfo.ref.items.maximum, "7"); // disabled because refed - assertEquals(co.responses.get("200").content.get(applicationJson).schema.refInfo.ref.items.maximum, "7"); // disabled because refed + assertEquals(co.requestBody.content.get(applicationJson).schema.refInfo.ref.items.maximum, new BigDecimal(7)); + assertEquals(co.responses.get("200").content.get(applicationJson).schema.refInfo.ref.items.maximum, new BigDecimal(7)); path = "/array_with_validations_in_items/{items}"; operation = openAPI.getPaths().get(path).getPost(); co = codegen.fromOperation(operation, getOperationPath(path, "post"), null); - assertEquals(co.parameters.pathParameters.get(0).schema.items.maximum, "7"); - assertEquals(co.requestBody.content.get(applicationJson).schema.items.maximum, "7"); - assertEquals(co.responses.get("200").content.get(applicationJson).schema.items.maximum, "7"); + assertEquals(co.parameters.pathParameters.get(0).schema.items.maximum, new BigDecimal(7)); + assertEquals(co.requestBody.content.get(applicationJson).schema.items.maximum, new BigDecimal(7)); + assertEquals(co.responses.get("200").content.get(applicationJson).schema.items.maximum, new BigDecimal(7)); } @Test @@ -3944,7 +3945,189 @@ public void testMapValueSchemaTypes() { assertEquals(schema.mapValueSchema.types, expectedTypes); } - + @Test + public void testExclusiveMinimum300() { + final OpenAPI openAPI = TestUtils.parseFlattenSpec("src/test/resources/3_0/exclusiveMinimum300.yaml"); + final DefaultGenerator codegen = new DefaultGenerator(); + codegen.setOpenAPI(openAPI); + String schemaPrefix = "#/components/schemas/"; + + String schemaName; + CodegenSchema schema; + + schemaName = "AnyTypeWithExclusiveMinimumTrue"; + schema = codegen.fromSchema( + codegen.openAPI.getComponents().getSchemas().get(schemaName), + schemaPrefix + schemaName, + schemaPrefix + schemaName); + assertEquals(schema.minimum, null); + assertEquals(schema.exclusiveMinimum, new BigDecimal(10)); + + schemaName = "NumberWithExclusiveMinimumTrue"; + schema = codegen.fromSchema( + codegen.openAPI.getComponents().getSchemas().get(schemaName), + schemaPrefix + schemaName, + schemaPrefix + schemaName); + assertEquals(schema.minimum, null); + assertEquals(schema.exclusiveMinimum, new BigDecimal(10)); + + schemaName = "AnyTypeWithExclusiveMinimumFalse"; + schema = codegen.fromSchema( + codegen.openAPI.getComponents().getSchemas().get(schemaName), + schemaPrefix + schemaName, + schemaPrefix + schemaName); + assertEquals(schema.minimum, new BigDecimal(10)); + assertEquals(schema.exclusiveMinimum, null); + + schemaName = "NumberWithExclusiveMinimumFalse"; + schema = codegen.fromSchema( + codegen.openAPI.getComponents().getSchemas().get(schemaName), + schemaPrefix + schemaName, + schemaPrefix + schemaName); + assertEquals(schema.minimum, new BigDecimal(10)); + assertEquals(schema.exclusiveMinimum, null); + } + + @Test + public void testExclusiveMinimum303() { + final OpenAPI openAPI = TestUtils.parseFlattenSpec("src/test/resources/3_0/exclusiveMinimum303.yaml"); + final DefaultGenerator codegen = new DefaultGenerator(); + codegen.setOpenAPI(openAPI); + String schemaPrefix = "#/components/schemas/"; + + String schemaName; + CodegenSchema schema; + + schemaName = "AnyTypeWithExclusiveMinimumTrue"; + schema = codegen.fromSchema( + codegen.openAPI.getComponents().getSchemas().get(schemaName), + schemaPrefix + schemaName, + schemaPrefix + schemaName); + assertEquals(schema.minimum, null); + assertEquals(schema.exclusiveMinimum, new BigDecimal(10)); + + schemaName = "NumberWithExclusiveMinimumTrue"; + schema = codegen.fromSchema( + codegen.openAPI.getComponents().getSchemas().get(schemaName), + schemaPrefix + schemaName, + schemaPrefix + schemaName); + assertEquals(schema.minimum, null); + assertEquals(schema.exclusiveMinimum, new BigDecimal(10)); + + schemaName = "AnyTypeWithExclusiveMinimumFalse"; + schema = codegen.fromSchema( + codegen.openAPI.getComponents().getSchemas().get(schemaName), + schemaPrefix + schemaName, + schemaPrefix + schemaName); + assertEquals(schema.minimum, new BigDecimal(10)); + assertEquals(schema.exclusiveMinimum, null); + + schemaName = "NumberWithExclusiveMinimumFalse"; + schema = codegen.fromSchema( + codegen.openAPI.getComponents().getSchemas().get(schemaName), + schemaPrefix + schemaName, + schemaPrefix + schemaName); + assertEquals(schema.minimum, new BigDecimal(10)); + assertEquals(schema.exclusiveMinimum, null); + } + + @Test + public void testExclusiveMinimum310() { + final OpenAPI openAPI = TestUtils.parseFlattenSpec("src/test/resources/3_0/exclusiveMinimum310.yaml"); + final DefaultGenerator codegen = new DefaultGenerator(); + codegen.setOpenAPI(openAPI); + String schemaPrefix = "#/components/schemas/"; + + String schemaName; + CodegenSchema schema; + + schemaName = "AnyTypeWithExclusiveMinimum"; + schema = codegen.fromSchema( + codegen.openAPI.getComponents().getSchemas().get(schemaName), + schemaPrefix + schemaName, + schemaPrefix + schemaName); + assertEquals(schema.minimum, new BigDecimal(10)); + assertEquals(schema.exclusiveMinimum, new BigDecimal(11)); + + schemaName = "NumberWithExclusiveMinimum"; + schema = codegen.fromSchema( + codegen.openAPI.getComponents().getSchemas().get(schemaName), + schemaPrefix + schemaName, + schemaPrefix + schemaName); + assertEquals(schema.minimum, new BigDecimal(10)); + assertEquals(schema.exclusiveMinimum, new BigDecimal(11)); + } + + @Test + public void testExclusiveMaximum300() { + final OpenAPI openAPI = TestUtils.parseFlattenSpec("src/test/resources/3_0/exclusiveMaximum300.yaml"); + final DefaultGenerator codegen = new DefaultGenerator(); + codegen.setOpenAPI(openAPI); + String schemaPrefix = "#/components/schemas/"; + + String schemaName; + CodegenSchema schema; + + schemaName = "AnyTypeWithExclusiveMaximumTrue"; + schema = codegen.fromSchema( + codegen.openAPI.getComponents().getSchemas().get(schemaName), + schemaPrefix + schemaName, + schemaPrefix + schemaName); + assertEquals(schema.maximum, null); + assertEquals(schema.exclusiveMaximum, new BigDecimal(10)); + + schemaName = "NumberWithExclusiveMaximumTrue"; + schema = codegen.fromSchema( + codegen.openAPI.getComponents().getSchemas().get(schemaName), + schemaPrefix + schemaName, + schemaPrefix + schemaName); + assertEquals(schema.maximum, null); + assertEquals(schema.exclusiveMaximum, new BigDecimal(10)); + + schemaName = "AnyTypeWithExclusiveMaximumFalse"; + schema = codegen.fromSchema( + codegen.openAPI.getComponents().getSchemas().get(schemaName), + schemaPrefix + schemaName, + schemaPrefix + schemaName); + assertEquals(schema.maximum, new BigDecimal(10)); + assertEquals(schema.exclusiveMaximum, null); + + schemaName = "NumberWithExclusiveMaximumFalse"; + schema = codegen.fromSchema( + codegen.openAPI.getComponents().getSchemas().get(schemaName), + schemaPrefix + schemaName, + schemaPrefix + schemaName); + assertEquals(schema.maximum, new BigDecimal(10)); + assertEquals(schema.exclusiveMaximum, null); + } + + @Test + public void testExclusiveMaximum310() { + final OpenAPI openAPI = TestUtils.parseFlattenSpec("src/test/resources/3_0/exclusiveMaximum310.yaml"); + final DefaultGenerator codegen = new DefaultGenerator(); + codegen.setOpenAPI(openAPI); + String schemaPrefix = "#/components/schemas/"; + + String schemaName; + CodegenSchema schema; + + schemaName = "AnyTypeWithExclusiveMaximum"; + schema = codegen.fromSchema( + codegen.openAPI.getComponents().getSchemas().get(schemaName), + schemaPrefix + schemaName, + schemaPrefix + schemaName); + assertEquals(schema.maximum, new BigDecimal(10)); + assertEquals(schema.exclusiveMaximum, new BigDecimal(11)); + + schemaName = "NumberWithExclusiveMaximum"; + schema = codegen.fromSchema( + codegen.openAPI.getComponents().getSchemas().get(schemaName), + schemaPrefix + schemaName, + schemaPrefix + schemaName); + assertEquals(schema.maximum, new BigDecimal(10)); + assertEquals(schema.exclusiveMaximum, new BigDecimal(11)); + } + public static class FromParameter { private CodegenParameter codegenParameter(String path) { final OpenAPI openAPI = TestUtils.parseFlattenSpec("src/test/resources/3_0/fromParameter.yaml"); diff --git a/src/test/resources/3_0/exclusiveMaximum300.yaml b/src/test/resources/3_0/exclusiveMaximum300.yaml new file mode 100644 index 00000000000..dfc22250f0a --- /dev/null +++ b/src/test/resources/3_0/exclusiveMaximum300.yaml @@ -0,0 +1,21 @@ +openapi: 3.0.0 +info: + title: exclusiveMaximum test + version: 1.0.0 +paths: {} +components: + schemas: + AnyTypeWithExclusiveMaximumTrue: + exclusiveMaximum: true + maximum: 10 + NumberWithExclusiveMaximumTrue: + type: number + exclusiveMaximum: true + maximum: 10 + AnyTypeWithExclusiveMaximumFalse: + exclusiveMaximum: false + maximum: 10 + NumberWithExclusiveMaximumFalse: + type: number + exclusiveMaximum: false + maximum: 10 \ No newline at end of file diff --git a/src/test/resources/3_0/exclusiveMaximum310.yaml b/src/test/resources/3_0/exclusiveMaximum310.yaml new file mode 100644 index 00000000000..8aecf2346e6 --- /dev/null +++ b/src/test/resources/3_0/exclusiveMaximum310.yaml @@ -0,0 +1,14 @@ +openapi: 3.1.0 +info: + title: exclusiveMaximum test + version: 1.0.0 +paths: {} +components: + schemas: + AnyTypeWithExclusiveMaximum: + exclusiveMaximum: 11 + maximum: 10 + NumberWithExclusiveMaximum: + type: number + exclusiveMaximum: 11 + maximum: 10 \ No newline at end of file diff --git a/src/test/resources/3_0/exclusiveMinimum300.yaml b/src/test/resources/3_0/exclusiveMinimum300.yaml new file mode 100644 index 00000000000..0782d1d0f64 --- /dev/null +++ b/src/test/resources/3_0/exclusiveMinimum300.yaml @@ -0,0 +1,21 @@ +openapi: 3.0.0 +info: + title: exclusiveMinimum test + version: 1.0.0 +paths: {} +components: + schemas: + AnyTypeWithExclusiveMinimumTrue: + exclusiveMinimum: true + minimum: 10 + NumberWithExclusiveMinimumTrue: + type: number + exclusiveMinimum: true + minimum: 10 + AnyTypeWithExclusiveMinimumFalse: + exclusiveMinimum: false + minimum: 10 + NumberWithExclusiveMinimumFalse: + type: number + exclusiveMinimum: false + minimum: 10 \ No newline at end of file diff --git a/src/test/resources/3_0/exclusiveMinimum303.yaml b/src/test/resources/3_0/exclusiveMinimum303.yaml new file mode 100644 index 00000000000..77d64d2f7cb --- /dev/null +++ b/src/test/resources/3_0/exclusiveMinimum303.yaml @@ -0,0 +1,21 @@ +openapi: 3.0.3 +info: + title: exclusiveMinimum test + version: 1.0.0 +paths: {} +components: + schemas: + AnyTypeWithExclusiveMinimumTrue: + exclusiveMinimum: true + minimum: 10 + NumberWithExclusiveMinimumTrue: + type: number + exclusiveMinimum: true + minimum: 10 + AnyTypeWithExclusiveMinimumFalse: + exclusiveMinimum: false + minimum: 10 + NumberWithExclusiveMinimumFalse: + type: number + exclusiveMinimum: false + minimum: 10 \ No newline at end of file diff --git a/src/test/resources/3_0/exclusiveMinimum310.yaml b/src/test/resources/3_0/exclusiveMinimum310.yaml new file mode 100644 index 00000000000..7ce56dec147 --- /dev/null +++ b/src/test/resources/3_0/exclusiveMinimum310.yaml @@ -0,0 +1,14 @@ +openapi: 3.1.0 +info: + title: exclusiveMinimum test + version: 1.0.0 +paths: {} +components: + schemas: + AnyTypeWithExclusiveMinimum: + exclusiveMinimum: 11 + minimum: 10 + NumberWithExclusiveMinimum: + type: number + exclusiveMinimum: 11 + minimum: 10 \ No newline at end of file diff --git a/src/test/resources/3_0/python/petstore_customized.yaml b/src/test/resources/3_0/python/petstore_customized.yaml index e90ce3f089e..da548edc0bc 100644 --- a/src/test/resources/3_0/python/petstore_customized.yaml +++ b/src/test/resources/3_0/python/petstore_customized.yaml @@ -3420,4 +3420,10 @@ components: title: id additionalProperties: false type: object - title: MyObjectDto \ No newline at end of file + title: MyObjectDto + NumberWithExclusiveMinMax: + type: number + minimum: 10 + exclusiveMinimum: true + maximum: 12 + exclusiveMaximum: true \ No newline at end of file