Browse Source

Split instance tests off into own file

pull/1165/head
Markus Unterwaditzer 10 years ago
parent
commit
be42d5665e
  1. 185
      tests/test_config.py
  2. 132
      tests/test_instance_config.py

185
tests/test_config.py

@ -1,25 +1,16 @@
# -*- coding: utf-8 -*- # -*- coding: utf-8 -*-
""" """
tests.config tests.test_config
~~~~~~~~~~~~~~~~~~~~~~ ~~~~~~~~~~~~~~~~~
Configuration and instances. :copyright: (c) 2014 by the Flask Team, see AUTHORS for more details.
:copyright: (c) 2014 by Armin Ronacher.
:license: BSD, see LICENSE for more details. :license: BSD, see LICENSE for more details.
""" """
import pytest import pytest
import os import os
import sys
import flask import flask
import pkgutil
import unittest
import textwrap
from contextlib import contextmanager
from flask._compat import PY2
# config keys used for the TestConfig # config keys used for the TestConfig
@ -27,50 +18,52 @@ TEST_KEY = 'foo'
SECRET_KEY = 'devkey' SECRET_KEY = 'devkey'
class TestConfig(object): def common_object_test(app):
def common_object_test(self, app):
assert app.secret_key == 'devkey' assert app.secret_key == 'devkey'
assert app.config['TEST_KEY'] == 'foo' assert app.config['TEST_KEY'] == 'foo'
assert 'TestConfig' not in app.config assert 'TestConfig' not in app.config
def test_config_from_file(self):
def test_config_from_file():
app = flask.Flask(__name__) app = flask.Flask(__name__)
app.config.from_pyfile(__file__.rsplit('.', 1)[0] + '.py') app.config.from_pyfile(__file__.rsplit('.', 1)[0] + '.py')
self.common_object_test(app) common_object_test(app)
def test_config_from_object(self): def test_config_from_object():
app = flask.Flask(__name__) app = flask.Flask(__name__)
app.config.from_object(__name__) app.config.from_object(__name__)
self.common_object_test(app) common_object_test(app)
def test_config_from_json(self):
def test_config_from_json():
app = flask.Flask(__name__) app = flask.Flask(__name__)
current_dir = os.path.dirname(os.path.abspath(__file__)) current_dir = os.path.dirname(os.path.abspath(__file__))
app.config.from_json(os.path.join(current_dir, 'static', 'config.json')) app.config.from_json(os.path.join(current_dir, 'static', 'config.json'))
self.common_object_test(app) common_object_test(app)
def test_config_from_mapping(self): def test_config_from_mapping():
app = flask.Flask(__name__) app = flask.Flask(__name__)
app.config.from_mapping({ app.config.from_mapping({
'SECRET_KEY': 'devkey', 'SECRET_KEY': 'devkey',
'TEST_KEY': 'foo' 'TEST_KEY': 'foo'
}) })
self.common_object_test(app) common_object_test(app)
app = flask.Flask(__name__) app = flask.Flask(__name__)
app.config.from_mapping([ app.config.from_mapping([
('SECRET_KEY', 'devkey'), ('SECRET_KEY', 'devkey'),
('TEST_KEY', 'foo') ('TEST_KEY', 'foo')
]) ])
self.common_object_test(app) common_object_test(app)
app = flask.Flask(__name__) app = flask.Flask(__name__)
app.config.from_mapping( app.config.from_mapping(
SECRET_KEY='devkey', SECRET_KEY='devkey',
TEST_KEY='foo' TEST_KEY='foo'
) )
self.common_object_test(app) common_object_test(app)
app = flask.Flask(__name__) app = flask.Flask(__name__)
with pytest.raises(TypeError): with pytest.raises(TypeError):
@ -78,16 +71,19 @@ class TestConfig(object):
{}, {} {}, {}
) )
def test_config_from_class(self):
def test_config_from_class():
class Base(object): class Base(object):
TEST_KEY = 'foo' TEST_KEY = 'foo'
class Test(Base): class Test(Base):
SECRET_KEY = 'devkey' SECRET_KEY = 'devkey'
app = flask.Flask(__name__) app = flask.Flask(__name__)
app.config.from_object(Test) app.config.from_object(Test)
self.common_object_test(app) common_object_test(app)
def test_config_from_envvar(self):
def test_config_from_envvar():
env = os.environ env = os.environ
try: try:
os.environ = {} os.environ = {}
@ -102,11 +98,12 @@ class TestConfig(object):
os.environ = {'FOO_SETTINGS': __file__.rsplit('.', 1)[0] + '.py'} os.environ = {'FOO_SETTINGS': __file__.rsplit('.', 1)[0] + '.py'}
assert app.config.from_envvar('FOO_SETTINGS') assert app.config.from_envvar('FOO_SETTINGS')
self.common_object_test(app) common_object_test(app)
finally: finally:
os.environ = env os.environ = env
def test_config_from_envvar_missing(self):
def test_config_from_envvar_missing():
env = os.environ env = os.environ
try: try:
os.environ = {'FOO_SETTINGS': 'missing.cfg'} os.environ = {'FOO_SETTINGS': 'missing.cfg'}
@ -124,7 +121,8 @@ class TestConfig(object):
finally: finally:
os.environ = env os.environ = env
def test_config_missing(self):
def test_config_missing():
app = flask.Flask(__name__) app = flask.Flask(__name__)
try: try:
app.config.from_pyfile('missing.cfg') app.config.from_pyfile('missing.cfg')
@ -137,7 +135,8 @@ class TestConfig(object):
assert 0, 'expected config' assert 0, 'expected config'
assert not app.config.from_pyfile('missing.cfg', silent=True) assert not app.config.from_pyfile('missing.cfg', silent=True)
def test_config_missing_json(self):
def test_config_missing_json():
app = flask.Flask(__name__) app = flask.Flask(__name__)
try: try:
app.config.from_json('missing.json') app.config.from_json('missing.json')
@ -150,22 +149,26 @@ class TestConfig(object):
assert 0, 'expected config' assert 0, 'expected config'
assert not app.config.from_json('missing.json', silent=True) assert not app.config.from_json('missing.json', silent=True)
def test_custom_config_class(self):
def test_custom_config_class():
class Config(flask.Config): class Config(flask.Config):
pass pass
class Flask(flask.Flask): class Flask(flask.Flask):
config_class = Config config_class = Config
app = Flask(__name__) app = Flask(__name__)
assert isinstance(app.config, Config) assert isinstance(app.config, Config)
app.config.from_object(__name__) app.config.from_object(__name__)
self.common_object_test(app) common_object_test(app)
def test_session_lifetime(self):
def test_session_lifetime():
app = flask.Flask(__name__) app = flask.Flask(__name__)
app.config['PERMANENT_SESSION_LIFETIME'] = 42 app.config['PERMANENT_SESSION_LIFETIME'] = 42
assert app.permanent_session_lifetime.seconds == 42 assert app.permanent_session_lifetime.seconds == 42
def test_get_namespace(self):
def test_get_namespace():
app = flask.Flask(__name__) app = flask.Flask(__name__)
app.config['FOO_OPTION_1'] = 'foo option 1' app.config['FOO_OPTION_1'] = 'foo option 1'
app.config['FOO_OPTION_2'] = 'foo option 2' app.config['FOO_OPTION_2'] = 'foo option 2'
@ -179,113 +182,3 @@ class TestConfig(object):
assert 2 == len(bar_options) assert 2 == len(bar_options)
assert 'bar stuff 1' == bar_options['STUFF_1'] assert 'bar stuff 1' == bar_options['STUFF_1']
assert 'bar stuff 2' == bar_options['STUFF_2'] assert 'bar stuff 2' == bar_options['STUFF_2']
class TestInstance(object):
def test_explicit_instance_paths(self, modules_tmpdir):
with pytest.raises(ValueError) as excinfo:
flask.Flask(__name__, instance_path='instance')
assert 'must be absolute' in str(excinfo.value)
app = flask.Flask(__name__, instance_path=str(modules_tmpdir))
assert app.instance_path == str(modules_tmpdir)
def test_main_module_paths(self, modules_tmpdir, purge_module):
app = modules_tmpdir.join('main_app.py')
app.write('import flask\n\napp = flask.Flask("__main__")')
purge_module('main_app')
from main_app import app
here = os.path.abspath(os.getcwd())
assert app.instance_path == os.path.join(here, 'instance')
def test_uninstalled_module_paths(self, modules_tmpdir, purge_module):
app = modules_tmpdir.join('config_module_app.py').write(
'import os\n'
'import flask\n'
'here = os.path.abspath(os.path.dirname(__file__))\n'
'app = flask.Flask(__name__)\n'
)
purge_module('config_module_app')
from config_module_app import app
assert app.instance_path == str(modules_tmpdir.join('instance'))
def test_uninstalled_package_paths(self, modules_tmpdir, purge_module):
app = modules_tmpdir.mkdir('config_package_app')
init = app.join('__init__.py')
init.write(
'import os\n'
'import flask\n'
'here = os.path.abspath(os.path.dirname(__file__))\n'
'app = flask.Flask(__name__)\n'
)
purge_module('config_package_app')
from config_package_app import app
assert app.instance_path == str(modules_tmpdir.join('instance'))
def test_installed_module_paths(self, modules_tmpdir, modules_tmpdir_prefix,
purge_module, site_packages, limit_loader):
site_packages.join('site_app.py').write(
'import flask\n'
'app = flask.Flask(__name__)\n'
)
purge_module('site_app')
from site_app import app
assert app.instance_path == \
modules_tmpdir.join('var').join('site_app-instance')
def test_installed_package_paths(self, limit_loader, modules_tmpdir,
modules_tmpdir_prefix, purge_module,
monkeypatch):
installed_path = modules_tmpdir.mkdir('path')
monkeypatch.syspath_prepend(installed_path)
app = installed_path.mkdir('installed_package')
init = app.join('__init__.py')
init.write('import flask\napp = flask.Flask(__name__)')
purge_module('installed_package')
from installed_package import app
assert app.instance_path == \
modules_tmpdir.join('var').join('installed_package-instance')
def test_prefix_package_paths(self, limit_loader, modules_tmpdir,
modules_tmpdir_prefix, purge_module,
site_packages):
app = site_packages.mkdir('site_package')
init = app.join('__init__.py')
init.write('import flask\napp = flask.Flask(__name__)')
purge_module('site_package')
import site_package
assert site_package.app.instance_path == \
modules_tmpdir.join('var').join('site_package-instance')
def test_egg_installed_paths(self, install_egg, modules_tmpdir,
modules_tmpdir_prefix):
modules_tmpdir.mkdir('site_egg').join('__init__.py').write(
'import flask\n\napp = flask.Flask(__name__)'
)
install_egg('site_egg')
try:
import site_egg
assert site_egg.app.instance_path == \
str(modules_tmpdir.join('var/').join('site_egg-instance'))
finally:
if 'site_egg' in sys.modules:
del sys.modules['site_egg']
if PY2:
def test_meta_path_loader_without_is_package(self):
class Loader(object):
def find_module(self, name):
return self
sys.meta_path.append(Loader())
try:
with pytest.raises(AttributeError):
flask.Flask(__name__)
finally:
sys.meta_path.pop()

