Skip to content

Instantly share code, notes, and snippets.

@plaes
Created November 9, 2011 18:54
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save plaes/1352507 to your computer and use it in GitHub Desktop.
Save plaes/1352507 to your computer and use it in GitHub Desktop.
Flask session/cookie disappearance after redirect issue - werkzeug testcase
diff --git a/werkzeug/testsuite/test.py b/werkzeug/testsuite/test.py
index 795de90..5ee8864 100644
--- a/werkzeug/testsuite/test.py
+++ b/werkzeug/testsuite/test.py
@@ -26,7 +26,7 @@ from werkzeug.datastructures import MultiDict
def cookie_app(environ, start_response):
- """A WSGI application which sets a cookie, and returns as a ersponse any
+ """A WSGI application which sets a cookie, and returns as a response any
cookie which exists.
"""
response = Response(environ.get('HTTP_COOKIE', 'No Cookie'),
@@ -34,6 +34,18 @@ def cookie_app(environ, start_response):
response.set_cookie('test', 'test')
return response(environ, start_response)
+def cookie_redirect_app(environ, start_response):
+ """A WSGI application which issues redirect on POST requests and prints
+ out cookie information with GET requests.
+ """
+ req = Request(environ)
+ if req.method == 'POST':
+ resp = redirect('http://localhost/')
+ return resp(environ, start_response)
+ response = Response(environ.get('HTTP_COOKIE', 'No Cookie!'),
+ mimetype='text/plain')
+ return response(environ, start_response)
+
def redirect_loop_app(environ, start_response):
response = redirect('http://localhost/some/redirect/')
@@ -126,6 +138,23 @@ class TestTestCase(WerkzeugTestCase):
appiter, code, headers = c.open('/path2')
assert ''.join(appiter) == 'test=test'
+ def test_cookie_redirect(self):
+ c = Client(cookie_redirect_app)
+ # Initially check that no cookie is set
+ appiter, code, headers = c.open('/')
+ assert ''.join(appiter) == 'No Cookie!'
+ # Set the cookie and do the GET request
+ c.set_cookie('localhost', 'foo', 'bar')
+ appiter, code, headers = c.open('/')
+ assert list(appiter) == ['foo=bar']
+ # Now do the redirect and check whether cookie still exists
+ appiter, code, headers = c.post('/', follow_redirects=True, data='')
+ assert list(appiter) == ['foo=bar']
+ # One more time, just to be sure :S
+ c.set_cookie('localhost', 'foo', 'nobar')
+ appiter, code, headers = c.post('/', follow_redirects=True, data='')
+ assert list(appiter) == ['foo=nobar']
+
def test_environ_builder_basics(self):
b = EnvironBuilder()
assert b.content_type is None
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment