Improved tests for app settings and added tests for dav_base.config.modules.ModuleMeta
Run tests / Execute tox to run the test suite (push) Successful in 3m27s

This commit is contained in:
2026-05-21 13:38:34 +02:00
parent 0c7e4493d7
commit 8d0069a9e6
9 changed files with 110 additions and 32 deletions
+2 -2
View File
@@ -8,6 +8,6 @@ class TestCase(AppsTestCase):
app_config = apps.get_app_config('dav_auth')
settings = (
AppSetting('login_redirect_url', string_types),
AppSetting('logout_redirect_url', string_types),
AppSetting('login_redirect_url', 'root', string_types),
AppSetting('logout_redirect_url', 'root', string_types),
)
+4
View File
@@ -0,0 +1,4 @@
{
"url_prefix": "test",
"app_config": ".apps.AppConfig"
}
+8
View File
@@ -0,0 +1,8 @@
from django.urls import re_path
from django.views import generic
app_name = 'fake_app'
urlpatterns = [
re_path(r'^$', generic.TemplateView.as_view(), name='root'),
]
+21 -5
View File
@@ -12,10 +12,13 @@ from selenium import webdriver
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.support import expected_conditions as ExpectedConditions
from ..config.apps import DefaultSetting
class AppSetting: # pylint: disable=too-few-public-methods
def __init__(self, name, of=None):
def __init__(self, name, default, of=None):
self.name = name
self.default = default
self.of = of
@@ -26,16 +29,29 @@ class AppsTestCase(SimpleTestCase):
def setUp(self):
super().setUp()
if self.app_config:
self.default_settings = self.app_config.default_settings
self.configured_settings = self.app_config.settings
else:
self.default_settings = ()
self.configured_settings = None
def test_settings(self):
config = self.configured_settings
def test_defaults(self):
defaults = {}
for d in self.default_settings:
self.assertIsInstance(d, DefaultSetting)
defaults[d.name] = d.value
for setting in self.settings:
name = setting.name
self.assertTrue(hasattr(config, name), 'Settings do not contain {}'.format(name))
value = getattr(config, name)
self.assertIn(name, defaults.keys())
self.assertEqual(defaults[name], setting.default, 'Default value of {} is not correct'.format(name))
def test_configured_settings(self):
for setting in self.settings:
name = setting.name
self.assertTrue(hasattr(self.configured_settings, name), 'Settings do not contain {}'.format(name))
value = getattr(self.configured_settings, name)
of = setting.of
if of is not None:
self.assertIsInstance(value, of)
+3 -3
View File
@@ -8,7 +8,7 @@ class TestCase(AppsTestCase):
app_config = apps.get_app_config('dav_base')
settings = (
AppSetting('email_sender', string_types),
AppSetting('email_base_url', string_types),
AppSetting('email_subject_prefix', string_types),
AppSetting('email_sender', None, string_types),
AppSetting('email_base_url', None, string_types),
AppSetting('email_subject_prefix', '', string_types),
)
+51 -3
View File
@@ -2,8 +2,10 @@
from django.apps import apps
from django.core.exceptions import ImproperlyConfigured
from django.test import SimpleTestCase
from django.urls import URLResolver
from ..config.apps import DefaultSetting, AppSettings, AppConfig
from ..config.modules import ModuleMeta
from ..apps import AppConfig as RealAppConfig
TEST_SETTING_VALUE = 'do not change this value'
@@ -172,9 +174,55 @@ class AppConfigTestCase(SimpleTestCase):
class ModuleMetaTestCase(SimpleTestCase):
def test_some(self):
# TODO
pass
def test_init(self):
mm = ModuleMeta('dav_base.tests.fake_app1')
self.assertEqual(mm.package, 'dav_base.tests.fake_app1')
self.assertEqual(mm.app, 'dav_base.tests.fake_app1.apps.AppConfig')
self.assertEqual(mm.additional_apps, [])
self.assertEqual(mm.url_prefix, 'test')
self.assertEqual(mm.url_namespace, 'dav_base_tests_fake_app1')
pattern = mm.url_conf_pattern
self.assertIsInstance(pattern, URLResolver)
self.assertEqual('^test/', str(pattern.pattern))
def test_cannot_include_urls(self):
mm = ModuleMeta('dav_base.tests.fake_app1')
dd = {'package': 'dav_base'}
mm.load_from_dict(dd)
with self.assertRaises(ImproperlyConfigured):
_ = mm.url_conf_pattern
def test_load_from_dict(self):
mm = ModuleMeta('dav_base.tests.fake_app1')
dd = {'package': 'dav_base2.foo',
'app_config': 'MyApp.MyAppConfig',
'additional_apps': ['test1', 'test2.subtest'],
'url_prefix': 'test_url_prefix',
}
mm.load_from_dict(dd)
self.assertEqual(mm.package, dd['package'])
self.assertEqual(mm.app, dd['app_config'])
self.assertEqual(mm.additional_apps, dd['additional_apps'])
self.assertEqual(mm.url_prefix, dd['url_prefix'])
self.assertEqual(mm.url_namespace, dd['package'].replace('.', '_'))
dd = {'package': 'dav_base2.bar'}
mm.load_from_dict(dd)
self.assertEqual(mm.url_prefix, dd['package'])
self.assertEqual(mm.app, dd['package'])
self.assertEqual(mm.additional_apps, [])
self.assertEqual(mm.url_prefix, dd['package'])
def test_dump_as_dict(self):
mm = ModuleMeta('dav_base.tests.fake_app1')
dd_in = {'package': 'dav_base2.foo',
'app_config': '.mymod.MyAppConfig',
'additional_apps': ['test1'],
'url_prefix': 'test_url_prefix',
}
mm.load_from_dict(dd_in)
dd_out = mm.dump_as_dict()
self.assertEqual(dd_in, dd_out)
class ModuleConfigTestCase(SimpleTestCase):
+19 -18
View File
@@ -1,4 +1,5 @@
from django.apps import apps
from django.core.exceptions import ImproperlyConfigured
from dav_base.tests.generic import AppSetting, AppsTestCase
@@ -7,22 +8,22 @@ class TestCase(AppsTestCase):
app_config = apps.get_app_config('dav_events')
settings = (
AppSetting('enable_email_on_status_update', bool),
AppSetting('enable_email_on_update', bool),
AppSetting('enable_email_on_registration_closed', bool),
AppSetting('groups_manager_super', list),
AppSetting('groups_manager_w', list),
AppSetting('groups_manager_s', list),
AppSetting('groups_manager_m', list),
AppSetting('groups_manager_k', list),
AppSetting('groups_manager_b', list),
AppSetting('groups_publisher_print', list),
AppSetting('groups_publisher_web', list),
AppSetting('groups_publisher_facebook', list),
AppSetting('forms_development_init', bool),
AppSetting('form_initials', dict),
AppSetting('matrix_config', dict),
AppSetting('publish_before_begin_days', int),
AppSetting('publish_before_deadline_days', int),
AppSetting('publish_issues', list),
AppSetting('enable_email_on_status_update', False, bool),
AppSetting('enable_email_on_update', False, bool),
AppSetting('enable_email_on_registration_closed', False, bool),
AppSetting('groups_manager_super', [], list),
AppSetting('groups_manager_w', [], list),
AppSetting('groups_manager_s', [], list),
AppSetting('groups_manager_m', [], list),
AppSetting('groups_manager_k', [], list),
AppSetting('groups_manager_b', [], list),
AppSetting('groups_publisher_print', [], list),
AppSetting('groups_publisher_web', [], list),
AppSetting('groups_publisher_facebook', [], list),
AppSetting('forms_development_init', False, bool),
AppSetting('form_initials', {}, dict),
AppSetting('matrix_config', ImproperlyConfigured, dict),
AppSetting('publish_before_begin_days', 10, int),
AppSetting('publish_before_deadline_days', 7, int),
AppSetting('publish_issues', [], list),
)
+2 -1
View File
@@ -1,4 +1,5 @@
from django.apps import apps
from django.core.exceptions import ImproperlyConfigured
from six import string_types
from dav_base.tests.generic import AppSetting, AppsTestCase
@@ -8,5 +9,5 @@ class TestCase(AppsTestCase):
app_config = apps.get_app_config('dav_registration')
settings = (
AppSetting('privacy_policy', string_types),
AppSetting('privacy_policy', ImproperlyConfigured, string_types),
)