changeset 5900:83c34fbb2139

tests: illustrate current behavior of list-valued settings
author Konstantin Veretennicov <kveretennicov@gmail.com>
date Thu, 05 May 2016 17:57:46 +0200
parents 106259896c7c
children ef1187159860
files kallithea/tests/models/test_settings.py
diffstat 1 files changed, 49 insertions(+), 0 deletions(-) [+]
line wrap: on
line diff
--- /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()