108 lines
3.7 KiB
Python
108 lines
3.7 KiB
Python
from __future__ import absolute_import, unicode_literals
|
|
|
|
from django.conf import settings
|
|
from django.utils.encoding import force_bytes
|
|
|
|
from mayan.apps.common.tests.mixins import EnvironmentTestCaseMixin
|
|
from mayan.apps.storage.utils import fs_cleanup, NamedTemporaryFile
|
|
|
|
from ..classes import Namespace, Setting
|
|
from ..utils import BaseSetting, SettingNamespaceSingleton
|
|
|
|
from .literals import (
|
|
TEST_BOOTSTAP_SETTING_NAME, TEST_NAMESPACE_LABEL, TEST_NAMESPACE_NAME,
|
|
TEST_SETTING_DEFAULT_VALUE, TEST_SETTING_GLOBAL_NAME
|
|
)
|
|
|
|
|
|
class BoostrapSettingTestMixin(object):
|
|
def _create_test_bootstrap_singleton(self):
|
|
self.test_globals = {}
|
|
self.test_globals['BASE_DIR'] = ''
|
|
self.test_setting_namespace_singleton = SettingNamespaceSingleton(
|
|
global_symbol_table=self.test_globals
|
|
)
|
|
|
|
def _register_test_boostrap_setting(self):
|
|
SettingNamespaceSingleton.register_setting(
|
|
name=TEST_BOOTSTAP_SETTING_NAME, klass=BaseSetting, kwargs={
|
|
'has_default': True, 'default_value': 'value default'
|
|
}
|
|
)
|
|
|
|
|
|
class SmartSettingsTestCaseMixin(object):
|
|
def setUp(self):
|
|
super(SmartSettingsTestCaseMixin, self).setUp()
|
|
Namespace.invalidate_cache_all()
|
|
|
|
|
|
class SmartSettingTestMixin(EnvironmentTestCaseMixin):
|
|
test_setting_global_name = None
|
|
test_config_file_object = None
|
|
|
|
def tearDown(self):
|
|
if self.test_config_file_object:
|
|
fs_cleanup(filename=self.test_config_file_object.name)
|
|
super(SmartSettingTestMixin, self).tearDown()
|
|
|
|
def _create_test_config_file(self, callback=None):
|
|
if not self.test_setting_global_name:
|
|
self.test_setting_global_name = self.test_setting.global_name
|
|
|
|
test_config_entry = {
|
|
self.test_setting_global_name: self.test_config_value
|
|
}
|
|
|
|
with NamedTemporaryFile(delete=False) as test_config_file_object:
|
|
# Needed to load the config file from the Setting class
|
|
# after bootstrap.
|
|
settings.CONFIGURATION_FILEPATH = test_config_file_object.name
|
|
# Needed to update the globals before Mayan has loaded.
|
|
self._set_environment_variable(
|
|
name='MAYAN_CONFIGURATION_FILEPATH',
|
|
value=test_config_file_object.name
|
|
)
|
|
test_config_file_object.write(
|
|
force_bytes(
|
|
Setting.serialize_value(value=test_config_entry)
|
|
)
|
|
)
|
|
test_config_file_object.seek(0)
|
|
Setting._config_file_cache = None
|
|
|
|
if callback:
|
|
callback()
|
|
|
|
def _create_test_settings_namespace(self, **kwargs):
|
|
try:
|
|
self.test_settings_namespace = Namespace.get(
|
|
name=TEST_NAMESPACE_NAME
|
|
)
|
|
self.test_settings_namespace.migration_class = None
|
|
self.test_settings_namespace.version = None
|
|
self.test_settings_namespace.__dict__.update(kwargs)
|
|
except KeyError:
|
|
self.test_settings_namespace = Namespace(
|
|
label=TEST_NAMESPACE_LABEL, name=TEST_NAMESPACE_NAME,
|
|
**kwargs
|
|
)
|
|
|
|
def _create_test_setting(self):
|
|
self.test_setting = self.test_settings_namespace.add_setting(
|
|
global_name=TEST_SETTING_GLOBAL_NAME,
|
|
default=TEST_SETTING_DEFAULT_VALUE
|
|
)
|
|
|
|
|
|
class SmartSettingViewTestMixin(object):
|
|
def _request_namespace_list_view(self):
|
|
return self.get(viewname='settings:namespace_list')
|
|
|
|
def _request_namespace_detail_view(self):
|
|
return self.get(
|
|
viewname='settings:namespace_detail', kwargs={
|
|
'namespace_name': self.test_settings_namespace.name
|
|
}
|
|
)
|