config: Add basic validate tests
This commit is contained in:
parent
c5f8e1da19
commit
067cc4c112
@ -103,23 +103,8 @@ def validate(raw_config, schemas, extensions=None):
|
|||||||
for extension in extensions or []:
|
for extension in extensions or []:
|
||||||
sections_and_schemas.append(
|
sections_and_schemas.append(
|
||||||
(extension.ext_name, extension.get_config_schema()))
|
(extension.ext_name, extension.get_config_schema()))
|
||||||
return _validate(raw_config, sections_and_schemas)
|
|
||||||
|
|
||||||
|
config, errors = _validate(raw_config, sections_and_schemas)
|
||||||
# TODO: replace validate() with this version of API.
|
|
||||||
def _validate(raw_config, schemas):
|
|
||||||
# Get validated config
|
|
||||||
config = {}
|
|
||||||
errors = {}
|
|
||||||
for name, schema in schemas:
|
|
||||||
if name not in raw_config:
|
|
||||||
errors[name] = {name: 'section not found'}
|
|
||||||
try:
|
|
||||||
items = raw_config[name].items()
|
|
||||||
config[name] = schema.convert(items)
|
|
||||||
# TODO: convert to ConfigSchemaError
|
|
||||||
except exceptions.ConfigError as error:
|
|
||||||
errors[name] = error
|
|
||||||
|
|
||||||
if errors:
|
if errors:
|
||||||
# TODO: raise error instead.
|
# TODO: raise error instead.
|
||||||
@ -133,6 +118,24 @@ def _validate(raw_config, schemas):
|
|||||||
return config
|
return config
|
||||||
|
|
||||||
|
|
||||||
|
# TODO: replace validate() with this version of API.
|
||||||
|
def _validate(raw_config, schemas):
|
||||||
|
# Get validated config
|
||||||
|
config = {}
|
||||||
|
errors = []
|
||||||
|
for name, schema in schemas:
|
||||||
|
try:
|
||||||
|
items = raw_config[name].items()
|
||||||
|
config[name] = schema.convert(items)
|
||||||
|
except KeyError:
|
||||||
|
errors.append('%s: section not found.' % name)
|
||||||
|
except exceptions.ConfigError as error:
|
||||||
|
for key in error:
|
||||||
|
errors.append('%s/%s: %s' % (name, key, error[key]))
|
||||||
|
# TODO: raise errors instead of return
|
||||||
|
return config, errors
|
||||||
|
|
||||||
|
|
||||||
def parse_override(override):
|
def parse_override(override):
|
||||||
"""Parse section/key=value override."""
|
"""Parse section/key=value override."""
|
||||||
section, remainder = override.split('/', 1)
|
section, remainder = override.split('/', 1)
|
||||||
|
|||||||
@ -1,6 +1,8 @@
|
|||||||
from __future__ import unicode_literals
|
from __future__ import unicode_literals
|
||||||
|
|
||||||
from mopidy import config
|
import mock
|
||||||
|
|
||||||
|
from mopidy import config, exceptions
|
||||||
|
|
||||||
from tests import unittest, path_to_data_dir
|
from tests import unittest, path_to_data_dir
|
||||||
|
|
||||||
@ -49,6 +51,42 @@ class LoadConfigTest(unittest.TestCase):
|
|||||||
self.assertEqual(expected, result)
|
self.assertEqual(expected, result)
|
||||||
|
|
||||||
|
|
||||||
|
class ValidateTest(unittest.TestCase):
|
||||||
|
def test_empty_config_no_schemas(self):
|
||||||
|
conf, errors = config._validate({}, [])
|
||||||
|
self.assertEqual({}, conf)
|
||||||
|
self.assertEqual([], errors)
|
||||||
|
|
||||||
|
def test_config_no_schemas(self):
|
||||||
|
raw_config = {'foo': {'bar': 'baz'}}
|
||||||
|
conf, errors = config._validate(raw_config, [])
|
||||||
|
self.assertEqual({}, conf)
|
||||||
|
self.assertEqual([], errors)
|
||||||
|
|
||||||
|
def test_empty_config_single_schema(self):
|
||||||
|
conf, errors = config._validate({}, [('foo', mock.Mock())])
|
||||||
|
self.assertEqual({}, conf)
|
||||||
|
self.assertEqual(['foo: section not found.'], errors)
|
||||||
|
|
||||||
|
def test_config_single_schema(self):
|
||||||
|
raw_config = {'foo': {'bar': 'baz'}}
|
||||||
|
schema = mock.Mock()
|
||||||
|
schema.convert.return_value = {'baz': 'bar'}
|
||||||
|
conf, errors = config._validate(raw_config, [('foo', schema)])
|
||||||
|
self.assertEqual({'foo': {'baz': 'bar'}}, conf)
|
||||||
|
self.assertEqual([], errors)
|
||||||
|
|
||||||
|
def test_config_single_schema_config_error(self):
|
||||||
|
raw_config = {'foo': {'bar': 'baz'}}
|
||||||
|
schema = mock.Mock()
|
||||||
|
schema.convert.side_effect = exceptions.ConfigError({'bar': 'bad'})
|
||||||
|
conf, errors = config._validate(raw_config, [('foo', schema)])
|
||||||
|
self.assertEqual(['foo/bar: bad'], errors)
|
||||||
|
self.assertEqual({}, conf)
|
||||||
|
|
||||||
|
# TODO: add more tests
|
||||||
|
|
||||||
|
|
||||||
class ParseOverrideTest(unittest.TestCase):
|
class ParseOverrideTest(unittest.TestCase):
|
||||||
def test_valid_override(self):
|
def test_valid_override(self):
|
||||||
expected = ('section', 'key', 'value')
|
expected = ('section', 'key', 'value')
|
||||||
|
|||||||
Loading…
Reference in New Issue
Block a user