Fixed #17848 -- Added setting_changed signal for cases when TEMPLATE_CONTEXT_PROCESSORS is overriden in tests.

git-svn-id: http://code.djangoproject.com/svn/django/trunk@17885 bcc190cf-cafb-0310-a4f2-bffc1f526a37
This commit is contained in:
Claude Paroz 2012-04-09 13:24:57 +00:00
parent 36ab8ae270
commit 883c38c499
7 changed files with 33 additions and 73 deletions

View File

@ -30,13 +30,9 @@ class AuthContextProcessorTests(TestCase):
Tests that the session is not accessed simply by including
the auth context processor
"""
context._standard_context_processors = None
response = self.client.get('/auth_processor_no_attr_access/')
self.assertContains(response, "Session not accessed")
context._standard_context_processors = None
@override_settings(
MIDDLEWARE_CLASSES=global_settings.MIDDLEWARE_CLASSES,
TEMPLATE_CONTEXT_PROCESSORS=global_settings.TEMPLATE_CONTEXT_PROCESSORS,
@ -46,13 +42,9 @@ class AuthContextProcessorTests(TestCase):
Tests that the session is accessed if the auth context processor
is used and relevant attributes accessed.
"""
context._standard_context_processors = None
response = self.client.get('/auth_processor_attr_access/')
self.assertContains(response, "Session accessed")
context._standard_context_processors = None
def test_perms_attrs(self):
self.client.login(username='super', password='secret')
response = self.client.get('/auth_processor_perms/')

View File