132
tests/test_instance_config.py

@ -0,0 +1,132 @@
# -*- coding: utf-8 -*-
"""
tests.test_instance
~~~~~~~~~~~~~~~~~~~
:copyright: (c) 2014 by the Flask Team, see AUTHORS for more details.
:license: BSD, see LICENSE for more details.
"""
import os
import sys
import pytest
import flask
from flask._compat import PY2
def test_explicit_instance_paths(modules_tmpdir):
with pytest.raises(ValueError) as excinfo:
flask.Flask(__name__, instance_path='instance')
assert 'must be absolute' in str(excinfo.value)
app = flask.Flask(__name__, instance_path=str(modules_tmpdir))
assert app.instance_path == str(modules_tmpdir)
def test_main_module_paths(modules_tmpdir, purge_module):
app = modules_tmpdir.join('main_app.py')
app.write('import flask\n\napp = flask.Flask("__main__")')
purge_module('main_app')
from main_app import app
here = os.path.abspath(os.getcwd())
assert app.instance_path == os.path.join(here, 'instance')
def test_uninstalled_module_paths(modules_tmpdir, purge_module):
app = modules_tmpdir.join('config_module_app.py').write(
'import os\n'
'import flask\n'
'here = os.path.abspath(os.path.dirname(__file__))\n'
'app = flask.Flask(__name__)\n'
)
purge_module('config_module_app')
from config_module_app import app
assert app.instance_path == str(modules_tmpdir.join('instance'))
def test_uninstalled_package_paths(modules_tmpdir, purge_module):
app = modules_tmpdir.mkdir('config_package_app')
init = app.join('__init__.py')
init.write(
'import os\n'
'import flask\n'
'here = os.path.abspath(os.path.dirname(__file__))\n'
'app = flask.Flask(__name__)\n'
)
purge_module('config_package_app')
from config_package_app import app
assert app.instance_path == str(modules_tmpdir.join('instance'))
def test_installed_module_paths(modules_tmpdir, modules_tmpdir_prefix,
purge_module, site_packages, limit_loader):
site_packages.join('site_app.py').write(
'import flask\n'
'app = flask.Flask(__name__)\n'
)
purge_module('site_app')
from site_app import app
assert app.instance_path == \
modules_tmpdir.join('var').join('site_app-instance')
def test_installed_package_paths(limit_loader, modules_tmpdir,
modules_tmpdir_prefix, purge_module,
monkeypatch):
installed_path = modules_tmpdir.mkdir('path')
monkeypatch.syspath_prepend(installed_path)
app = installed_path.mkdir('installed_package')
init = app.join('__init__.py')
init.write('import flask\napp = flask.Flask(__name__)')
purge_module('installed_package')
from installed_package import app
assert app.instance_path == \
modules_tmpdir.join('var').join('installed_package-instance')
def test_prefix_package_paths(limit_loader, modules_tmpdir,
modules_tmpdir_prefix, purge_module,
site_packages):
app = site_packages.mkdir('site_package')
init = app.join('__init__.py')
init.write('import flask\napp = flask.Flask(__name__)')
purge_module('site_package')
import site_package
assert site_package.app.instance_path == \
modules_tmpdir.join('var').join('site_package-instance')
def test_egg_installed_paths(install_egg, modules_tmpdir,
modules_tmpdir_prefix):
modules_tmpdir.mkdir('site_egg').join('__init__.py').write(
'import flask\n\napp = flask.Flask(__name__)'
)
install_egg('site_egg')
try:
import site_egg
assert site_egg.app.instance_path == \
str(modules_tmpdir.join('var/').join('site_egg-instance'))
finally:
if 'site_egg' in sys.modules:
del sys.modules['site_egg']
@pytest.mark.skipif(not PY2, reason='This only works under Python 2.')
def test_meta_path_loader_without_is_package():
class Loader(object):
def find_module(self, name):
return self
sys.meta_path.append(Loader())
try:
with pytest.raises(AttributeError):
flask.Flask(__name__)
finally:
sys.meta_path.pop()
Loading…
Cancel
Save