From 88883aa6db3b27f132000a4cf2a99c1fbbe941c9 Mon Sep 17 00:00:00 2001 From: Pedro Algarvio Date: Thu, 21 Oct 2010 20:31:13 +0100 Subject: [PATCH] Fix for Flask's ticket 126. A proper environment is now built to use with `test_request_context()`. Signed-off-by: Armin Ronacher --- flask/app.py | 9 +++++++++ tests/flask_tests.py | 17 +++++++++++++++++ 2 files changed, 26 insertions(+) diff --git a/flask/app.py b/flask/app.py index dbb64646..2ca641e3 100644 --- a/flask/app.py +++ b/flask/app.py @@ -863,6 +863,15 @@ class Flask(_PackageBoundObject): function accepts the same arguments). """ from werkzeug import create_environ + environ_overrides = kwargs.setdefault('environ_overrides', {}) + if self.config.get('SERVER_NAME'): + server_name = self.config.get('SERVER_NAME') + if ':' not in server_name: + server_name += ':80' + http_host, http_port = server_name.split(':') + environ_overrides.setdefault('SERVER_NAME', server_name) + environ_overrides.setdefault('HTTP_HOST', server_name) + environ_overrides.setdefault('SERVER_PORT', http_port) return self.request_context(create_environ(*args, **kwargs)) def wsgi_app(self, environ, start_response): diff --git a/tests/flask_tests.py b/tests/flask_tests.py index 8eecafc0..eac3efca 100644 --- a/tests/flask_tests.py +++ b/tests/flask_tests.py @@ -501,6 +501,23 @@ class BasicFunctionalityTestCase(unittest.TestCase): self.assertEqual(repr(flask.g), '') self.assertFalse(flask.g) + def test_proper_test_request_context(self): + app = flask.Flask(__name__) + app.config.update( + SERVER_NAME='localhost.localdomain:5000' + ) + @app.route('/') + def index(): + return None + + with app.test_request_context('/'): + assert flask.url_for('index', _external=True) == 'http://localhost.localdomain:5000/' + + def testit(): + with app.test_request_context('/', environ_overrides={'HTTP_HOST': 'localhost'}): + pass + self.assertRaises(ValueError, testit) + class JSONTestCase(unittest.TestCase):