# HG changeset patch # User Konstantin Veretennicov # Date 1462463866 -7200 # Node ID 83c34fbb2139375d94b1c84d8bc23bc3b8634efc # Parent 106259896c7c62cdc468950f73304a498d3811dd tests: illustrate current behavior of list-valued settings diff -r 106259896c7c -r 83c34fbb2139 kallithea/tests/models/test_settings.py --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/kallithea/tests/models/test_settings.py Thu May 05 17:57:46 2016 +0200 @@ -0,0 +1,49 @@ +from kallithea.model.meta import Session +from kallithea.model.db import Setting + + +name = 'spam-setting-name' + +def test_passing_list_setting_value_results_in_string_valued_setting(): + assert Setting.get_by_name(name) is None + setting = Setting.create_or_update(name, ['spam', 'eggs']) + Session().add(setting) + Session().flush() + try: + assert Setting.get_by_name(name) is not None + # Quirk: list value is stringified. + assert Setting.get_by_name(name).app_settings_value \ + == "['spam', 'eggs']" + assert Setting.get_by_name(name).app_settings_type == 'unicode' + finally: + Session().delete(setting) + Session().flush() + +def test_list_valued_setting_creation_requires_manual_value_formatting(): + assert Setting.get_by_name(name) is None + # Quirk: need manual formatting of list setting value. + setting = Setting.create_or_update(name, 'spam,eggs', type='list') + Session().add(setting) + Session().flush() + try: + assert setting.app_settings_value == ['spam', 'eggs'] + finally: + Session().delete(setting) + Session().flush() + +def test_list_valued_setting_update(): + assert Setting.get_by_name(name) is None + setting = Setting.create_or_update(name, 'spam', type='list') + Session().add(setting) + Session().flush() + try: + assert setting.app_settings_value == [u'spam'] + # Assign back setting value. + setting.app_settings_value = setting.app_settings_value + # Quirk: value is stringified on write and listified on read. + assert setting.app_settings_value == ["[u'spam']"] + setting.app_settings_value = setting.app_settings_value + assert setting.app_settings_value == ["[u\"[u'spam']\"]"] + finally: + Session().delete(setting) + Session().flush()