diff --git a/HISTORY.rst b/HISTORY.rst index cda46a0be5..686b923e57 100644 --- a/HISTORY.rst +++ b/HISTORY.rst @@ -6,6 +6,7 @@ - Pin kombu to version 4.6.7. GitLab issue #699. Thanks to Rob de Canha-Knight (@rssfed23) for the report and the research. - Update instances of the word "weblink" to "web link". +- Unify the creation of the temporary config file used in tests. 3.3.4 (2019-12-09) ================== diff --git a/mayan/apps/smart_settings/tests/mixins.py b/mayan/apps/smart_settings/tests/mixins.py index 93d77987cd..d6d4a20f0c 100644 --- a/mayan/apps/smart_settings/tests/mixins.py +++ b/mayan/apps/smart_settings/tests/mixins.py @@ -1,10 +1,11 @@ from __future__ import absolute_import, unicode_literals +from django.conf import settings from django.utils.encoding import force_bytes -from mayan.apps.storage.utils import NamedTemporaryFile +from mayan.apps.storage.utils import fs_cleanup, NamedTemporaryFile -from ..classes import Namespace +from ..classes import Namespace, Setting from ..utils import BaseSetting, SettingNamespaceSingleton from .literals import ( @@ -17,28 +18,10 @@ class BoostrapSettingTestMixin(object): def _create_test_bootstrap_singleton(self): self.test_globals = {} self.test_globals['BASE_DIR'] = '' - self.setting_namespace = SettingNamespaceSingleton( + self.test_setting_namespace_singleton = SettingNamespaceSingleton( global_symbol_table=self.test_globals ) - def _create_test_config_file(self, value): - with NamedTemporaryFile() as file_object: - self._set_environment_variable( - name='MAYAN_CONFIGURATION_FILEPATH', - value=file_object.name - ) - - file_object.write( - force_bytes( - '{}: {}'.format( - TEST_BOOTSTAP_SETTING_NAME, value - ) - ) - ) - file_object.seek(0) - - self.setting_namespace.update_globals() - def _register_test_boostrap_setting(self): SettingNamespaceSingleton.register_setting( name=TEST_BOOTSTAP_SETTING_NAME, klass=BaseSetting, kwargs={ @@ -54,6 +37,43 @@ class SmartSettingsTestCaseMixin(object): class SmartSettingTestMixin(object): + 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( diff --git a/mayan/apps/smart_settings/tests/test_classes.py b/mayan/apps/smart_settings/tests/test_classes.py index 19f3c8a9fd..1b655b2263 100644 --- a/mayan/apps/smart_settings/tests/test_classes.py +++ b/mayan/apps/smart_settings/tests/test_classes.py @@ -3,12 +3,12 @@ from __future__ import absolute_import, unicode_literals from pathlib2 import Path from django.conf import settings -from django.utils.encoding import force_bytes, force_text +from django.utils.encoding import force_text from mayan.apps.common.settings import setting_paginate_by from mayan.apps.common.tests.base import BaseTestCase from mayan.apps.common.tests.mixins import EnvironmentTestCaseMixin -from mayan.apps.storage.utils import fs_cleanup, NamedTemporaryFile +from mayan.apps.storage.utils import fs_cleanup from ..classes import Setting @@ -34,25 +34,16 @@ class ClassesTestCase( self._create_test_setting() self._set_environment_variable( - name='MAYAN_{}'.format(TEST_SETTING_GLOBAL_NAME), + name='MAYAN_{}'.format(self.test_setting.global_name), value=test_environment_value ) - with NamedTemporaryFile() as file_object: - settings.CONFIGURATION_FILEPATH = file_object.name - file_object.write( - force_bytes( - '{}: {}'.format( - TEST_SETTING_GLOBAL_NAME, test_file_value - ) - ) - ) - file_object.seek(0) - Setting._config_file_cache = None + self.test_config_value = test_file_value + self._create_test_config_file() - self.assertEqual( - self.test_setting.value, test_environment_value - ) + self.assertEqual( + self.test_setting.value, test_environment_value + ) def test_environment_variable(self): self._set_environment_variable( @@ -116,19 +107,12 @@ class NamespaceMigrationTestCase( ) self._create_test_setting() - with NamedTemporaryFile() as file_object: - settings.CONFIGURATION_FILEPATH = file_object.name - file_object.write( - force_bytes( - '{}: {}'.format(TEST_SETTING_GLOBAL_NAME, TEST_SETTING_VALUE) - ) - ) - file_object.seek(0) - Setting._config_file_cache = None + self.test_config_value = TEST_SETTING_VALUE + self._create_test_config_file() - self.assertEqual( - self.test_setting.value, '{}_0001'.format(TEST_SETTING_VALUE) - ) + self.assertEqual( + self.test_setting.value, '{}_0001'.format(TEST_SETTING_VALUE) + ) def test_migration_0001_to_0003(self): self._create_test_settings_namespace( @@ -136,19 +120,12 @@ class NamespaceMigrationTestCase( ) self._create_test_setting() - with NamedTemporaryFile() as file_object: - settings.CONFIGURATION_FILEPATH = file_object.name - file_object.write( - force_bytes( - '{}: {}'.format(TEST_SETTING_GLOBAL_NAME, TEST_SETTING_VALUE) - ) - ) - file_object.seek(0) - Setting._config_file_cache = None + self.test_config_value = TEST_SETTING_VALUE + self._create_test_config_file() - self.assertEqual( - self.test_setting.value, '{}_0001_0002'.format(TEST_SETTING_VALUE) - ) + self.assertEqual( + self.test_setting.value, '{}_0001_0002'.format(TEST_SETTING_VALUE) + ) def test_migration_invalid(self): self._create_test_settings_namespace( @@ -156,19 +133,12 @@ class NamespaceMigrationTestCase( ) self._create_test_setting() - with NamedTemporaryFile() as file_object: - settings.CONFIGURATION_FILEPATH = file_object.name - file_object.write( - force_bytes( - '{}: {}'.format(TEST_SETTING_GLOBAL_NAME, TEST_SETTING_VALUE) - ) - ) - file_object.seek(0) - Setting._config_file_cache = None + self.test_config_value = TEST_SETTING_VALUE + self._create_test_config_file() - self.assertEqual( - self.test_setting.value, TEST_SETTING_VALUE - ) + self.assertEqual( + self.test_setting.value, TEST_SETTING_VALUE + ) def test_migration_invalid_dual(self): self._create_test_settings_namespace( @@ -176,16 +146,9 @@ class NamespaceMigrationTestCase( ) self._create_test_setting() - with NamedTemporaryFile() as file_object: - settings.CONFIGURATION_FILEPATH = file_object.name - file_object.write( - force_bytes( - '{}: {}'.format(TEST_SETTING_GLOBAL_NAME, TEST_SETTING_VALUE) - ) - ) - file_object.seek(0) - Setting._config_file_cache = None + self.test_config_value = TEST_SETTING_VALUE + self._create_test_config_file() - self.assertEqual( - self.test_setting.value, TEST_SETTING_VALUE - ) + self.assertEqual( + self.test_setting.value, TEST_SETTING_VALUE + ) diff --git a/mayan/apps/smart_settings/tests/test_utils.py b/mayan/apps/smart_settings/tests/test_utils.py index 5f1c025f9d..6c996bf267 100644 --- a/mayan/apps/smart_settings/tests/test_utils.py +++ b/mayan/apps/smart_settings/tests/test_utils.py @@ -7,11 +7,12 @@ from .literals import ( TEST_BOOTSTAP_SETTING_NAME, TEST_SETTING_VALUE, TEST_SETTING_VALUE_OVERRIDE ) -from .mixins import BoostrapSettingTestMixin +from .mixins import BoostrapSettingTestMixin, SmartSettingTestMixin class BoostrapSettingTestCase( - BoostrapSettingTestMixin, EnvironmentTestCaseMixin, BaseTestCase + BoostrapSettingTestMixin, EnvironmentTestCaseMixin, + SmartSettingTestMixin, BaseTestCase ): def setUp(self): super(BoostrapSettingTestCase, self).setUp() @@ -24,7 +25,11 @@ class BoostrapSettingTestCase( value=TEST_SETTING_VALUE_OVERRIDE ) - self._create_test_config_file(value=TEST_SETTING_VALUE) + self.test_setting_global_name = TEST_BOOTSTAP_SETTING_NAME + self.test_config_value = TEST_SETTING_VALUE + self._create_test_config_file( + callback=self.test_setting_namespace_singleton.update_globals + ) self.assertEqual( self.test_globals[TEST_BOOTSTAP_SETTING_NAME], @@ -34,7 +39,11 @@ class BoostrapSettingTestCase( def test_bootstrap_config_overrides_settings(self): self.test_globals[TEST_BOOTSTAP_SETTING_NAME] = TEST_SETTING_VALUE - self._create_test_config_file(value=TEST_SETTING_VALUE_OVERRIDE) + self.test_setting_global_name = TEST_BOOTSTAP_SETTING_NAME + self.test_config_value = TEST_SETTING_VALUE_OVERRIDE + self._create_test_config_file( + callback=self.test_setting_namespace_singleton.update_globals + ) self.assertEqual( self.test_globals[TEST_BOOTSTAP_SETTING_NAME], @@ -46,7 +55,7 @@ class BoostrapSettingTestCase( TEST_BOOTSTAP_SETTING_NAME ] = TEST_SETTING_VALUE_OVERRIDE - self.setting_namespace.update_globals() + self.test_setting_namespace_singleton.update_globals() self.assertEqual( self.test_globals[TEST_BOOTSTAP_SETTING_NAME], @@ -54,7 +63,7 @@ class BoostrapSettingTestCase( ) def test_bootstrap_default(self): - self.setting_namespace.update_globals() + self.test_setting_namespace_singleton.update_globals() self.assertEqual( self.test_globals[TEST_BOOTSTAP_SETTING_NAME], 'value default'