Files
pecan/pecan/tests/test_conf.py

276 lines
9.2 KiB
Python

import os
import sys
from unittest import TestCase
__here__ = os.path.dirname(__file__)
class TestConf(TestCase):
def test_update_config_fail_identifier(self):
"""Fail when naming does not pass correctness"""
from pecan import configuration
bad_dict = {'bad name': 'value'}
self.assertRaises(ValueError, configuration.Config, bad_dict)
def test_update_set_config(self):
"""Update an empty configuration with the default values"""
from pecan import configuration
conf = configuration.initconf()
conf.update(configuration.conf_from_file(os.path.join(
__here__,
'test_config/config.py'
)))
self.assertEqual(conf.app.root, None)
self.assertEqual(conf.app.template_path, 'myproject/templates')
self.assertEqual(conf.app.static_root, 'public')
self.assertEqual(conf.server.host, '1.1.1.1')
self.assertEqual(conf.server.port, '8081')
def test_update_set_default_config(self):
"""Update an empty configuration with the default values"""
from pecan import configuration
conf = configuration.initconf()
conf.update(configuration.conf_from_file(os.path.join(
__here__,
'test_config/empty.py'
)))
self.assertEqual(conf.app.root, None)
self.assertEqual(conf.app.template_path, '')
self.assertEqual(conf.app.static_root, 'public')
self.assertEqual(conf.server.host, '0.0.0.0')
self.assertEqual(conf.server.port, '8080')
def test_update_force_dict(self):
"""Update an empty configuration with the default values"""
from pecan import configuration
conf = configuration.initconf()
conf.update(configuration.conf_from_file(os.path.join(
__here__,
'test_config/forcedict.py'
)))
self.assertEqual(conf.app.root, None)
self.assertEqual(conf.app.template_path, '')
self.assertEqual(conf.app.static_root, 'public')
self.assertEqual(conf.server.host, '0.0.0.0')
self.assertEqual(conf.server.port, '8080')
self.assertTrue(isinstance(conf.beaker, dict))
self.assertEqual(conf.beaker['session.key'], 'key')
self.assertEqual(conf.beaker['session.type'], 'cookie')
self.assertEqual(
conf.beaker['session.validate_key'],
'1a971a7df182df3e1dec0af7c6913ec7'
)
self.assertEqual(conf.beaker.get('__force_dict__'), None)
def test_update_config_with_dict(self):
from pecan import configuration
conf = configuration.initconf()
d = {'attr': True}
conf['attr'] = d
self.assertTrue(conf.attr.attr)
def test_config_repr(self):
from pecan import configuration
conf = configuration.Config({'a': 1})
self.assertEqual(repr(conf), "Config({'a': 1})")
def test_config_from_dict(self):
from pecan import configuration
conf = configuration.conf_from_dict({})
conf['path'] = '%(confdir)s'
self.assertTrue(os.path.samefile(conf['path'], os.getcwd()))
def test_config_from_file(self):
from pecan import configuration
path = os.path.join(
os.path.dirname(__file__), 'test_config', 'config.py'
)
conf = configuration.conf_from_file(path)
def test_config_illegal_ids(self):
from pecan import configuration
conf = configuration.Config({})
conf.update(configuration.conf_from_file(os.path.join(
__here__,
'test_config/bad/module_and_underscore.py'
)))
self.assertEqual([], list(conf))
def test_config_missing_file(self):
from pecan import configuration
path = ('doesnotexist.py',)
configuration.Config({})
self.assertRaises(IOError, configuration.conf_from_file, os.path.join(
__here__,
'test_config',
*path
))
def test_config_missing_file_on_path(self):
from pecan import configuration
path = ('bad', 'bad', 'doesnotexist.py',)
configuration.Config({})
self.assertRaises(IOError, configuration.conf_from_file, os.path.join(
__here__,
'test_config',
*path
))
def test_config_with_syntax_error(self):
from pecan import configuration
path = ('bad', 'syntaxerror.py')
configuration.Config({})
self.assertRaises(
SyntaxError,
configuration.conf_from_file,
os.path.join(__here__, 'test_config', *path)
)
def test_config_with_bad_import(self):
from pecan import configuration
path = ('bad', 'importerror.py')
configuration.Config({})
self.assertRaises(
ImportError,
configuration.conf_from_file,
os.path.join(
__here__,
'test_config',
*path
)
)
def test_config_dir(self):
from pecan import configuration
if sys.version_info >= (2, 6):
conf = configuration.Config({})
self.assertEqual([], dir(conf))
conf = configuration.Config({'a': 1})
self.assertEqual(['a'], dir(conf))
def test_config_bad_key(self):
from pecan import configuration
conf = configuration.Config({'a': 1})
assert conf.a == 1
self.assertRaises(AttributeError, getattr, conf, 'b')
def test_config_get_valid_key(self):
from pecan import configuration
conf = configuration.Config({'a': 1})
assert conf.get('a') == 1
def test_config_get_invalid_key(self):
from pecan import configuration
conf = configuration.Config({'a': 1})
assert conf.get('b') is None
def test_config_get_invalid_key_return_default(self):
from pecan import configuration
conf = configuration.Config({'a': 1})
assert conf.get('b', True) is True
def test_config_as_dict(self):
from pecan import configuration
conf = configuration.initconf()
assert isinstance(conf, configuration.Config)
as_dict = conf.as_dict()
assert isinstance(as_dict, dict)
assert as_dict['server']['host'] == '0.0.0.0'
assert as_dict['server']['port'] == '8080'
assert as_dict['app']['modules'] == []
assert as_dict['app']['root'] == None
assert as_dict['app']['static_root'] == 'public'
assert as_dict['app']['template_path'] == ''
def test_config_as_dict_nested(self):
from pecan import configuration
"""have more than one level nesting and convert to dict"""
conf = configuration.initconf()
nested = {'one': {'two': 2}}
conf['nested'] = nested
as_dict = conf.as_dict()
assert isinstance(as_dict, dict)
assert as_dict['server']['host'] == '0.0.0.0'
assert as_dict['server']['port'] == '8080'
assert as_dict['app']['modules'] == []
assert as_dict['app']['root'] == None
assert as_dict['app']['static_root'] == 'public'
assert as_dict['app']['template_path'] == ''
assert as_dict['nested']['one']['two'] == 2
def test_config_as_dict_prefixed(self):
from pecan import configuration
"""Add a prefix for keys"""
conf = configuration.initconf()
assert isinstance(conf, configuration.Config)
as_dict = conf.as_dict('prefix_')
assert isinstance(as_dict, dict)
assert as_dict['prefix_server']['prefix_host'] == '0.0.0.0'
assert as_dict['prefix_server']['prefix_port'] == '8080'
assert as_dict['prefix_app']['prefix_modules'] == []
assert as_dict['prefix_app']['prefix_root'] == None
assert as_dict['prefix_app']['prefix_static_root'] == 'public'
assert as_dict['prefix_app']['prefix_template_path'] == ''
class TestGlobalConfig(TestCase):
def tearDown(self):
from pecan import configuration
configuration.set_config(dict(configuration.initconf()), overwrite=True)
def test_paint_from_dict(self):
from pecan import configuration
configuration.set_config({'foo': 'bar'})
assert dict(configuration._runtime_conf) != {'foo': 'bar'}
self.assertEqual(configuration._runtime_conf.foo, 'bar')
def test_overwrite_from_dict(self):
from pecan import configuration
configuration.set_config({'foo': 'bar'}, overwrite=True)
assert dict(configuration._runtime_conf) == {'foo': 'bar'}
def test_paint_from_file(self):
from pecan import configuration
configuration.set_config(os.path.join(
__here__,
'test_config/foobar.py'
))
assert dict(configuration._runtime_conf) != {'foo': 'bar'}
assert configuration._runtime_conf.foo == 'bar'
def test_overwrite_from_file(self):
from pecan import configuration
configuration.set_config(os.path.join(
__here__,
'test_config/foobar.py',
),
overwrite=True
)
assert dict(configuration._runtime_conf) == {'foo': 'bar'}
def test_set_config_invalid_type(self):
from pecan import configuration
self.assertRaises(TypeError, configuration.set_config, None)