dav_base: added tests for dav_base.config.modules.ModuleConfig
Run tests / Execute tox to run the test suite (push) Successful in 3m31s
Run tests / Execute tox to run the test suite (push) Successful in 3m31s
This commit is contained in:
@@ -17,12 +17,13 @@ class ModuleMeta:
|
||||
_json_file = 'module.json'
|
||||
_root_url_name = 'root'
|
||||
|
||||
def __init__(self, package_name):
|
||||
def __init__(self, package_name, load=True):
|
||||
self._package_name = package_name
|
||||
self._app_config = None
|
||||
self._additional_apps = []
|
||||
self._url_prefix = None
|
||||
self._load_from_package()
|
||||
if load:
|
||||
self._load_from_package()
|
||||
|
||||
def __str__(self):
|
||||
t = '- {}'.format(self._package_name)
|
||||
@@ -123,7 +124,7 @@ class ModuleConfig:
|
||||
if 'modules' in data:
|
||||
for meta_dict in data['modules']:
|
||||
module_name = meta_dict['package']
|
||||
self._modules[module_name] = ModuleMeta(module_name)
|
||||
self._modules[module_name] = ModuleMeta(module_name, load=False)
|
||||
self._modules[module_name].load_from_dict(meta_dict)
|
||||
|
||||
self._loaded = True
|
||||
|
||||
@@ -2,10 +2,8 @@
|
||||
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'
|
||||
@@ -171,61 +169,3 @@ class AppConfigTestCase(SimpleTestCase):
|
||||
self.assertEqual(app_config.__class__, RealAppConfig)
|
||||
self.assertIsInstance(app_config, AppConfig)
|
||||
self.assertEqual(app_config.settings.__class__, AppSettings)
|
||||
|
||||
|
||||
class ModuleMetaTestCase(SimpleTestCase):
|
||||
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):
|
||||
def test_some(self):
|
||||
# TODO
|
||||
pass
|
||||
@@ -0,0 +1,211 @@
|
||||
# -*- coding: utf-8 -*-
|
||||
import datetime
|
||||
import json
|
||||
import os
|
||||
import shutil
|
||||
from unittest.mock import patch
|
||||
from django.core.exceptions import ImproperlyConfigured
|
||||
from django.test import SimpleTestCase
|
||||
from django.urls import URLResolver
|
||||
|
||||
from ..config.modules import ModuleMeta, ModuleConfig
|
||||
|
||||
from .utils import mkdtemp
|
||||
|
||||
TMP_BASE_DIR = os.path.join(os.path.dirname(os.path.dirname(os.path.abspath(__file__))), 'tmp')
|
||||
|
||||
|
||||
class ModuleMetaTestCase(SimpleTestCase):
|
||||
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_module_not_exists(self):
|
||||
with self.assertRaises(ModuleNotFoundError):
|
||||
_ = ModuleMeta('dav_base.tests.non_existent_app')
|
||||
|
||||
def test_init_without_load(self):
|
||||
app_name = 'dav_base.tests.non_existent_app'
|
||||
mm = ModuleMeta(app_name, load=False)
|
||||
self.assertEqual(mm.package, app_name)
|
||||
self.assertEqual(mm.app, app_name)
|
||||
self.assertEqual(mm.url_prefix, app_name)
|
||||
|
||||
def test_url_config_not_exists(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):
|
||||
def setUp(self):
|
||||
prefix = 'dav_base.tests.test_config_modules-{datetime}-'.format(
|
||||
datetime=datetime.datetime.now().strftime('%Y%m%d-%H%M')
|
||||
)
|
||||
self.temp_dir = mkdtemp(prefix=prefix, base_dir=TMP_BASE_DIR)
|
||||
|
||||
self.config_dir = os.path.join(self.temp_dir, 'main')
|
||||
os.makedirs(self.config_dir)
|
||||
self.config_file = os.path.join(self.config_dir, 'module_config.json')
|
||||
|
||||
def tearDown(self):
|
||||
shutil.rmtree(self.temp_dir)
|
||||
|
||||
def test_default_config_file_not_exists(self):
|
||||
with patch('dav_base.config.modules.settings') as mock_settings:
|
||||
mock_settings.BASE_DIR = self.temp_dir
|
||||
mc = ModuleConfig()
|
||||
self.assertEqual(mc.modules, {})
|
||||
|
||||
def test_default_config_file_exists(self):
|
||||
config_data = {
|
||||
'modules': [
|
||||
{'package': 'pkg1'},
|
||||
{'package': 'pkg2'},
|
||||
]
|
||||
}
|
||||
|
||||
with open(self.config_file, 'w', encoding='ascii') as f:
|
||||
json.dump(config_data, f)
|
||||
|
||||
with patch('dav_base.config.modules.settings') as mock_settings:
|
||||
mock_settings.BASE_DIR = self.temp_dir
|
||||
mc = ModuleConfig()
|
||||
self.assertEqual(list(mc.modules.keys()), ['pkg1', 'pkg2'])
|
||||
|
||||
def test_django_base_dir_parameter(self):
|
||||
config_data = {
|
||||
'modules': [
|
||||
{'package': 'pkgA'},
|
||||
{'package': 'pkgB'},
|
||||
]
|
||||
}
|
||||
|
||||
with open(self.config_file, 'w', encoding='ascii') as f:
|
||||
json.dump(config_data, f)
|
||||
|
||||
with patch('dav_base.config.modules.settings') as mock_settings:
|
||||
mock_settings.BASE_DIR = self.config_dir # No config file there
|
||||
|
||||
mc = ModuleConfig()
|
||||
self.assertEqual(mc.modules, {})
|
||||
|
||||
mc = ModuleConfig(django_base_dir=self.temp_dir)
|
||||
self.assertEqual(list(mc.modules.keys()), ['pkgA', 'pkgB'])
|
||||
|
||||
def test_custom_config_file_path(self):
|
||||
config_data = {
|
||||
'modules': [
|
||||
{'package': 'pkgX'},
|
||||
{'package': 'pkgY'},
|
||||
]
|
||||
}
|
||||
|
||||
config_file = os.path.join(self.config_dir, 'test.json')
|
||||
with open(config_file, 'w', encoding='ascii') as f:
|
||||
json.dump(config_data, f)
|
||||
|
||||
with patch('dav_base.config.modules.settings') as mock_settings:
|
||||
mock_settings.BASE_DIR = self.temp_dir
|
||||
mc = ModuleConfig(config_file_path=config_file)
|
||||
self.assertEqual(list(mc.modules.keys()), ['pkgX', 'pkgY'])
|
||||
|
||||
def test_custom_config_file_path_and_django_base_dir(self):
|
||||
config_data = {
|
||||
'modules': [
|
||||
{'package': 'pkg11'},
|
||||
{'package': 'pkg22'},
|
||||
]
|
||||
}
|
||||
|
||||
config_file = os.path.join(self.config_dir, 'test.json')
|
||||
with open(config_file, 'w', encoding='ascii') as f:
|
||||
json.dump(config_data, f)
|
||||
|
||||
with patch('dav_base.config.modules.settings') as mock_settings:
|
||||
mock_settings.BASE_DIR = self.temp_dir
|
||||
mc = ModuleConfig(config_file_path=config_file, django_base_dir=self.config_dir)
|
||||
self.assertEqual(list(mc.modules.keys()), ['pkg11', 'pkg22'])
|
||||
|
||||
def test_save_empty(self):
|
||||
self.assertFalse(os.path.exists(self.config_file))
|
||||
with patch('dav_base.config.modules.settings') as mock_settings:
|
||||
mock_settings.BASE_DIR = self.temp_dir
|
||||
mc = ModuleConfig()
|
||||
mc.save()
|
||||
self.assertTrue(os.path.isfile(self.config_file))
|
||||
|
||||
with open(self.config_file, 'r', encoding='ascii') as f:
|
||||
config_data = json.load(f)
|
||||
|
||||
self.assertEqual(config_data, {'modules': []})
|
||||
|
||||
def test_save(self):
|
||||
config_data = {
|
||||
'modules': [
|
||||
{'package': 'pkg_foo'},
|
||||
{'package': 'pkg_bar'},
|
||||
{'package': 'pkg_baz'},
|
||||
{'package': 'pkg_quux', 'url_prefix': 'quux'},
|
||||
]
|
||||
}
|
||||
copy_modules = ['pkg_bar', 'pkg_quux']
|
||||
expected_config_data = {'modules': [d for d in config_data['modules'] if d['package'] in copy_modules]}
|
||||
|
||||
config_file = os.path.join(self.config_dir, 'test.json')
|
||||
with open(config_file, 'w', encoding='ascii') as f:
|
||||
json.dump(config_data, f)
|
||||
|
||||
with patch('dav_base.config.modules.settings') as mock_settings:
|
||||
mock_settings.BASE_DIR = self.temp_dir
|
||||
mc1 = ModuleConfig()
|
||||
mc2 = ModuleConfig(config_file_path=config_file)
|
||||
for module_name in copy_modules:
|
||||
mc1.modules[module_name] = mc2.modules[module_name]
|
||||
mc1.save()
|
||||
|
||||
with open(self.config_file, 'r', encoding='ascii') as f:
|
||||
config_data = json.load(f)
|
||||
|
||||
self.assertEqual(config_data, expected_config_data)
|
||||
Reference in New Issue
Block a user