From 52ff35ab3f6f2e74d13ce78db2ba9bfe1de08e01 Mon Sep 17 00:00:00 2001 From: Ryan Petrello Date: Tue, 7 Feb 2017 14:24:56 -0500 Subject: [PATCH] fix a CTinT bug in static config parsing see: #5223 --- awx/conf/registry.py | 2 +- awx/conf/tests/unit/test_settings.py | 39 +++++++++++++++++++++++++--- 2 files changed, 37 insertions(+), 4 deletions(-) diff --git a/awx/conf/registry.py b/awx/conf/registry.py index 9ca05ccda7..faf210fbb0 100644 --- a/awx/conf/registry.py +++ b/awx/conf/registry.py @@ -143,7 +143,7 @@ class SettingsRegistry(object): field_instance.default = original_field_instance.to_representation(getattr(self.settings, setting)) except: logger.warning('Unable to retrieve default value for user setting "%s".', setting, exc_info=True) - elif not field_instance.read_only or field_instance.default is empty or not field_instance.default: + elif not field_instance.read_only or field_instance.default is empty or field_instance.defined_in_file: try: field_instance.default = original_field_instance.to_representation(self.settings._awx_conf_settings._get_default(setting)) except AttributeError: diff --git a/awx/conf/tests/unit/test_settings.py b/awx/conf/tests/unit/test_settings.py index c42e527137..5cd5d0e012 100644 --- a/awx/conf/tests/unit/test_settings.py +++ b/awx/conf/tests/unit/test_settings.py @@ -61,13 +61,31 @@ def test_unregistered_setting(settings): assert settings.cache.get('DEBUG') is None -@pytest.mark.defined_in_file(AWX_SOME_SETTING='DEFAULT') def test_read_only_setting(settings): + settings.registry.register( + 'AWX_READ_ONLY', + field_class=fields.CharField, + category=_('System'), + category_slug='system', + default='NO-EDITS', + read_only=True + ) + assert settings.AWX_READ_ONLY == 'NO-EDITS' + assert len(settings.registry.get_registered_settings(read_only=False)) == 0 + settings = settings.registry.get_registered_settings(read_only=True) + assert settings == ['AWX_READ_ONLY'] + + +@pytest.mark.defined_in_file(AWX_SOME_SETTING='DEFAULT') +@pytest.mark.parametrize('read_only', [True, False]) +def test_setting_defined_in_file(settings, read_only): + kwargs = {'read_only': True} if read_only else {} settings.registry.register( 'AWX_SOME_SETTING', field_class=fields.CharField, category=_('System'), - category_slug='system' + category_slug='system', + **kwargs ) assert settings.AWX_SOME_SETTING == 'DEFAULT' assert len(settings.registry.get_registered_settings(read_only=False)) == 0 @@ -76,7 +94,7 @@ def test_read_only_setting(settings): @pytest.mark.defined_in_file(AWX_SOME_SETTING='DEFAULT') -def test_read_only_setting_with_empty_default(settings): +def test_setting_defined_in_file_with_empty_default(settings): settings.registry.register( 'AWX_SOME_SETTING', field_class=fields.CharField, @@ -90,6 +108,21 @@ def test_read_only_setting_with_empty_default(settings): assert settings == ['AWX_SOME_SETTING'] +@pytest.mark.defined_in_file(AWX_SOME_SETTING='DEFAULT') +def test_setting_defined_in_file_with_specific_default(settings): + settings.registry.register( + 'AWX_SOME_SETTING', + field_class=fields.CharField, + category=_('System'), + category_slug='system', + default=123 + ) + assert settings.AWX_SOME_SETTING == 'DEFAULT' + assert len(settings.registry.get_registered_settings(read_only=False)) == 0 + settings = settings.registry.get_registered_settings(read_only=True) + assert settings == ['AWX_SOME_SETTING'] + + @pytest.mark.defined_in_file(AWX_SOME_SETTING='DEFAULT') def test_read_only_defaults_are_cached(settings): "read-only settings are stored in the cache"