def test_model_is_instance_inherits_from(cat_swagger_spec, pet_type, pet_spec, cat_type, cat_kwargs): cat = cat_type(**cat_kwargs) new_pet_type = create_model_type(cat_swagger_spec, 'Pet', pet_spec) assert pet_type._isinstance(cat) assert isinstance(cat, cat_type) assert isinstance(cat, pet_type) assert isinstance(cat, new_pet_type)
def test_raise_error_if_duplicate_models_are_identified( minimal_swagger_dict, pet_model_spec): model_name = 'Pet' minimal_swagger_dict['definitions'][model_name] = pet_model_spec swagger_spec = Spec(minimal_swagger_dict) models = { model_name: create_model_type( swagger_spec=swagger_spec, model_name=model_name, model_spec={}, ) } path = ['definitions', model_name, 'x-model'], with pytest.raises(ValueError) as excinfo: collect_models( minimal_swagger_dict['definitions'][model_name], 'x-model', path, models=models, swagger_spec=swagger_spec, ) expected_lines = [ 'Identified duplicated model: model_name "{mod_name}", path: {path}.'. format(mod_name=model_name, path=path), 'Known model spec: "{}"', 'New model spec: "{pet_model_spec}"'.format( pet_model_spec=pet_model_spec), 'TIP: enforce different model naming by using {MODEL_MARKER}'.format( MODEL_MARKER='x-model'), ] assert all(l in str(excinfo.value) for l in expected_lines)
def test_create_model_type_properly_extracts_model_name(deref_value, expected_inherits): swagger_spec = mock.Mock( name='swagger-spec', deref=lambda schema: deref_value if is_ref(schema) else schema, ) model_type = create_model_type( swagger_spec=swagger_spec, model_name='Dog', model_spec={ 'type': 'object', 'title': 'Dog', 'allOf': [ { '$ref': '#/definitions/GenericPet' }, { 'properties': { 'birth_date': { 'type': 'string', 'format': 'date', }, }, 'required': ['birth_date'], }, ], } ) assert model_type._inherits_from == expected_inherits
def test_create_model_type_lazy_docstring(mock_create_docstring): # NOTE: some sort of weird interaction with pytest, pytest-mock and mock # made using the 'mocker' fixture here a no-go. definitions_spec = definitions_spec_fixture() pet_spec = pet_spec_fixture(definitions_spec) pet_type = create_model_type('Pet', pet_spec) assert not mock_create_docstring.called assert pet_type.__doc__ == mock_create_docstring.return_value mock_create_docstring.assert_called_once_with(pet_spec)
def test_pet_model(pet_spec): Pet = create_model_type('Pet', pet_spec) expected = set(['id', 'category', 'name', 'photoUrls', 'tags']) pet = Pet(id=1, name='Darwin') assert set(dir(pet)) == expected assert pet == Pet(id=1, name='Darwin') assert pet != Pet(id=2, name='Fido') assert "Pet(category=None, id=1, name='Darwin', photoUrls=None, tags=None)" \ == repr(pet)
def test_create_model_type_lazy_docstring(mock_create_docstring, empty_swagger_spec): # NOTE: some sort of weird interaction with pytest, pytest-mock and mock # made using the 'mocker' fixture here a no-go. definitions_spec = definitions_spec_fixture() pet_spec = pet_spec_fixture(definitions_spec) pet_type = create_model_type(empty_swagger_spec, 'Pet', pet_spec) assert mock_create_docstring.call_count == 0 assert pet_type.__doc__ == mock_create_docstring.return_value assert mock_create_docstring.call_count == 1
def test_no_arg_constructor(pet_spec): Pet = create_model_type('Pet', pet_spec) attr_names = ( # '__doc__', <-- will trigger docstring generation so skip for now '__eq__', '__init__', '__repr__', '__dir__', ) for attr_name in attr_names: assert hasattr(Pet, attr_name)
def user_type(user_spec): """ :rtype: User """ return create_model_type('User', user_spec)
def cat_type(cat_swagger_spec, cat_spec): return create_model_type(cat_swagger_spec, 'Cat', cat_spec)
def tag_model(definitions_spec): tag_spec = definitions_spec['Tag'] return create_model_type(Mock(spec=Spec), 'Tag', tag_spec)
def pet_type(cat_swagger_spec, pet_spec): return create_model_type(cat_swagger_spec, 'Pet', pet_spec)
def user_type(user_spec): """ :rtype: User """ return create_model_type(Mock(spec=Spec), 'User', user_spec)
def user_type(mock_spec, user_spec): """ :rtype: User """ return create_model_type(mock_spec, 'User', user_spec)
def tag_model(mock_spec, definitions_spec): tag_spec = definitions_spec['Tag'] return create_model_type(mock_spec, 'Tag', tag_spec)
def test_create_model_type_lazy_docstring(mock_create_docstring, empty_swagger_spec, pet_spec): pet_type = create_model_type(empty_swagger_spec, 'Pet', pet_spec) assert mock_create_docstring.call_count == 0 assert pet_type.__doc__ == mock_create_docstring.return_value assert mock_create_docstring.call_count == 1
def tag_model(definitions_spec): tag_spec = definitions_spec['Tag'] return create_model_type('Tag', tag_spec)