import json import os import warnings from glob import glob import pytest import requests from jsonschema import FormatChecker from jsonschema.validators import Draft4Validator as validator versions = { '1.0': '1__0__3', '1.1': '1__1__4', } url_template = 'https://standard.open-contracting.org/schema/{}/release-package-schema.json' test_valid_argvalues = [] for minor_version, patch_version in versions.items(): schema = requests.get(url_template.format(patch_version)).json() filenames = glob(os.path.join('fictional-example', minor_version, '*.json')) assert len(filenames), '{} fixtures not found'.format(minor_version) test_valid_argvalues += [(filename, schema) for filename in filenames] def custom_warning_formatter(message, category, filename, lineno, line=None): return str(message).replace(os.getcwd() + os.sep, '') warnings.formatwarning = custom_warning_formatter @pytest.mark.parametrize('filename,schema', test_valid_argvalues) def test_valid(filename, schema): errors = 0 with open(filename) as f: data = json.load(f) for error in validator(schema, format_checker=FormatChecker()).iter_errors(data): errors += 1 warnings.warn(json.dumps(error.instance, indent=2, separators=(',', ': '))) warnings.warn('{} ({})\n'.format(error.message, '/'.join(error.absolute_schema_path))) assert errors == 0, '{} is invalid. See warnings below.'.format(filename)