Better handling for test_request_context don't just append the port.

Also implemented a proper initial environment to use with
`Flask.test_app()` based on the application's configuration.

Signed-off-by: Armin Ronacher <armin.ronacher@active-4.com>
This commit is contained in:
Pedro Algarvio 2010-10-22 16:13:35 +01:00 committed by Armin Ronacher
parent 1f6321a1cb
commit a327452540
3 changed files with 132 additions and 7 deletions

View file

@ -10,7 +10,7 @@
:license: BSD, see LICENSE for more details.
"""
from werkzeug import Client
from werkzeug import Client, EnvironBuilder
from flask import _request_ctx_stack
@ -29,9 +29,31 @@ class FlaskClient(Client):
self.context_preserved = False
kwargs.setdefault('environ_overrides', {}) \
['flask._preserve_context'] = self.preserve_context
as_tuple = kwargs.pop('as_tuple', False)
buffered = kwargs.pop('buffered', False)
follow_redirects = kwargs.pop('follow_redirects', False)
builder = EnvironBuilder(*args, **kwargs)
if self.application.config.get('SERVER_NAME'):
server_name = self.application.config.get('SERVER_NAME')
if ':' not in server_name:
http_host, http_port = server_name, None
else:
http_host, http_port = server_name.split(':', 1)
if builder.base_url == 'http://localhost/':
# Default Generated Base URL
if http_port != None:
builder.host = http_host + ':' + http_port
else:
builder.host = http_host
old = _request_ctx_stack.top
try:
return Client.open(self, *args, **kwargs)
return Client.open(self, builder,
as_tuple=as_tuple,
buffered=buffered,
follow_redirects=follow_redirects)
finally:
self.context_preserved = _request_ctx_stack.top is not old