def test_children_have_their_errors_dicts_built(self): e1, e2 = ( exceptions.ValidationError("1", validator="foo", path=["bar", 0]), exceptions.ValidationError("2", validator="quux", path=["bar", 0]), ) tree = exceptions.ErrorTree([e1, e2]) self.assertEqual(tree["bar"][0].errors, {"foo": e1, "quux": e2})
def test_it_creates_a_child_tree_for_each_nested_path(self): errors = [ exceptions.ValidationError("a bar message", path=["bar"]), exceptions.ValidationError("a bar -> 0 message", path=["bar", 0]), ] tree = exceptions.ErrorTree(errors) self.assertIn(0, tree["bar"]) self.assertNotIn(1, tree["bar"])
def test_it_knows_how_many_total_errors_it_contains(self): # FIXME: https://github.com/Julian/jsonschema/issues/442 errors = [ exceptions.ValidationError("Something", validator=i) for i in range(8) ] tree = exceptions.ErrorTree(errors) self.assertEqual(tree.total_errors, 8)
def test_it_knows_how_many_total_errors_it_contains(self): # FIXME: #442 errors = [ exceptions.ValidationError("Something", validator=i) for i in range(8) ] tree = exceptions.ErrorTree(errors) self.assertEqual(tree.total_errors, 8)
def test_if_its_in_the_tree_anyhow_it_does_not_raise_an_error(self): """ If a validator is dumb (like :validator:`required` in draft 3) and refers to a path that isn't in the instance, the tree still properly returns a subtree for that path. """ error = exceptions.ValidationError( "a message", validator="foo", instance={}, path=["foo"], ) tree = exceptions.ErrorTree([error]) self.assertIsInstance(tree["foo"], exceptions.ErrorTree)
def test_multiple_errors_with_instance(self): e1, e2 = ( exceptions.ValidationError("1", validator="foo", path=["bar", "bar2"], instance="i1"), exceptions.ValidationError("2", validator="quux", path=["foobar", 2], instance="i2"), ) exceptions.ErrorTree([e1, e2])
def test_regression_multiple_errors_with_instance(self): e1, e2 = ( exceptions.ValidationError("1", validator="foo", path=["bar", "bar2"], instance="i1"), exceptions.ValidationError("2", validator="quux", path=["foobar", 2], instance="i2"), ) # Will raise an exception if the bug is still there. exceptions.ErrorTree([e1, e2])
def test_repr(self): e1, e2 = ( exceptions.ValidationError( "1", validator="foo", path=["bar", "bar2"], instance="i1"), exceptions.ValidationError( "2", validator="quux", path=["foobar", 2], instance="i2"), ) tree = exceptions.ErrorTree([e1, e2]) self.assertEqual(repr(tree), "<ErrorTree (2 total errors)>")
def test_it_does_not_contain_subtrees_that_are_not_in_the_instance(self): error = exceptions.ValidationError("123", validator="foo", instance=[]) tree = exceptions.ErrorTree([error]) with self.assertRaises(IndexError): tree[0]
def test_validators_that_failed_appear_in_errors_dict(self): error = exceptions.ValidationError("a message", validator="foo") tree = exceptions.ErrorTree([error]) self.assertEqual(tree.errors, {"foo": error})
def test_it_does_not_contain_an_item_if_the_item_had_no_error(self): errors = [exceptions.ValidationError("a message", path=["bar"])] tree = exceptions.ErrorTree(errors) self.assertNotIn("foo", tree)
def test_it_knows_how_many_total_errors_it_contains(self): errors = [mock.MagicMock() for _ in range(8)] tree = exceptions.ErrorTree(errors) self.assertEqual(tree.total_errors, 8)