def test_happy_path(self, model_property_factory, string_property_factory, date_time_property_factory): from openapi_python_client.parser.properties import Class, Schemas, build_model_property name = "prop" nullable = False required = True data = oai.Schema.construct( required=["req"], title="MyModel", properties={ "req": oai.Schema.construct(type="string"), "opt": oai.Schema(type="string", format="date-time"), }, description="A class called MyModel", nullable=nullable, ) schemas = Schemas(classes_by_reference={"OtherModel": None}, classes_by_name={"OtherModel": None}) model, new_schemas = build_model_property(data=data, name=name, schemas=schemas, required=required, parent_name="parent", config=Config()) assert new_schemas != schemas assert new_schemas.classes_by_name == { "OtherModel": None, "ParentMyModel": model, } assert new_schemas.classes_by_reference == { "OtherModel": None, } assert model == model_property_factory( name=name, required=required, nullable=nullable, class_info=Class(name="ParentMyModel", module_name="parent_my_model"), required_properties=[ string_property_factory(name="req", required=True) ], optional_properties=[ date_time_property_factory(name="opt", required=False) ], description=data.description, relative_imports={ "from dateutil.parser import isoparse", "from typing import cast", "import datetime", "from ..types import UNSET, Unset", "from typing import Union", }, additional_properties=True, )
def test_model_name_conflict(self): from openapi_python_client.parser.properties import Schemas, build_model_property data = oai.Schema.construct() schemas = Schemas(classes_by_name={"OtherModel": None}) err, new_schemas = build_model_property( data=data, name="OtherModel", schemas=schemas, required=True, parent_name=None, config=Config() ) assert new_schemas == schemas assert err == PropertyError(detail='Attempted to generate duplicate models with name "OtherModel"', data=data)
def test_additional_schemas(self, additional_properties_schema, expected_additional_properties): from openapi_python_client.parser.properties import Schemas, build_model_property data = oai.Schema.construct( additionalProperties=additional_properties_schema, ) model, _ = build_model_property( data=data, name="prop", schemas=Schemas(), required=True, parent_name="parent", config=MagicMock() ) assert model.additional_properties == expected_additional_properties
def test_model_bad_properties(self): from openapi_python_client.parser.properties import Schemas, build_model_property data = oai.Schema(properties={ "bad": oai.Reference.construct(ref="#/components/schema/NotExist"), }, ) result = build_model_property(data=data, name="prop", schemas=Schemas(), required=True, parent_name="parent", config=Config())[0] assert isinstance(result, PropertyError)
def test_bad_props_return_error(self): from openapi_python_client.parser.properties import Schemas, build_model_property data = oai.Schema( properties={ "bad": oai.Schema(type="not_real"), }, ) schemas = Schemas() err, new_schemas = build_model_property( data=data, name="prop", schemas=schemas, required=True, parent_name=None, config=MagicMock() ) assert new_schemas == schemas assert err == PropertyError(detail="unknown type not_real", data=oai.Schema(type="not_real"))
def test_build_model_property(additional_properties_schema, expected_additional_properties): from openapi_python_client.parser.properties import Schemas, build_model_property data = oai.Schema.construct( required=["req"], title="MyModel", properties={ "req": oai.Schema.construct(type="string"), "opt": oai.Schema(type="string", format="date-time"), }, description="A class called MyModel", nullable=False, additionalProperties=additional_properties_schema, ) schemas = Schemas(models={"OtherModel": None}) model, new_schemas = build_model_property( data=data, name="prop", schemas=schemas, required=True, parent_name="parent", ) assert new_schemas != schemas assert new_schemas.models == { "OtherModel": None, "ParentMyModel": model, } assert model == ModelProperty( name="prop", required=True, nullable=False, default=None, reference=Reference(class_name="ParentMyModel", module_name="parent_my_model"), required_properties=[StringProperty(name="req", required=True, nullable=False, default=None)], optional_properties=[DateTimeProperty(name="opt", required=False, nullable=False, default=None)], description=data.description, relative_imports={ "from dateutil.parser import isoparse", "from typing import cast", "import datetime", "from ..types import UNSET, Unset", "from typing import Union", }, additional_properties=expected_additional_properties, )
def test_model_bad_additional_properties(self): from openapi_python_client.parser.properties import Schemas, build_model_property additional_properties = oai.Schema( type="object", properties={ "bad": oai.Reference(ref="#/components/schemas/not_exist"), }, ) data = oai.Schema(additionalProperties=additional_properties) result = build_model_property(data=data, name="prop", schemas=Schemas(), required=True, parent_name="parent", config=Config())[0] assert isinstance(result, PropertyError)
def test_bad_additional_props_return_error(self): from openapi_python_client.parser.properties import Config, Schemas, build_model_property additional_properties = oai.Schema( type="object", properties={ "bad": oai.Schema(type="not_real"), }, ) data = oai.Schema(additionalProperties=additional_properties) schemas = Schemas() err, new_schemas = build_model_property( data=data, name="prop", schemas=schemas, required=True, parent_name=None, config=Config() ) assert new_schemas == schemas assert err == PropertyError(detail="unknown type not_real", data=oai.Schema(type="not_real"))
def test_build_model_property_bad_prop(): from openapi_python_client.parser.properties import Schemas, build_model_property data = oai.Schema( properties={ "bad": oai.Schema(type="not_real"), }, ) schemas = Schemas(models={"OtherModel": None}) err, new_schemas = build_model_property( data=data, name="prop", schemas=schemas, required=True, parent_name=None, ) assert new_schemas == schemas assert err == PropertyError(detail="unknown type not_real", data=oai.Schema(type="not_real"))
def test_build_model_property_conflict(): from openapi_python_client.parser.properties import Schemas, build_model_property data = oai.Schema.construct( required=["req"], properties={ "req": oai.Schema.construct(type="string"), "opt": oai.Schema(type="string", format="date-time"), }, nullable=False, ) schemas = Schemas(models={"OtherModel": None}) err, new_schemas = build_model_property( data=data, name="OtherModel", schemas=schemas, required=True, parent_name=None, ) assert new_schemas == schemas assert err == PropertyError(detail='Attempted to generate duplicate models with name "OtherModel"', data=data)