def test_duplicate_model(mock_log, minimal_swagger_dict, pet_model_spec, use_models): minimal_swagger_dict['definitions']['Pet'] = pet_model_spec swagger_spec = Spec(minimal_swagger_dict, config={'use_models': use_models}) duplicate_message = 'Duplicate "Pet" model found at path [\'definitions\', \'Pet\']. ' \ 'Original "Pet" model at path [\'definitions\', \'Pet\']' raised_exception = None try: tag_models( minimal_swagger_dict['definitions'], 'Pet', ['definitions', 'Pet'], visited_models={'Pet': ['definitions', 'Pet']}, swagger_spec=swagger_spec, ) except ValueError as e: raised_exception = e if use_models: assert str(raised_exception) == duplicate_message assert not mock_log.warning.called else: assert raised_exception is None mock_log.warning.assert_called_once_with(duplicate_message)
def test_path_too_short(minimal_swagger_dict, pet_model_spec): minimal_swagger_dict['definitions']['Pet'] = pet_model_spec swagger_spec = Spec(minimal_swagger_dict) tag_models(minimal_swagger_dict, 'definitions', ['definitions'], visited_models={}, swagger_spec=swagger_spec) assert MODEL_MARKER not in pet_model_spec
def test_tags_model(minimal_swagger_dict, pet_model_spec): minimal_swagger_dict['definitions']['Pet'] = pet_model_spec swagger_spec = Spec(minimal_swagger_dict) tag_models(minimal_swagger_dict['definitions'], 'Pet', ['definitions', 'Pet'], visited_models={}, swagger_spec=swagger_spec) assert pet_model_spec[MODEL_MARKER] == 'Pet'
def test_skip_already_tagged_models(minimal_swagger_dict, pet_model_spec): pet_model_spec[MODEL_MARKER] = 'SpecialPet' minimal_swagger_dict['definitions']['Pet'] = pet_model_spec swagger_spec = Spec(minimal_swagger_dict) tag_models(minimal_swagger_dict['definitions'], 'Pet', ['definitions', 'Pet'], visited_models={}, swagger_spec=swagger_spec) assert pet_model_spec[MODEL_MARKER] == 'SpecialPet'
def test_duplicate_model(minimal_swagger_dict, pet_model_spec): minimal_swagger_dict['definitions']['Pet'] = pet_model_spec swagger_spec = Spec(minimal_swagger_dict) with pytest.raises(ValueError) as excinfo: tag_models(minimal_swagger_dict['definitions'], 'Pet', ['definitions', 'Pet'], visited_models={'Pet': ['definitions', 'Pet']}, swagger_spec=swagger_spec) assert 'Duplicate' in str(excinfo.value)
def test_type_missing(minimal_swagger_dict, pet_model_spec): del pet_model_spec['type'] minimal_swagger_dict['definitions']['Pet'] = pet_model_spec swagger_spec = Spec(minimal_swagger_dict) tag_models(minimal_swagger_dict['definitions'], 'Pet', ['definitions', 'Pet'], visited_models={}, swagger_spec=swagger_spec) assert MODEL_MARKER not in pet_model_spec
def jsonref_petstore_dict(): my_dir = os.path.abspath(os.path.dirname(__file__)) fpath = os.path.join(my_dir, '../../test-data/2.0/petstore/swagger.json') with open(fpath) as f: petstore = json.loads(f.read()) tag_models(petstore) fix_malformed_model_refs(petstore) unrefed_petstore = jsonref.JsonRef.replace_refs(petstore) validator20.validate_spec(unrefed_petstore) return unrefed_petstore
def test_path_too_short(minimal_swagger_dict, pet_model_spec): minimal_swagger_dict['definitions']['Pet'] = pet_model_spec swagger_spec = Spec(minimal_swagger_dict) tag_models( minimal_swagger_dict, 'definitions', ['definitions'], visited_models={}, swagger_spec=swagger_spec) assert MODEL_MARKER not in pet_model_spec
def test_tags_model(minimal_swagger_dict, pet_model_spec): minimal_swagger_dict['definitions']['Pet'] = pet_model_spec swagger_spec = Spec(minimal_swagger_dict) tag_models( minimal_swagger_dict['definitions'], 'Pet', ['definitions', 'Pet'], visited_models={}, swagger_spec=swagger_spec) assert pet_model_spec[MODEL_MARKER] == 'Pet'
def test_skip_already_tagged_models(minimal_swagger_dict, pet_model_spec): pet_model_spec[MODEL_MARKER] = 'SpecialPet' minimal_swagger_dict['definitions']['Pet'] = pet_model_spec swagger_spec = Spec(minimal_swagger_dict) tag_models( minimal_swagger_dict['definitions'], 'Pet', ['definitions', 'Pet'], visited_models={}, swagger_spec=swagger_spec) assert pet_model_spec[MODEL_MARKER] == 'SpecialPet'
def test_duplicate_model(minimal_swagger_dict, pet_model_spec): minimal_swagger_dict['definitions']['Pet'] = pet_model_spec swagger_spec = Spec(minimal_swagger_dict) with pytest.raises(ValueError) as excinfo: tag_models( minimal_swagger_dict['definitions'], 'Pet', ['definitions', 'Pet'], visited_models={'Pet': ['definitions', 'Pet']}, swagger_spec=swagger_spec) assert 'Duplicate' in str(excinfo.value)
def test_type_missing(minimal_swagger_dict, pet_model_spec): del pet_model_spec['type'] minimal_swagger_dict['definitions']['Pet'] = pet_model_spec swagger_spec = Spec(minimal_swagger_dict) tag_models( minimal_swagger_dict['definitions'], 'Pet', ['definitions', 'Pet'], visited_models={}, swagger_spec=swagger_spec) assert MODEL_MARKER not in pet_model_spec
def test_model_not_object(minimal_swagger_dict): minimal_swagger_dict['definitions']['Pet'] = { 'type': 'array', 'items': { 'type': 'string' }, } swagger_spec = Spec(minimal_swagger_dict) tag_models(minimal_swagger_dict['definitions'], 'Pet', ['definitions', 'Pet'], visited_models={}, swagger_spec=swagger_spec) assert MODEL_MARKER not in minimal_swagger_dict['definitions']['Pet']
def test_model_not_object(minimal_swagger_dict): minimal_swagger_dict['definitions']['Pet'] = { 'type': 'array', 'items': { 'type': 'string' }, } swagger_spec = Spec(minimal_swagger_dict) tag_models( minimal_swagger_dict['definitions'], 'Pet', ['definitions', 'Pet'], visited_models={}, swagger_spec=swagger_spec) assert MODEL_MARKER not in minimal_swagger_dict['definitions']['Pet']
def from_dict(cls, spec_dict, origin_url=None, http_client=None, config=None): """ Build a :class:`Spec` from Swagger API Specificiation :param spec_dict: swagger spec in json-like dict form. :param origin_url: the url used to retrieve the spec, if any :type origin_url: str :param config: Configuration dict. See CONFIG_DEFAULTS. """ tag_models(spec_dict) fix_malformed_model_refs(spec_dict) spec_dict = jsonref.JsonRef.replace_refs(spec_dict) replace_jsonref_proxies(spec_dict) spec = cls(spec_dict, origin_url, http_client, config) spec.build() return spec