Skip to content
This repository was archived by the owner on Dec 25, 2024. It is now read-only.

Adds json schema test cases for 11 added keywords #241

Merged
merged 34 commits into from
Sep 28, 2023
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
34 commits
Select commit Hold shift + click to select a range
ca496c2
Adds const components and examples
spacether Sep 19, 2023
d3e2993
Excludes components that throw errors in swagger-parser
spacether Sep 20, 2023
c62c24d
Excludes more test cases
spacether Sep 21, 2023
aad9cca
Excludes 2 more test cases
spacether Sep 21, 2023
7bb035f
Samples regen
spacether Sep 21, 2023
90caf1a
removes error files
spacether Sep 21, 2023
e00573f
Removes failing test cases
spacether Sep 21, 2023
d7c6790
Samples regen
spacether Sep 21, 2023
bdf3d1f
Adds contains samples in test spec
spacether Sep 21, 2023
6c7117d
Adds contains test cases
spacether Sep 21, 2023
6190cc1
Samples regen
spacether Sep 21, 2023
d2a975e
Adds dependentRequired python tests
spacether Sep 22, 2023
4c9be8f
Removes test that does not pass
spacether Sep 23, 2023
d682918
Adds test for dependentSchemas
spacether Sep 23, 2023
4e30694
Adds maxContains tests
spacether Sep 24, 2023
dba8328
Adds minContains test cases
spacether Sep 25, 2023
8ccd754
Turns on patternProperties tests
spacether Sep 25, 2023
2684dfe
Moves additionalProperties evaluation to the end so keywords can be v…
spacether Sep 26, 2023
5f0da6c
patternProperties tests added, turns off broken addProps test
spacether Sep 26, 2023
e7a38be
Adds prefixItems tests
spacether Sep 26, 2023
7e05763
Adds propertyNames tests
spacether Sep 26, 2023
d8d61ba
Adds unevaluatedItems test cases to test spec
spacether Sep 26, 2023
48dc3f9
Excludes some of the unevaluatedItems tests begause of swagger parser…
spacether Sep 27, 2023
dc66914
Adds unevaluatedItems tests
spacether Sep 27, 2023
8388a40
Skips 6 test cases
spacether Sep 27, 2023
9657a48
Disables 6 more test schemas
spacether Sep 27, 2023
9ee5e62
Disables 5 more test cases
spacether Sep 27, 2023
8f894d8
Disables 4 test cases
spacether Sep 27, 2023
78ce8a9
Disables 5 more tests
spacether Sep 28, 2023
3769b4c
Disables 5 more broken tests
spacether Sep 28, 2023
70ef8f7
Adds unevaluatedProperties tests
spacether Sep 28, 2023
41b48e6
All tests passing
spacether Sep 28, 2023
ccc77d2
Turns on tests that were turned off because of 303 not supporting typ…
spacether Sep 28, 2023
e085421
Samples regen
spacether Sep 28, 2023
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
The table of contents is too big for display.
Diff view
Diff view
  •  
  •  
  •  
2 changes: 1 addition & 1 deletion README.md
Original file line number Diff line number Diff line change
Expand Up @@ -132,7 +132,7 @@ mvn -Pstatic-analysis clean install

#### OpenAPI JSON Schema Generator CLI Docker Image

The OpenAPI JSON Schema Generator image acts as a standalone executable. It can be used as an alternative to installing via homebrew, or for developers who are unable to install Java or upgrade the installed version.
The docker image acts as a standalone executable. It can be used as an alternative to installing via homebrew, or for developers who are unable to install Java or upgrade the installed version.

