Skip to content

Commit

Permalink
Optimizing test cases and add invalid '--base-uri' test
Browse files Browse the repository at this point in the history
  • Loading branch information
willson-chen committed Sep 28, 2020
1 parent a0ec5e9 commit 1bfbb90
Showing 1 changed file with 45 additions and 26 deletions.
71 changes: 45 additions & 26 deletions jsonschema/tests/test_cli.py
Original file line number Diff line number Diff line change
Expand Up @@ -10,7 +10,11 @@
import tempfile

from jsonschema import Draft4Validator, Draft7Validator, __version__, cli
from jsonschema.exceptions import SchemaError, ValidationError
from jsonschema.exceptions import (
RefResolutionError,
SchemaError,
ValidationError,
)
from jsonschema.tests._helpers import captured_output
from jsonschema.validators import _LATEST_VERSION, validate

Expand Down Expand Up @@ -685,72 +689,87 @@ def test_successful_validation_of_just_the_schema_pretty_output(self):
)

def test_successful_validate_with_specifying_base_uri_absolute_path(self):
absolute_path = os.getcwd()
try:
schema_file = tempfile.NamedTemporaryFile(
mode='w+',
prefix='schema',
suffix='.json',
dir=absolute_path,
delete=False
)
self.addCleanup(os.remove, schema_file.name)
schema = """
{"type": "object", "properties": {"KEY1":
{"$ref": %s%s#definitions/schemas"}},
"definitions": {"schemas": {"type": "string"}}}
""" % ("\"", os.path.basename(schema_file.name))
schema_file.write(schema)
{"$ref": "%s#definitions/num"}
""" % (os.path.basename(schema_file.name))
tmp_schema = """{"definitions": {"num": {"type": "integer"}}}"""
schema_file.write(tmp_schema)
finally:
schema_file.close()

file_prefix = "file:///{}/" if "nt" == os.name else "file://{}/"
absolute_path = file_prefix.format(absolute_path)
absolute_dir_path = file_prefix.format(
os.path.dirname(schema_file.name)
)
self.assertOutputs(
files=dict(some_schema=schema, some_instance='{"KEY1": "1"}'),
files=dict(some_schema=schema, some_instance='1'),
argv=[
"-i", "some_instance",
"--base-uri", absolute_path,
"--base-uri", absolute_dir_path,
"some_schema",
],
stdout="",
stderr="",
)

def test_failure_validate_with_specifying_base_uri_absolute_path(self):
absolute_path = os.getcwd()
try:
schema_file = tempfile.NamedTemporaryFile(
mode='w+',
prefix='schema',
suffix='.json',
dir=absolute_path,
delete=False
)
self.addCleanup(os.remove, schema_file.name)
schema = """
{"type": "object", "properties": {"KEY1":
{"$ref": %s%s#definitions/schemas"}},
"definitions": {"schemas": {"type": "string"}}}
""" % ("\"", os.path.basename(schema_file.name))
schema_file.write(schema)
{"$ref": "%s#definitions/num"}
""" % (os.path.basename(schema_file.name))
tmp_schema = """{"definitions": {"num": {"type": "integer"}}}"""
schema_file.write(tmp_schema)
finally:
schema_file.close()

file_prefix = "file:///{}/" if "nt" == os.name else "file://{}/"
absolute_path = file_prefix.format(absolute_path)
absolute_dir_path = file_prefix.format(
os.path.dirname(schema_file.name)
)
self.assertOutputs(
files=dict(some_schema=schema, some_instance='{"KEY1": 1}'),
files=dict(some_schema=schema, some_instance='"1"'),
argv=[
"-i", "some_instance",
"--base-uri", absolute_path,
"--base-uri", absolute_dir_path,
"some_schema",
],
exit_code=1,
stdout="",
stderr="1: 1 is not of type 'string'\n",
stderr="1: '1' is not of type 'integer'\n",
)

def test_validate_with_specifying_invalid_base_uri(self):
schema = """
{"$ref": "foo.json#definitions/num"}
"""
instance = '1'

with self.assertRaises(RefResolutionError) as e:
self.assertOutputs(
files=dict(
some_schema=schema,
some_instance=instance,
),
argv=[
"-i", "some_instance",
"--base-uri", ".",
"some_schema",
],
)
error = str(e.exception)
self.assertEqual(error, "unknown url type: 'foo.json'")

def test_it_validates_using_the_latest_validator_when_unspecified(self):
# There isn't a better way now I can think of to ensure that the
# latest version was used, given that the call to validator_for
Expand Down

0 comments on commit 1bfbb90

Please sign in to comment.