Files
mayan-edms/mayan/apps/smart_settings/tests/mixins.py
Roberto Rosario 826f7fddf2 Improve setting migration tests
Signed-off-by: Roberto Rosario <roberto.rosario@mayan-edms.com>
2019-12-12 19:37:25 -04:00

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
}
)