Update settings serializer to allow empty/blank values.

This commit is contained in:
Chris Church
2016-02-11 18:11:32 -05:00
parent a8fec62095
commit dc298daeb4
4 changed files with 73 additions and 32 deletions

View File

@@ -35,6 +35,13 @@ TEST_TOWER_SETTINGS_MANIFEST = {
"default": ["A", "Simple", "List"],
"type": "list",
"category": "test"
},
"TEST_SETTING_JSON": {
"name": "A JSON Field",
"description": "A JSON Field",
"default": {"key": "value", "otherkey": ["list", "of", "things"]},
"type": "json",
"category": "test"
}
}
@@ -46,7 +53,7 @@ class SettingsTest(BaseTest):
self.setup_instances()
self.setup_users()
def get_settings(self, expected_count=4):
def get_settings(self, expected_count=5):
result = self.get(reverse('api:settings_list'), expect=200)
self.assertEqual(result['count'], expected_count)
return result['results']
@@ -74,21 +81,29 @@ class SettingsTest(BaseTest):
with self.current_user(self.super_django_user):
self.get_settings(expected_count=len(TEST_TOWER_SETTINGS_MANIFEST))
def test_set_and_reset_settings(self):
def set_and_reset_setting(self, key, values, expected_values=()):
settings_reset = reverse('api:settings_reset')
setting = self.get_individual_setting(key)
self.assertEqual(setting['value'], TEST_TOWER_SETTINGS_MANIFEST[key]['default'])
for n, value in enumerate(values):
self.set_setting(key, value)
setting = self.get_individual_setting(key)
if len(expected_values) > n:
self.assertEqual(setting['value'], expected_values[n])
else:
self.assertEqual(setting['value'], value)
self.post(settings_reset, data={"key": key}, expect=204)
setting = self.get_individual_setting(key)
self.assertEqual(setting['value'], TEST_TOWER_SETTINGS_MANIFEST[key]['default'])
def test_set_and_reset_settings(self):
with self.current_user(self.super_django_user):
# Set and reset a single setting
setting_int = self.get_individual_setting('TEST_SETTING_INT')
self.assertEqual(setting_int['value'], TEST_TOWER_SETTINGS_MANIFEST['TEST_SETTING_INT']['default'])
self.set_setting('TEST_SETTING_INT', 2)
setting_int = self.get_individual_setting('TEST_SETTING_INT')
self.assertEqual(setting_int['value'], 2)
self.set_setting('TEST_SETTING_INT', 3)
setting_int = self.get_individual_setting('TEST_SETTING_INT')
self.assertEqual(setting_int['value'], 3)
self.post(settings_reset, data={"key": 'TEST_SETTING_INT'}, expect=204)
setting_int = self.get_individual_setting('TEST_SETTING_INT')
self.assertEqual(setting_int['value'], TEST_TOWER_SETTINGS_MANIFEST['TEST_SETTING_INT']['default'])
self.set_and_reset_setting('TEST_SETTING_INT', (2, 0))
self.set_and_reset_setting('TEST_SETTING_STRING', ('blah', '', u'\u2620'))
self.set_and_reset_setting('TEST_SETTING_BOOL', (True, False))
# List values are always saved as strings.
self.set_and_reset_setting('TEST_SETTING_LIST', ([4, 5, 6], [], [2]), (['4', '5', '6'], [], ['2']))
self.set_and_reset_setting('TEST_SETTING_JSON', ({"k": "v"}, {}, [], [7, 8], 'str'))
def test_clear_all_settings(self):
settings_list = reverse('api:settings_list')
@@ -97,6 +112,7 @@ class SettingsTest(BaseTest):
self.set_setting('TEST_SETTING_STRING', "foo")
self.set_setting('TEST_SETTING_BOOL', False)
self.set_setting('TEST_SETTING_LIST', [1,2,3])
self.set_setting('TEST_SETTING_JSON', '{"key": "new value"}')
all_settings = self.get_settings()
for setting_entry in all_settings:
self.assertNotEqual(setting_entry['value'],