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]])
Пример #3
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_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]),
            ])
Пример #5
0
    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"])
Пример #7
0
    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)
Пример #9
0
 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)
Пример #10
0
 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])
         ])
Пример #12
0
    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])
         ])
Пример #14
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])
Пример #16
0
 def test_validate_list_returns_unmodified_data_when_schema_is_empty(self):
     self.assertEqual(Schema._validate_list([], [1, 2, 3], []), [1, 2, 3])