diff --git a/mopidy/utils/settings.py b/mopidy/utils/settings.py index 87e5952a..5760106b 100644 --- a/mopidy/utils/settings.py +++ b/mopidy/utils/settings.py @@ -143,6 +143,11 @@ def validate_settings(defaults, settings): 'SPOTIFY_LIB_CACHE': 'SPOTIFY_CACHE_PATH', } + list_of_one_or_more = [ + 'BACKENDS', + 'FRONTENDS', + ] + for setting, value in settings.iteritems(): if setting in changed: if changed[setting] is None: @@ -167,6 +172,10 @@ def validate_settings(defaults, settings): u'Deprecated setting, please set the value via the GStreamer ' u'bin in OUTPUT.') + elif setting in list_of_one_or_more: + if not value: + errors[setting] = u'Must contain at least one value.' + elif setting not in defaults: errors[setting] = u'Unknown setting.' suggestion = did_you_mean(setting, defaults) diff --git a/tests/utils/settings_test.py b/tests/utils/settings_test.py index a57ed729..c98527cd 100644 --- a/tests/utils/settings_test.py +++ b/tests/utils/settings_test.py @@ -9,6 +9,8 @@ from tests import unittest class ValidateSettingsTest(unittest.TestCase): def setUp(self): self.defaults = { + 'BACKENDS': ['a'], + 'FRONTENDS': ['a'], 'MPD_SERVER_HOSTNAME': '::', 'MPD_SERVER_PORT': 6600, 'SPOTIFY_BITRATE': 160, @@ -66,6 +68,18 @@ class ValidateSettingsTest(unittest.TestCase): 'SPOTIFY_USERNAME', None) self.assertEqual(None, not_secret) + def test_empty_frontends_list_returns_error(self): + result = setting_utils.validate_settings( + self.defaults, {'FRONTENDS': []}) + self.assertEqual( + result['FRONTENDS'], u'Must contain at least one value.') + + def test_empty_backends_list_returns_error(self): + result = setting_utils.validate_settings( + self.defaults, {'BACKENDS': []}) + self.assertEqual( + result['BACKENDS'], u'Must contain at least one value.') + class SettingsProxyTest(unittest.TestCase): def setUp(self):