This change preserves backwards-compatibility for a very common misuse of render_to_response which even occurred in the official documentation. It fixes that misuse wherever it happened in the code base and docs. Context.__init__ is documented as accepting a dict and nothing else. Since Context is dict-like, Context(Context({})) could work to some extent. However, things get complicated with RequestContext and that gets in the way of refactoring the template engine. This is the real rationale for this change.
81 lines
3.7 KiB
Python
81 lines
3.7 KiB
Python
from django.test import TestCase, override_settings
|
|
|
|
|
|
@override_settings(
|
|
TEMPLATE_CONTEXT_PROCESSORS=('django.core.context_processors.static',),
|
|
STATIC_URL='/path/to/static/media/',
|
|
ROOT_URLCONF='shortcuts.urls',
|
|
)
|
|
class ShortcutTests(TestCase):
|
|
|
|
def test_render_to_response(self):
|
|
response = self.client.get('/render_to_response/')
|
|
self.assertEqual(response.status_code, 200)
|
|
self.assertEqual(response.content, b'FOO.BAR..\n')
|
|
self.assertEqual(response['Content-Type'], 'text/html; charset=utf-8')
|
|
|
|
def test_render_to_response_with_request_context(self):
|
|
response = self.client.get('/render_to_response/request_context/')
|
|
self.assertEqual(response.status_code, 200)
|
|
self.assertEqual(response.content, b'FOO.BAR../path/to/static/media/\n')
|
|
self.assertEqual(response['Content-Type'], 'text/html; charset=utf-8')
|
|
|
|
def test_render_to_response_with_content_type(self):
|
|
response = self.client.get('/render_to_response/content_type/')
|
|
self.assertEqual(response.status_code, 200)
|
|
self.assertEqual(response.content, b'FOO.BAR..\n')
|
|
self.assertEqual(response['Content-Type'], 'application/x-rendertest')
|
|
|
|
def test_render_to_response_with_dirs(self):
|
|
response = self.client.get('/render_to_response/dirs/')
|
|
self.assertEqual(response.status_code, 200)
|
|
self.assertEqual(response.content, b'spam eggs\n')
|
|
self.assertEqual(response['Content-Type'], 'text/html; charset=utf-8')
|
|
|
|
def test_render_to_response_with_context_instance_misuse(self):
|
|
"""
|
|
For backwards-compatibility, ensure that it's possible to pass a
|
|
RequestContext instance in the dictionary argument instead of the
|
|
context_instance argument.
|
|
"""
|
|
response = self.client.get('/render_to_response/context_instance_misuse/')
|
|
self.assertContains(response, 'context processor output')
|
|
|
|
def test_render(self):
|
|
response = self.client.get('/render/')
|
|
self.assertEqual(response.status_code, 200)
|
|
self.assertEqual(response.content, b'FOO.BAR../path/to/static/media/\n')
|
|
self.assertEqual(response['Content-Type'], 'text/html; charset=utf-8')
|
|
self.assertEqual(response.context.current_app, None)
|
|
|
|
def test_render_with_base_context(self):
|
|
response = self.client.get('/render/base_context/')
|
|
self.assertEqual(response.status_code, 200)
|
|
self.assertEqual(response.content, b'FOO.BAR..\n')
|
|
self.assertEqual(response['Content-Type'], 'text/html; charset=utf-8')
|
|
|
|
def test_render_with_content_type(self):
|
|
response = self.client.get('/render/content_type/')
|
|
self.assertEqual(response.status_code, 200)
|
|
self.assertEqual(response.content, b'FOO.BAR../path/to/static/media/\n')
|
|
self.assertEqual(response['Content-Type'], 'application/x-rendertest')
|
|
|
|
def test_render_with_status(self):
|
|
response = self.client.get('/render/status/')
|
|
self.assertEqual(response.status_code, 403)
|
|
self.assertEqual(response.content, b'FOO.BAR../path/to/static/media/\n')
|
|
|
|
def test_render_with_current_app(self):
|
|
response = self.client.get('/render/current_app/')
|
|
self.assertEqual(response.context.current_app, "foobar_app")
|
|
|
|
def test_render_with_dirs(self):
|
|
response = self.client.get('/render/dirs/')
|
|
self.assertEqual(response.status_code, 200)
|
|
self.assertEqual(response.content, b'spam eggs\n')
|
|
self.assertEqual(response['Content-Type'], 'text/html; charset=utf-8')
|
|
|
|
def test_render_with_current_app_conflict(self):
|
|
with self.assertRaises(ValueError):
|
|
self.client.get('/render/current_app_conflict/')
|