552998b067
Set python 3.4 as minimal supported python version
164 lines
6.2 KiB
Python
164 lines
6.2 KiB
Python
from django.dispatch import receiver
|
|
|
|
from openslides.core.config import ConfigVariable, config
|
|
from openslides.core.exceptions import ConfigError, ConfigNotFound
|
|
from openslides.core.signals import config_signal
|
|
from openslides.utils.test import TestCase
|
|
|
|
|
|
class HandleConfigTest(TestCase):
|
|
|
|
def get_config_var(self, key):
|
|
return config[key]
|
|
|
|
def set_config_var(self, key, value):
|
|
config[key] = value
|
|
|
|
def test_get_config_default_value(self):
|
|
self.assertEqual(config['string_var'], 'default_string_rien4ooCZieng6ah')
|
|
self.assertTrue(config['bool_var'])
|
|
self.assertEqual(config['integer_var'], 3)
|
|
self.assertEqual(config['choices_var'], '1')
|
|
self.assertEqual(config['none_config_var'], None)
|
|
with self.assertRaisesMessage(
|
|
ConfigNotFound,
|
|
'The config variable unknown_config_var was not found.'):
|
|
self.get_config_var('unknown_config_var')
|
|
|
|
def test_get_multiple_config_var_error(self):
|
|
config_signal.connect(
|
|
set_simple_config_view_multiple_vars,
|
|
dispatch_uid='set_simple_config_view_multiple_vars_for_testing')
|
|
|
|
with self.assertRaisesMessage(
|
|
ConfigError,
|
|
'Too many values for config variable multiple_config_var found.'):
|
|
config.setup_cache()
|
|
config_signal.disconnect(
|
|
set_simple_config_view_multiple_vars,
|
|
dispatch_uid='set_simple_config_view_multiple_vars_for_testing')
|
|
|
|
def test_database_queries(self):
|
|
"""
|
|
Test that no database queries are send, after the cache was created.
|
|
"""
|
|
config.setup_cache()
|
|
self.assertNumQueries(0, self.get_config_var, key='string_var')
|
|
|
|
def test_setup_config_var(self):
|
|
self.assertRaises(TypeError, ConfigVariable)
|
|
self.assertRaises(TypeError, ConfigVariable, name='foo')
|
|
self.assertRaises(TypeError, ConfigVariable, default_value='foo')
|
|
|
|
def test_change_config_value(self):
|
|
self.assertEqual(config['string_var'], 'default_string_rien4ooCZieng6ah')
|
|
config['string_var'] = 'other_special_unique_string dauTex9eAiy7jeen'
|
|
self.assertEqual(config['string_var'], 'other_special_unique_string dauTex9eAiy7jeen')
|
|
|
|
def test_missing_cache_(self):
|
|
self.assertEqual(config['string_var'], 'default_string_rien4ooCZieng6ah')
|
|
|
|
def test_config_contains(self):
|
|
self.assertTrue('string_var' in config)
|
|
self.assertFalse('unknown_config_var' in config)
|
|
|
|
def test_set_value_before_getting_it(self):
|
|
"""
|
|
Try to call __setitem__ before __getitem__.
|
|
"""
|
|
config['additional_config_var'] = 'value'
|
|
|
|
def test_on_change(self):
|
|
"""
|
|
Tests that the special callback is called and raises a special
|
|
message.
|
|
"""
|
|
# TODO: use right exception
|
|
with self.assertRaisesMessage(
|
|
Exception,
|
|
'Change callback dhcnfg34dlg06kdg successfully called.'):
|
|
self.set_config_var(
|
|
key='var_with_callback_ghvnfjd5768gdfkwg0hm2',
|
|
value='new_string_kbmbnfhdgibkdjshg452bc')
|
|
|
|
self.assertEqual(
|
|
config['var_with_callback_ghvnfjd5768gdfkwg0hm2'],
|
|
'new_string_kbmbnfhdgibkdjshg452bc')
|
|
|
|
|
|
@receiver(config_signal, dispatch_uid='set_grouped_config_view_for_testing')
|
|
def set_grouped_config_view(sender, **kwargs):
|
|
"""
|
|
Sets a grouped config collection. There are some variables, one variable
|
|
with a string as default value, one with a boolean as default value,
|
|
one with an integer as default value, one with choices and one hidden
|
|
variable. These variables are grouped in two subgroups.
|
|
"""
|
|
yield ConfigVariable(
|
|
name='string_var',
|
|
default_value='default_string_rien4ooCZieng6ah',
|
|
group='Config vars for testing 1',
|
|
subgroup='Group 1 aiYeix2mCieQuae3')
|
|
yield ConfigVariable(
|
|
name='bool_var',
|
|
default_value=True,
|
|
input_type='boolean',
|
|
group='Config vars for testing 1',
|
|
subgroup='Group 1 aiYeix2mCieQuae3')
|
|
yield ConfigVariable(
|
|
name='integer_var',
|
|
default_value=3,
|
|
input_type='integer',
|
|
group='Config vars for testing 1',
|
|
subgroup='Group 1 aiYeix2mCieQuae3')
|
|
|
|
yield ConfigVariable(
|
|
name='hidden_var',
|
|
default_value='hidden_value',
|
|
group='Config vars for testing 1',
|
|
subgroup='Group 2 Toongai7ahyahy7B')
|
|
yield ConfigVariable(
|
|
name='choices_var',
|
|
default_value='1',
|
|
input_type='choice',
|
|
choices=(
|
|
{'value': '1', 'display_name': 'Choice One Ughoch4ocoche6Ee'},
|
|
{'value': '2', 'display_name': 'Choice Two Vahnoh5yalohv5Eb'}),
|
|
group='Config vars for testing 1',
|
|
subgroup='Group 2 Toongai7ahyahy7B')
|
|
|
|
|
|
@receiver(config_signal, dispatch_uid='set_simple_config_view_for_testing')
|
|
def set_simple_config_view(sender, **kwargs):
|
|
"""
|
|
Sets a simple config view with some config variables but without
|
|
grouping.
|
|
"""
|
|
yield ConfigVariable(name='additional_config_var', default_value='BaeB0ahcMae3feem')
|
|
yield ConfigVariable(name='additional_config_var_2', default_value='')
|
|
yield ConfigVariable(name='none_config_var', default_value=None)
|
|
|
|
|
|
# Do not connect to the signal now but later inside the test.
|
|
def set_simple_config_view_multiple_vars(sender, **kwargs):
|
|
"""
|
|
Sets a bad config view with some multiple config vars.
|
|
"""
|
|
yield ConfigVariable(name='multiple_config_var', default_value='foobar1')
|
|
yield ConfigVariable(name='multiple_config_var', default_value='foobar2')
|
|
|
|
|
|
@receiver(config_signal, dispatch_uid='set_simple_config_collection_disabled_view_for_testing')
|
|
def set_simple_config_collection_disabled_view(sender, **kwargs):
|
|
yield ConfigVariable(name='hidden_config_var_2', default_value='')
|
|
|
|
|
|
@receiver(config_signal, dispatch_uid='set_simple_config_collection_with_callback_for_testing')
|
|
def set_simple_config_collection_with_callback(sender, **kwargs):
|
|
def callback():
|
|
raise Exception('Change callback dhcnfg34dlg06kdg successfully called.')
|
|
yield ConfigVariable(
|
|
name='var_with_callback_ghvnfjd5768gdfkwg0hm2',
|
|
default_value='',
|
|
on_change=callback)
|