Files
django-dav-events/dav_base/tests/test_config.py
heinzel 98a6fc3ce7
All checks were successful
buildbot/tox Build done.
try to make pylint happy
2022-06-08 00:08:09 +02:00

184 lines
6.6 KiB
Python

# -*- coding: utf-8 -*-
from django.apps import apps
from django.core.exceptions import ImproperlyConfigured
from django.test import SimpleTestCase
from ..config.apps import DefaultSetting, AppSettings, AppConfig
from ..apps import AppConfig as RealAppConfig
TEST_SETTING_VALUE = 'do not change this value'
class DefaultSettingTestCase(SimpleTestCase):
def test_key_name(self):
name = 'somename'
key_name = 'SoMeKeY'
setting = DefaultSetting(name, None)
self.assertEqual(setting.key_name, name.upper())
setting = DefaultSetting(name, None, key_name=key_name)
self.assertEqual(setting.key_name, key_name)
def test_validate(self):
name = 'somename'
setting = DefaultSetting(name, None, validator=None)
try:
setting.validate(False)
except ImproperlyConfigured: # pragma: no cover
self.fail('Disabled validation validated invalid :(')
def callable_validator(value):
return (value % 2) == 0
valid_values = (2, 4)
invalid_values = (3, 5)
setting = DefaultSetting(name, None, validator=callable_validator)
for val in valid_values:
try:
setting.validate(val)
except ImproperlyConfigured: # pragma: no cover
self.fail('Callable validated valid value invalid :(')
for val in invalid_values:
with self.assertRaises(ImproperlyConfigured):
setting.validate(val)
re_validator = r'[a-z]'
valid_values = 'aocd'
invalid_values = 'Aö1.'
setting = DefaultSetting(name, None, validator=re_validator)
for val in valid_values:
try:
setting.validate(val)
except ImproperlyConfigured: # pragma: no cover
self.fail('Regular Expression validated valid value invalid :(')
for val in invalid_values:
with self.assertRaises(ImproperlyConfigured):
setting.validate(val)
class AppSettingsTestCase(SimpleTestCase):
def setUp(self):
self.app_name = 'dav_base'
self.test_setting_value = TEST_SETTING_VALUE
def test_no_settings_file(self):
"""Test that nothing bad happens if no settings file can be read"""
app_settings = AppSettings('', ())
self.assertIsInstance(app_settings, AppSettings)
def test_defaults(self):
"""Test the default value for optional and unset settings"""
default_settings = (
DefaultSetting('no_test_setting', 1),
DefaultSetting('no_test_setting_2', 2),
)
app_settings = AppSettings(self.app_name, default_settings)
self.assertEqual(app_settings.no_test_setting, 1)
self.assertEqual(app_settings.no_test_setting_2, 2)
def test_improperlyconfigured_by_class(self):
"""Test if mandatory but unset setting raise correct exception"""
default_settings = (
DefaultSetting('no_test_setting', ImproperlyConfigured),
)
with self.assertRaisesRegex(ImproperlyConfigured, 'NO_TEST_SETTING must be defined in main.settings-dav_base'):
_ = AppSettings(self.app_name, default_settings)
def test_improperlyconfigured_by_instance(self):
"""Test if mandatory but unset setting raise correct exception"""
default_settings = (
DefaultSetting('no_test_setting', ImproperlyConfigured('Some Error Message')),
)
with self.assertRaisesRegex(ImproperlyConfigured, 'Some Error Message'):
_ = AppSettings(self.app_name, default_settings)
def test_improperlyconfigured_by_func(self):
"""Test if invalid setting raise correct exception"""
def validator(value): # pylint: disable=unused-argument
return False
default_settings = (
DefaultSetting('test_setting', 1, validator=validator),
)
with self.assertRaises(ImproperlyConfigured):
_ = AppSettings(self.app_name, default_settings)
def test_improperlyconfigured_by_regex(self):
"""Test if invalid setting raise correct exception"""
default_settings = (
DefaultSetting('test_setting', 1, validator=r'^[01]$'),
)
with self.assertRaises(ImproperlyConfigured):
_ = AppSettings(self.app_name, default_settings)
def test_settings_from_file(self):
"""Test if value from settings file eliminate exception"""
default_settings = (
DefaultSetting('test_setting', ImproperlyConfigured),
)
app_settings = AppSettings(self.app_name, default_settings)
self.assertEqual(app_settings.test_setting, self.test_setting_value)
# Test if value from settings file overwrites default value
default_settings = (
DefaultSetting('test_setting', 1),
)
app_settings = AppSettings(self.app_name, default_settings)
self.assertEqual(app_settings.test_setting, self.test_setting_value)
def test_key_name(self):
default_settings = (
DefaultSetting('test_setting', 1, key_name='NO_TEST_SETTING'),
DefaultSetting('no_test_setting', ImproperlyConfigured, key_name='TEST_SETTING'),
)
app_settings = AppSettings(self.app_name, default_settings)
self.assertEqual(app_settings.test_setting, 1)
self.assertEqual(app_settings.no_test_setting, self.test_setting_value)
class AppConfigTestCase(SimpleTestCase):
def test_init(self):
app_name = 'dav_base'
import dav_base as app_module # pylint: disable=import-outside-toplevel
test_default_settings = (
DefaultSetting('test_setting', ImproperlyConfigured),
DefaultSetting('no_test_setting', 1),
)
class TestAppConfig(AppConfig):
name = 'not_dav_base'
verbose_name = 'DAV Base App'
default_settings = test_default_settings
app_config = TestAppConfig(app_name, app_module)
app_settings = app_config.settings
self.assertEqual(app_config.name, app_name)
self.assertEqual(app_settings.test_setting, TEST_SETTING_VALUE)
self.assertEqual(app_settings.no_test_setting, 1)
def test_integrated(self):
app_config = apps.get_containing_app_config(__package__)
self.assertEqual(app_config.__class__, RealAppConfig)
self.assertIsInstance(app_config, AppConfig)
self.assertEqual(app_config.settings.__class__, AppSettings)
class ModuleMetaTestCase(SimpleTestCase):
def test_some(self):
# TODO
pass
class ModuleConfigTestCase(SimpleTestCase):
def test_some(self):
# TODO
pass