@ -259,8 +259,7 @@ class BaseTest(TestCase):
args=(level,))
response = self.client.post(add_url, data, follow=True)
self.assertRedirects(response, show_url)
self.assertTrue('messages' in response.context)
self.assertEqual(list(response.context['messages']), [])
self.assertFalse('messages' in response.context)
def stored_messages_count(self, storage, response):
"""

View File

@ -1,11 +1,13 @@
from django.conf import settings
from django.db import connections
from django.dispatch import Signal
from django.dispatch import receiver, Signal
from django.template import context
template_rendered = Signal(providing_args=["template", "context"])
setting_changed = Signal(providing_args=["setting", "value"])
@receiver(setting_changed)
def update_connections_time_zone(**kwargs):
if kwargs['setting'] == 'USE_TZ' and settings.TIME_ZONE != 'UTC':
USE_TZ, TIME_ZONE = kwargs['value'], settings.TIME_ZONE
@ -20,4 +22,7 @@ def update_connections_time_zone(**kwargs):
if tz_sql:
conn.cursor().execute(tz_sql, [tz])
setting_changed.connect(update_connections_time_zone)
@receiver(setting_changed)
def clear_context_processors_cache(**kwargs):
if kwargs['setting'] == 'TEMPLATE_CONTEXT_PROCESSORS':
context._standard_context_processors = None

View File

@ -6,7 +6,7 @@ import re
import datetime
import urlparse
from django.conf import settings
from django.conf import settings, global_settings
from django.core import mail
from django.core.exceptions import SuspiciousOperation
from django.core.files import temp as tempfile
@ -23,7 +23,6 @@ from django.contrib.auth import REDIRECT_FIELD_NAME
from django.contrib.auth.models import Group, User, Permission, UNUSABLE_PASSWORD
from django.contrib.contenttypes.models import ContentType
from django.forms.util import ErrorList
from django.template import context as context_module
from django.template.response import TemplateResponse
from django.test import TestCase
from django.utils import formats, translation, unittest
@ -3364,25 +3363,17 @@ class ValidXHTMLTests(TestCase):
urlbit = 'admin'
def setUp(self):
self._context_processors = None
self._use_i18n, settings.USE_I18N = settings.USE_I18N, False
if 'django.core.context_processors.i18n' in settings.TEMPLATE_CONTEXT_PROCESSORS:
self._context_processors = settings.TEMPLATE_CONTEXT_PROCESSORS
cp = list(settings.TEMPLATE_CONTEXT_PROCESSORS)
cp.remove('django.core.context_processors.i18n')
settings.TEMPLATE_CONTEXT_PROCESSORS = tuple(cp)
# Force re-evaluation of the contex processor list
context_module._standard_context_processors = None
self.client.login(username='super', password='secret')
def tearDown(self):
self.client.logout()
if self._context_processors is not None:
settings.TEMPLATE_CONTEXT_PROCESSORS = self._context_processors
# Force re-evaluation of the contex processor list
context_module._standard_context_processors = None
settings.USE_I18N = self._use_i18n
@override_settings(
TEMPLATE_CONTEXT_PROCESSORS=filter(
lambda t:t!='django.core.context_processors.i18n',
global_settings.TEMPLATE_CONTEXT_PROCESSORS),
USE_I18N=False,
)
def testLangNamePresent(self):
response = self.client.get('/test_admin/%s/admin_views/' % self.urlbit)
self.assertFalse(' lang=""' in response.content)

View File

@ -3,13 +3,12 @@ import pickle
import time
from datetime import datetime
from django.utils import unittest
from django.test import RequestFactory, TestCase
from django.conf import settings
import django.template.context
from django.template import Template, Context
from django.template.response import (TemplateResponse, SimpleTemplateResponse,
ContentNotRenderedError)
from django.test.utils import override_settings
def test_processor(request):
return {'processors': 'yes'}
@ -22,32 +21,7 @@ class CustomURLConfMiddleware(object):
request.urlconf = 'regressiontests.templates.alternate_urls'
class BaseTemplateResponseTest(unittest.TestCase):
# tests rely on fact that global context
# processors should only work when RequestContext is used.
def setUp(self):
self.factory = RequestFactory()
self._old_processors = settings.TEMPLATE_CONTEXT_PROCESSORS
self._old_TEMPLATE_DIRS = settings.TEMPLATE_DIRS
settings.TEMPLATE_CONTEXT_PROCESSORS = [test_processor_name]
settings.TEMPLATE_DIRS = (
os.path.join(
os.path.dirname(__file__),
'templates'
),
)
# Force re-evaluation of the contex processor list
django.template.context._standard_context_processors = None
def tearDown(self):
settings.TEMPLATE_DIRS = self._old_TEMPLATE_DIRS
settings.TEMPLATE_CONTEXT_PROCESSORS = self._old_processors
# Force re-evaluation of the contex processor list
django.template.context._standard_context_processors = None
class SimpleTemplateResponseTest(BaseTemplateResponseTest):
class SimpleTemplateResponseTest(TestCase):
def _response(self, template='foo', *args, **kwargs):
return SimpleTemplateResponse(Template(template), *args, **kwargs)
@ -213,7 +187,14 @@ class SimpleTemplateResponseTest(BaseTemplateResponseTest):
unpickled_response = pickle.loads(pickled_response)
repickled_response = pickle.dumps(unpickled_response)
class TemplateResponseTest(BaseTemplateResponseTest):
@override_settings(
TEMPLATE_CONTEXT_PROCESSORS=[test_processor_name],
TEMPLATE_DIRS=(os.path.join(os.path.dirname(__file__),'templates')),
)
class TemplateResponseTest(TestCase):
def setUp(self):
self.factory = RequestFactory()
def _response(self, template='foo', *args, **kwargs):
return TemplateResponse(self.factory.get('/'), Template(template),

View File

@ -37,8 +37,8 @@ from .parser import ParserTests
from .unicode import UnicodeTests
from .nodelist import NodelistTest, ErrorIndexTest
from .smartif import SmartIfTests
from .response import (TemplateResponseTest, BaseTemplateResponseTest,
CacheMiddlewareTest, SimpleTemplateResponseTest, CustomURLConfTest)
from .response import (TemplateResponseTest, CacheMiddlewareTest,
SimpleTemplateResponseTest, CustomURLConfTest)
try:
from .loaders import RenderToStringTest, EggLoaderTest
@ -1738,7 +1738,7 @@ class TemplateTagLoading(unittest.TestCase):
t = template.Template(ttext)
class RequestContextTests(BaseTemplateResponseTest):
class RequestContextTests(unittest.TestCase):
def setUp(self):
templates = {

View File

@ -2,7 +2,12 @@ import warnings
from django.conf import settings
from django.test import TestCase
from django.test.utils import override_settings
@override_settings(
TEMPLATE_CONTEXT_PROCESSORS=('django.core.context_processors.static',),
STATIC_URL='/path/to/static/media/',
)
class ShortcutTests(TestCase):
urls = 'regressiontests.views.generic_urls'
@ -11,21 +16,9 @@ class ShortcutTests(TestCase):
warnings.filterwarnings('ignore', category=DeprecationWarning,
module='django.views.generic.simple')
self.old_STATIC_URL = settings.STATIC_URL
self.old_TEMPLATE_CONTEXT_PROCESSORS = settings.TEMPLATE_CONTEXT_PROCESSORS
settings.STATIC_URL = '/path/to/static/media/'
settings.TEMPLATE_CONTEXT_PROCESSORS = (
'django.core.context_processors.static'
)
def tearDown(self):
self.restore_warnings_state()
def tearDown(self):
settings.STATIC_URL = self.old_STATIC_URL
settings.TEMPLATE_CONTEXT_PROCESSORS = self.old_TEMPLATE_CONTEXT_PROCESSORS
def test_render_to_response(self):
response = self.client.get('/shortcuts/render_to_response/')
self.assertEqual(response.status_code, 200)
@ -74,4 +67,3 @@ class ShortcutTests(TestCase):
def test_render_with_current_app_conflict(self):
self.assertRaises(ValueError, self.client.get, '/shortcuts/render/current_app_conflict/')