예제 #1
0
def test_get_vocabulary(uri, is_known):
    if is_known:
        vocabulary = Catalogue.get_vocabulary(URI(uri))
        assert vocabulary.uri == uri
    else:
        with pytest.raises(CatalogueError):
            Catalogue.get_vocabulary(URI(uri))
예제 #2
0
def test_get_schema(example_schema_uri, ptr, is_schema):
    uri = example_schema_uri.copy(fragment=ptr)
    if is_schema:
        subschema = Catalogue.get_schema(uri)
        assert JSONPointer(ptr).evaluate(example_schema) == subschema
    else:
        with pytest.raises(CatalogueError):
            Catalogue.get_schema(uri)
예제 #3
0
def setup_validators():
    Catalogue.add_format_validators({
        "ipv4": ipv4_validator,
        "ipv6": ipv6_validator,
        "json-pointer": jsonpointer_validator,
    })
    yield
    Catalogue._format_validators.clear()
예제 #4
0
def test_add_directory_invalid_dir(setup_tmpdir):
    tmpdir_path, subdir_name, jsonfile_name = setup_tmpdir
    # base_dir is a file
    with pytest.raises(CatalogueError):
        Catalogue.add_directory(
            URI('http://example.com/'),
            pathlib.Path(tmpdir_path) / subdir_name / jsonfile_name)
    # base_dir does not exist
    with pytest.raises(CatalogueError):
        Catalogue.add_directory(URI('http://example.com/'),
                                pathlib.Path(tmpdir_path) / 'foo')
예제 #5
0
def test_add_directory_and_load_json(base_uri, setup_tmpdir):
    tmpdir_path, subdir_name, jsonfile_name = setup_tmpdir
    Catalogue.add_directory(URI(base_uri), pathlib.Path(tmpdir_path))
    json_doc = Catalogue.load_json(
        URI(f'{base_uri}{subdir_name}/{jsonfile_name}'))
    assert json_doc == json_example
    # incorrect base URI
    with pytest.raises(CatalogueError):
        Catalogue.load_json(
            URI(f'http://example.net/{subdir_name}/{jsonfile_name}'))
    # incorrect file name
    with pytest.raises(CatalogueError):
        Catalogue.load_json(URI(f'{base_uri}{subdir_name}/baz'))
예제 #6
0
def test_load_json_invalid_uri(uri):
    with pytest.raises(CatalogueError):
        Catalogue.load_json(URI(uri))
예제 #7
0
def test_add_directory_invalid_uri(base_uri, setup_tmpdir):
    tmpdir_path, subdir_name, jsonfile_name = setup_tmpdir
    with pytest.raises(CatalogueError):
        Catalogue.add_directory(URI(base_uri), pathlib.Path(tmpdir_path))
예제 #8
0
def test_keyword_dependency_resolution_2019_09(value: list):
    metaschema = Catalogue.get_schema(metaschema_uri_2019_09)
    kwclasses = {
        key: kwclass
        for key in value if (kwclass := metaschema.kwclasses.get(key))
    }
예제 #9
0
import pathlib

import pytest

from jschon import Catalogue, JSON, JSONSchema, URI, JSONEvaluator
from jschon.utils import json_loadf
from tests import metaschema_uri_2019_09, metaschema_uri_2020_12

testsuite_dir = pathlib.Path(__file__).parent / 'JSON-Schema-Test-Suite'

Catalogue.add_directory(
    base_uri=URI('http://localhost:1234/'),
    base_dir=testsuite_dir / 'remotes',
)


def pytest_generate_tests(metafunc):
    argnames = ('metaschema_uri', 'schema', 'data', 'valid')
    argvalues = []
    testids = []

    only_version = metafunc.config.getoption("testsuite_version")
    include_optionals = metafunc.config.getoption("testsuite_optionals")
    include_formats = metafunc.config.getoption("testsuite_formats")

    base_dir = testsuite_dir / 'tests'
    version_dirs = {
        '2019-09': (metaschema_uri_2019_09, base_dir / 'draft2019-09'),
        '2020-12': (metaschema_uri_2020_12, base_dir / 'draft2020-12'),
    }