To generate code with this image, you'll need to mount a local location as a volume.

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -145,8 +145,8 @@ class AdditionalpropertiesShouldNotLookInApplicators(
Do not edit the class manually.
"""
# any type
additional_properties: typing.Type[AdditionalProperties] = dataclasses.field(default_factory=lambda: AdditionalProperties) # type: ignore
all_of: AllOf = dataclasses.field(default_factory=lambda: schemas.tuple_to_instance(AllOf)) # type: ignore
additional_properties: typing.Type[AdditionalProperties] = dataclasses.field(default_factory=lambda: AdditionalProperties) # type: ignore
type_to_output_cls: typing.Mapping[
typing.Type,
typing.Type
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -99,6 +99,14 @@ def _validate(
validation_metadata,
path_to_schemas
)
validated_pattern_properties: typing.Optional[PathToSchemasType] = None
if 'pattern_properties' in vars(cls_schema):
validated_pattern_properties = _get_validated_pattern_properties(
arg,
vars(cls_schema)['pattern_properties'],
cls,
validation_metadata
)
prefix_items_length = 0
if 'prefix_items' in vars(cls_schema):
prefix_items_length = len(vars(cls_schema)['prefix_items'])
Expand All @@ -113,6 +121,8 @@ def _validate(
elif keyword in {'types'}:
format: typing.Optional[str] = vars(cls_schema).get('format', None)
used_val = (val, format)
elif keyword in {'pattern_properties', 'additional_properties'}:
used_val = (val, validated_pattern_properties)
else:
used_val = val
validator = json_schema_keyword_to_validator[keyword]
Expand Down Expand Up @@ -737,19 +747,25 @@ def validate_properties(

def validate_additional_properties(
arg: typing.Any,
additional_properties_cls: typing.Type[SchemaValidator],
additional_properties_cls_val_pprops: typing.Tuple[
typing.Type[SchemaValidator],
typing.Optional[PathToSchemasType]
],
cls: typing.Type,
validation_metadata: ValidationMetadata,
) -> typing.Optional[PathToSchemasType]:
if not isinstance(arg, immutabledict):
return None
schema = _get_class(additional_properties_cls)
schema = _get_class(additional_properties_cls_val_pprops[0])
path_to_schemas: PathToSchemasType = {}
cls_schema = cls()
properties = cls_schema.properties if hasattr(cls_schema, 'properties') else {}
present_additional_properties = {k: v for k, v, in arg.items() if k not in properties}
validated_pattern_properties = additional_properties_cls_val_pprops[1]
for property_name, value in present_additional_properties.items():
path_to_item = validation_metadata.path_to_item + (property_name,)
if validated_pattern_properties and path_to_item in validated_pattern_properties:
continue
arg_validation_metadata = ValidationMetadata(
path_to_item=path_to_item,
configuration=validation_metadata.configuration,
Expand Down Expand Up @@ -1148,7 +1164,7 @@ def validate_property_names(
return None


def validate_pattern_properties(
def _get_validated_pattern_properties(
arg: typing.Any,
pattern_properties: typing.Mapping[PatternInfo, typing.Type[SchemaValidator]],
cls: typing.Type,
Expand Down Expand Up @@ -1178,6 +1194,21 @@ def validate_pattern_properties(
return path_to_schemas


def validate_pattern_properties(
arg: typing.Any,
pattern_properties_validation_results: typing.Tuple[
typing.Mapping[PatternInfo, typing.Type[SchemaValidator]],
typing.Optional[PathToSchemasType]
],
cls: typing.Type,
validation_metadata: ValidationMetadata,
) -> typing.Optional[PathToSchemasType]:
if not isinstance(arg, immutabledict):
return None
validation_results = pattern_properties_validation_results[1]
return validation_results


def validate_prefix_items(
arg: typing.Any,
prefix_items: typing.Tuple[typing.Type[SchemaValidator], ...],
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -99,6 +99,14 @@ def _validate(
validation_metadata,
path_to_schemas
)
validated_pattern_properties: typing.Optional[PathToSchemasType] = None
if 'pattern_properties' in vars(cls_schema):
validated_pattern_properties = _get_validated_pattern_properties(
arg,
vars(cls_schema)['pattern_properties'],
cls,
validation_metadata
)
prefix_items_length = 0
if 'prefix_items' in vars(cls_schema):
prefix_items_length = len(vars(cls_schema)['prefix_items'])
Expand All @@ -113,6 +121,8 @@ def _validate(
elif keyword in {'types'}:
format: typing.Optional[str] = vars(cls_schema).get('format', None)
used_val = (val, format)
elif keyword in {'pattern_properties', 'additional_properties'}:
used_val = (val, validated_pattern_properties)
else:
used_val = val
validator = json_schema_keyword_to_validator[keyword]
Expand Down Expand Up @@ -737,19 +747,25 @@ def validate_properties(

def validate_additional_properties(
arg: typing.Any,
additional_properties_cls: typing.Type[SchemaValidator],
additional_properties_cls_val_pprops: typing.Tuple[
typing.Type[SchemaValidator],
typing.Optional[PathToSchemasType]
],
cls: typing.Type,
validation_metadata: ValidationMetadata,
) -> typing.Optional[PathToSchemasType]:
if not isinstance(arg, immutabledict):
return None
schema = _get_class(additional_properties_cls)
schema = _get_class(additional_properties_cls_val_pprops[0])
path_to_schemas: PathToSchemasType = {}
cls_schema = cls()
properties = cls_schema.properties if hasattr(cls_schema, 'properties') else {}
present_additional_properties = {k: v for k, v, in arg.items() if k not in properties}
validated_pattern_properties = additional_properties_cls_val_pprops[1]
for property_name, value in present_additional_properties.items():
path_to_item = validation_metadata.path_to_item + (property_name,)
if validated_pattern_properties and path_to_item in validated_pattern_properties:
continue
arg_validation_metadata = ValidationMetadata(
path_to_item=path_to_item,
configuration=validation_metadata.configuration,
Expand Down Expand Up @@ -1148,7 +1164,7 @@ def validate_property_names(
return None


def validate_pattern_properties(
def _get_validated_pattern_properties(
arg: typing.Any,
pattern_properties: typing.Mapping[PatternInfo, typing.Type[SchemaValidator]],
cls: typing.Type,
Expand Down Expand Up @@ -1178,6 +1194,21 @@ def validate_pattern_properties(
return path_to_schemas


def validate_pattern_properties(
arg: typing.Any,
pattern_properties_validation_results: typing.Tuple[
typing.Mapping[PatternInfo, typing.Type[SchemaValidator]],
typing.Optional[PathToSchemasType]
],
cls: typing.Type,
validation_metadata: ValidationMetadata,
) -> typing.Optional[PathToSchemasType]:
if not isinstance(arg, immutabledict):
return None
validation_results = pattern_properties_validation_results[1]
return validation_results


def validate_prefix_items(
arg: typing.Any,
prefix_items: typing.Tuple[typing.Type[SchemaValidator], ...],
Expand Down
Loading