def test_retries_failing_properties_while_making_progress(self, mocker): from openapi_python_client.parser.properties import Schemas, build_schemas from openapi_python_client.schema import Schema components = { "first": Schema.construct(), "second": Schema.construct() } update_schemas_with_data = mocker.patch( f"{MODULE_NAME}.update_schemas_with_data", side_effect=[PropertyError(), Schemas(), PropertyError()]) parse_reference_path = mocker.patch( f"{MODULE_NAME}.parse_reference_path") config = Config() result = build_schemas(components=components, schemas=Schemas(), config=config) parse_reference_path.assert_has_calls([ call("#/components/schemas/first"), call("#/components/schemas/second"), call("#/components/schemas/first"), ]) assert update_schemas_with_data.call_count == 3 assert result.errors == [PropertyError()]
def test_records_bad_uris_and_keeps_going(self, mocker): from openapi_python_client.parser.properties import Schemas, build_schemas from openapi_python_client.schema import Schema components = { "first": Schema.construct(), "second": Schema.construct() } update_schemas_with_data = mocker.patch( f"{MODULE_NAME}.update_schemas_with_data") parse_reference_path = mocker.patch( f"{MODULE_NAME}.parse_reference_path", side_effect=[PropertyError(detail="some details"), "a_path"]) config = Config() result = build_schemas(components=components, schemas=Schemas(), config=config) parse_reference_path.assert_has_calls([ call("#/components/schemas/first"), call("#/components/schemas/second"), ]) update_schemas_with_data.assert_called_once_with( ref_path="a_path", config=config, data=components["second"], schemas=Schemas(errors=[ PropertyError(detail="some details", data=components["first"]) ]), ) assert result == update_schemas_with_data.return_value
def test_skips_references_and_keeps_going(self, mocker): from openapi_python_client.parser.properties import Schemas, build_schemas from openapi_python_client.schema import Reference, Schema components = { "a_ref": Reference.construct(), "a_schema": Schema.construct() } update_schemas_with_data = mocker.patch( f"{MODULE_NAME}.update_schemas_with_data") parse_reference_path = mocker.patch( f"{MODULE_NAME}.parse_reference_path") config = Config() result = build_schemas(components=components, schemas=Schemas(), config=config) # Should not even try to parse a path for the Reference parse_reference_path.assert_called_once_with( "#/components/schemas/a_schema") update_schemas_with_data.assert_called_once_with( ref_path=parse_reference_path.return_value, config=config, data=components["a_schema"], schemas=Schemas(errors=[ PropertyError(detail="Reference schemas are not supported.", data=components["a_ref"]) ]), ) assert result == update_schemas_with_data.return_value
def test_property_from_data_int_enum(self, enum_property_factory): from openapi_python_client.parser.properties import Class, Schemas, property_from_data from openapi_python_client.schema import Schema name = "my_enum" required = True nullable = False data = Schema.construct(title="anEnum", enum=[1, 2, 3], nullable=nullable, default=3) existing = enum_property_factory() schemas = Schemas(classes_by_name={"AnEnum": existing}) prop, new_schemas = property_from_data( name=name, required=required, data=data, schemas=schemas, parent_name="parent", config=Config() ) assert prop == enum_property_factory( name=name, required=required, nullable=nullable, values={"VALUE_1": 1, "VALUE_2": 2, "VALUE_3": 3}, class_info=Class(name="ParentAnEnum", module_name="parent_an_enum"), value_type=int, default="ParentAnEnum.VALUE_3", ) assert schemas != new_schemas, "Provided Schemas was mutated" assert new_schemas.classes_by_name == { "AnEnum": existing, "ParentAnEnum": prop, }
def test_property_from_data_str_enum_with_null(self, enum_property_factory): from openapi_python_client.parser.properties import Class, Schemas, property_from_data from openapi_python_client.schema import Schema existing = enum_property_factory() data = Schema(title="AnEnum", enum=["A", "B", "C", None], nullable=False, default="B") name = "my_enum" required = True schemas = Schemas(classes_by_name={"AnEnum": existing}) prop, new_schemas = property_from_data( name=name, required=required, data=data, schemas=schemas, parent_name="parent", config=Config() ) # None / null is removed from enum, and property is now nullable assert prop == enum_property_factory( name=name, required=required, nullable=True, values={"A": "A", "B": "B", "C": "C"}, class_info=Class(name="ParentAnEnum", module_name="parent_an_enum"), value_type=str, default="ParentAnEnum.B", ) assert prop.nullable is True assert schemas != new_schemas, "Provided Schemas was mutated" assert new_schemas.classes_by_name == { "AnEnum": existing, "ParentAnEnum": prop, }
def test_property_from_data_str_enum(self, mocker): from openapi_python_client.parser.properties import Class, EnumProperty from openapi_python_client.schema import Schema data = Schema(title="AnEnum", enum=["A", "B", "C"], nullable=False, default="B") name = "my_enum" required = True from openapi_python_client.parser.properties import Schemas, property_from_data schemas = Schemas(classes_by_name={"AnEnum": mocker.MagicMock()}) prop, new_schemas = property_from_data( name=name, required=required, data=data, schemas=schemas, parent_name="parent", config=Config() ) assert prop == EnumProperty( name="my_enum", required=True, nullable=False, values={"A": "A", "B": "B", "C": "C"}, class_info=Class(name="ParentAnEnum", module_name="parent_an_enum"), value_type=str, default="ParentAnEnum.B", ) assert schemas != new_schemas, "Provided Schemas was mutated" assert new_schemas.classes_by_name == { "AnEnum": schemas.classes_by_name["AnEnum"], "ParentAnEnum": prop, }
def test_property_from_data_int_enum(self, mocker): from openapi_python_client.parser.properties import EnumProperty, Reference from openapi_python_client.schema import Schema data = Schema.construct(title="anEnum", enum=[1, 2, 3], nullable=False, default=3) name = "my_enum" required = True from openapi_python_client.parser.properties import Schemas, property_from_data schemas = Schemas(enums={"AnEnum": mocker.MagicMock()}) prop, new_schemas = property_from_data( name=name, required=required, data=data, schemas=schemas, parent_name="parent" ) assert prop == EnumProperty( name="my_enum", required=True, nullable=False, values={"VALUE_1": 1, "VALUE_2": 2, "VALUE_3": 3}, reference=Reference(class_name="ParentAnEnum", module_name="parent_an_enum"), value_type=int, default="ParentAnEnum.VALUE_3", ) assert schemas != new_schemas, "Provided Schemas was mutated" assert new_schemas.enums == { "AnEnum": schemas.enums["AnEnum"], "ParentAnEnum": prop, }
def test_property_from_data_null_enum(self, enum_property_factory, none_property_factory): from openapi_python_client.parser.properties import Class, Schemas, property_from_data from openapi_python_client.schema import Schema data = Schema(title="AnEnumWithOnlyNull", enum=[None], nullable=False, default=None) name = "my_enum" required = True schemas = Schemas() prop, new_schemas = property_from_data( name=name, required=required, data=data, schemas=schemas, parent_name="parent", config=Config() ) assert prop == none_property_factory(name="my_enum", required=required, nullable=False, default="None")