Fixed #7836 -- Modified strategy used by the test client to check for session functionality so it is useful in environments where the DB-based session backend isn't being used. Thanks trevor for the report.

git-svn-id: http://code.djangoproject.com/svn/django/trunk@16386 bcc190cf-cafb-0310-a4f2-bffc1f526a37
This commit is contained in:
Ramiro Morales 2011-06-12 16:33:40 +00:00
parent 050e11956f
commit 84c71148e3
3 changed files with 18 additions and 5 deletions

View File

@ -356,7 +356,7 @@ class Client(RequestFactory):
""" """
Obtains the current session variables. Obtains the current session variables.
""" """
if 'django.contrib.sessions' in settings.INSTALLED_APPS: if 'django.contrib.sessions.middleware.SessionMiddleware' in settings.MIDDLEWARE_CLASSES:
engine = import_module(settings.SESSION_ENGINE) engine = import_module(settings.SESSION_ENGINE)
cookie = self.cookies.get(settings.SESSION_COOKIE_NAME, None) cookie = self.cookies.get(settings.SESSION_COOKIE_NAME, None)
if cookie: if cookie:
@ -504,7 +504,7 @@ class Client(RequestFactory):
""" """
user = authenticate(**credentials) user = authenticate(**credentials)
if user and user.is_active \ if user and user.is_active \
and 'django.contrib.sessions' in settings.INSTALLED_APPS: and 'django.contrib.sessions.middleware.SessionMiddleware' in settings.MIDDLEWARE_CLASSES:
engine = import_module(settings.SESSION_ENGINE) engine = import_module(settings.SESSION_ENGINE)
# Create a fake request to store login details. # Create a fake request to store login details.

View File

@ -13,7 +13,7 @@ from django.template import (TemplateDoesNotExist, TemplateSyntaxError,
import django.template.context import django.template.context
from django.test import Client, TestCase from django.test import Client, TestCase
from django.test.client import encode_file, RequestFactory from django.test.client import encode_file, RequestFactory
from django.test.utils import ContextList from django.test.utils import ContextList, override_settings
class AssertContainsTests(TestCase): class AssertContainsTests(TestCase):
@ -518,6 +518,19 @@ class SessionEngineTests(TestCase):
self.assertEqual(response.status_code, 200) self.assertEqual(response.status_code, 200)
self.assertEqual(response.context['user'].username, 'testclient') self.assertEqual(response.context['user'].username, 'testclient')
# Remove the 'session' contrib app from INSTALLED_APPS
@override_settings(INSTALLED_APPS=tuple(filter(lambda a: a!='django.contrib.sessions', settings.INSTALLED_APPS)))
class NoSessionsAppInstalled(SessionEngineTests):
"""#7836 - Test client can exercise sessions even when 'django.contrib.sessions' isn't installed."""
def test_session(self):
# This request sets a session variable.
response = self.client.get('/test_client_regress/set_session/')
self.assertEqual(response.status_code, 200)
self.assertEqual(self.client.session['session_var'], 'YES')
class URLEscapingTests(TestCase): class URLEscapingTests(TestCase):
def test_simple_argument_get(self): def test_simple_argument_get(self):
"Get a view that has a simple string argument" "Get a view that has a simple string argument"

View File

@ -2,7 +2,7 @@ from django.contrib.sessions.backends.base import SessionBase
class SessionStore(SessionBase): class SessionStore(SessionBase):
""" """
A simple cookie-based session storage implemenation. A simple cookie-based session storage implementation.
The session key is actually the session data, pickled and encoded. The session key is actually the session data, pickled and encoded.
This means that saving the session will change the session key. This means that saving the session will change the session key.
@ -27,4 +27,4 @@ class SessionStore(SessionBase):
return self.decode(self.session_key) return self.decode(self.session_key)
except: except:
self.modified = True self.modified = True
return {} return {}