def test_validate_list_calls_validate_for_schema_values_as_necessary(self): def mock_return(schema, data, path): if not isinstance(data, schema): raise Invalid("") return data mocked = Mock(side_effect=mock_return) with patch.object(Schema, "_validate", mocked): Schema._validate_list([int, unicode], [], []) self.assertFalse(mocked.called) mocked.reset_mock() Schema._validate_list([int, unicode], ["a"], []) mocked.assert_has_calls([ call(int, "a", [0]), call(unicode, "a", [0]) ]) mocked.reset_mock() Schema._validate_list([int, unicode], [1], []) mocked.assert_called_once_with(int, 1, [0]) mocked.reset_mock() with self.assertRaises(InvalidGroup): Schema._validate_list([int, unicode], [None], []) mocked.assert_has_calls([ call(int, None, [0]), call(unicode, None, [0]) ])
def test_validate_list_raises_invalid_group_on_invalid_data(self): def mock_return(schema, data, path): if not isinstance(data, schema): raise Invalid("err", data, path) return data mocked = Mock(side_effect=mock_return) with patch.object(Schema, "_validate", mocked): with self.assertRaises(InvalidGroup) as cm: schema = [unicode, int] data = [1, "a", 1.2, "b", 2, None] Schema._validate_list(schema, data, ["a", 2]) ex = cm.exception self.assertEqual( map(str, ex.errors), ["err @ data[a][2][2]", "err @ data[a][2][5]"]) self.assertEqual([e.data for e in ex.errors], [1.2, None]) self.assertEqual( ex.data, [1, "a", ex.errors[0], "b", 2, ex.errors[1]])
def test_validate_list_raises_invalid_group_on_invalid_data(self): def mock_return(schema, data, path): if not isinstance(data, schema): raise Invalid("err", data, path) return data mocked = Mock(side_effect=mock_return) with patch.object(Schema, "_validate", mocked): with self.assertRaises(InvalidGroup) as cm: schema = [unicode, int] data = [1, "a", 1.2, "b", 2, None] Schema._validate_list(schema, data, ["a", 2]) ex = cm.exception self.assertEqual(map(str, ex.errors), ["err @ data[a][2][2]", "err @ data[a][2][5]"]) self.assertEqual([e.data for e in ex.errors], [1.2, None]) self.assertEqual(ex.data, [1, "a", ex.errors[0], "b", 2, ex.errors[1]])
def test_validate_list_calls_validate_for_each_schema_data_combo(self): def mock_return(schema, data, path): if not isinstance(data, schema): raise Invalid("") return data mocked = Mock(side_effect=mock_return) with patch.object(Schema, "_validate", mocked): Schema._validate_list([int, unicode], ["a", "b"], []) mocked.assert_has_calls([ call(int, "a", [0]), call(unicode, "a", [0]), call(int, "b", [1]), call(unicode, "b", [1]) ]) mocked.reset_mock() with self.assertRaises(InvalidGroup): Schema._validate_list([int, unicode], ["a", 1, None], []) mocked.assert_has_calls([ call(int, "a", [0]), call(unicode, "a", [0]), call(int, 1, [1]), call(int, None, [2]), call(unicode, None, [2]) ]) mocked.reset_mock() Schema._validate_list([int, unicode], [1, 2], []) mocked.assert_has_calls([ call(int, 1, [0]), call(int, 2, [1]), ])
def test_validate_list_returns_values_from_validation(self): def mock_return(schema, data, path): if not isinstance(data, schema): raise Invalid("", data, path) if schema == unicode: return "{0}r".format(data) return data + 1 mocked = Mock(side_effect=mock_return) with patch.object(Schema, "_validate", mocked): schema = [unicode, int] data = ["z", 1, "y", 2, "x", 3, "w"] val = Schema._validate_list(schema, data, []) self.assertEqual(val, ["zr", 2, "yr", 3, "xr", 4, "wr"])
def test_validate_list_raises_invalid_if_not_given_a_list(self): with self.assertRaises(Invalid) as cm: Schema._validate_list([], {}, []) self.assertEqual(str(cm.exception), "Expected a list") self.assertEqual(cm.exception.data, {}) with self.assertRaises(Invalid) as cm: Schema._validate_list([], Undefined, [1]) self.assertEqual(str(cm.exception), "Expected a list @ data[1]") self.assertEqual(cm.exception.data, Undefined) with self.assertRaises(Invalid) as cm: Schema._validate_list([], None, ["a", "b"]) self.assertEqual(str(cm.exception), "Expected a list @ data[a][b]") self.assertEqual(cm.exception.data, None)
def test_validate_list_calls_validate_for_each_data_entry(self): mocked = Mock(return_value=1) with patch.object(Schema, "_validate", mocked): Schema._validate_list([int], [], []) self.assertFalse(mocked.called) mocked.reset_mock() Schema._validate_list([int], [1], []) mocked.assert_called_once_with(int, 1, [0]) mocked.reset_mock() Schema._validate_list([int], [1, 2, 3], []) mocked.assert_has_calls( [call(int, 1, [0]), call(int, 2, [1]), call(int, 3, [2])])
def test_validate_list_calls_validate_for_each_data_entry(self): mocked = Mock(return_value=1) with patch.object(Schema, "_validate", mocked): Schema._validate_list([int], [], []) self.assertFalse(mocked.called) mocked.reset_mock() Schema._validate_list([int], [1], []) mocked.assert_called_once_with(int, 1, [0]) mocked.reset_mock() Schema._validate_list([int], [1, 2, 3], []) mocked.assert_has_calls([ call(int, 1, [0]), call(int, 2, [1]), call(int, 3, [2]) ])
def test_validate_list_calls_validate_for_schema_values_as_necessary(self): def mock_return(schema, data, path): if not isinstance(data, schema): raise Invalid("") return data mocked = Mock(side_effect=mock_return) with patch.object(Schema, "_validate", mocked): Schema._validate_list([int, unicode], [], []) self.assertFalse(mocked.called) mocked.reset_mock() Schema._validate_list([int, unicode], ["a"], []) mocked.assert_has_calls( [call(int, "a", [0]), call(unicode, "a", [0])]) mocked.reset_mock() Schema._validate_list([int, unicode], [1], []) mocked.assert_called_once_with(int, 1, [0]) mocked.reset_mock() with self.assertRaises(InvalidGroup): Schema._validate_list([int, unicode], [None], []) mocked.assert_has_calls( [call(int, None, [0]), call(unicode, None, [0])])
def test_validate_list_appends_the_entry_index_to_the_current_path(self): mocked = Mock(return_value=1) with patch.object(Schema, "_validate", mocked): data = ["a", "b", "c"] Schema._validate_list([unicode], data, []) mocked.assert_has_calls([ call(unicode, "a", [0]), call(unicode, "b", [1]), call(unicode, "c", [2]) ]) mocked.reset_mock() Schema._validate_list([unicode], data, ["a"]) mocked.assert_has_calls([ call(unicode, "a", ["a", 0]), call(unicode, "b", ["a", 1]), call(unicode, "c", ["a", 2]) ]) mocked.reset_mock() Schema._validate_list([unicode], data, ["b", "c", 2]) mocked.assert_has_calls([ call(unicode, "a", ["b", "c", 2, 0]), call(unicode, "b", ["b", "c", 2, 1]), call(unicode, "c", ["b", "c", 2, 2]) ])
def test_validate_list_returns_unmodified_data_when_schema_is_empty(self): self.assertEqual( Schema._validate_list([], [1, 2, 3], []), [1, 2, 3])
def test_validate_list_returns_unmodified_data_when_schema_is_empty(self): self.assertEqual(Schema._validate_list([], [1, 2, 3], []), [1, 2, 3])