summaryrefslogtreecommitdiff
path: root/tests
diff options
context:
space:
mode:
authorTim Graham <timograham@gmail.com>2015-08-18 17:57:01 -0400
committerTim Graham <timograham@gmail.com>2015-08-20 10:24:19 -0400
commit867d287b3acfdb6b7de0f193b86b93ec52d034e5 (patch)
treed3a7ed5bda7ab0505a9554dda1e65c8651cd58fc /tests
parent333cbdcd2de4546e33ad50ebd8b67e1a1e87aeec (diff)
Added a test to ensure empty sessions are saved.
Diffstat (limited to 'tests')
-rw-r--r--tests/sessions_tests/tests.py39
1 files changed, 39 insertions, 0 deletions
diff --git a/tests/sessions_tests/tests.py b/tests/sessions_tests/tests.py
index 713ff9e553..76e625aa76 100644
--- a/tests/sessions_tests/tests.py
+++ b/tests/sessions_tests/tests.py
@@ -695,6 +695,45 @@ class SessionMiddlewareTests(TestCase):
# The session is accessed so "Vary: Cookie" should be set.
self.assertEqual(response['Vary'], 'Cookie')
+ def test_empty_session_saved(self):
+ """"
+ If a session is emptied of data but still has a key, it should still
+ be updated.
+ """
+ request = RequestFactory().get('/')
+ response = HttpResponse('Session test')
+ middleware = SessionMiddleware()
+
+ # Set a session key and some data.
+ middleware.process_request(request)
+ request.session['foo'] = 'bar'
+ # Handle the response through the middleware.
+ response = middleware.process_response(request, response)
+ self.assertEqual(tuple(request.session.items()), (('foo', 'bar'),))
+ # A cookie should be set, along with Vary: Cookie.
+ self.assertIn(
+ 'Set-Cookie: sessionid=%s' % request.session.session_key,
+ str(response.cookies)
+ )
+ self.assertEqual(response['Vary'], 'Cookie')
+
+ # Empty the session data.
+ del request.session['foo']
+ # Handle the response through the middleware.
+ response = HttpResponse('Session test')
+ response = middleware.process_response(request, response)
+ self.assertEqual(dict(request.session.values()), {})
+ session = Session.objects.get(session_key=request.session.session_key)
+ self.assertEqual(session.get_decoded(), {})
+ # While the session is empty, it hasn't been flushed so a cookie should
+ # still be set, along with Vary: Cookie.
+ self.assertGreater(len(request.session.session_key), 8)
+ self.assertIn(
+ 'Set-Cookie: sessionid=%s' % request.session.session_key,
+ str(response.cookies)
+ )
+ self.assertEqual(response['Vary'], 'Cookie')
+
# Don't need DB flushing for these tests, so can use unittest.TestCase as base class
class CookieSessionTests(SessionTestsMixin, unittest.TestCase):