summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--django/test/testcases.py14
-rw-r--r--tests/regressiontests/test_client_regress/models.py33
2 files changed, 47 insertions, 0 deletions
diff --git a/django/test/testcases.py b/django/test/testcases.py
index 010850d42a..ee22ac219e 100644
--- a/django/test/testcases.py
+++ b/django/test/testcases.py
@@ -500,6 +500,13 @@ class TransactionTestCase(SimpleTestCase):
If ``count`` is None, the count doesn't matter - the assertion is true
if the text occurs at least once in the response.
"""
+
+ # If the response supports deferred rendering and hasn't been rendered
+ # yet, then ensure that it does get rendered before proceeding further.
+ if (hasattr(response, 'render') and callable(response.render)
+ and not response.is_rendered):
+ response.render()
+
if msg_prefix:
msg_prefix += ": "
@@ -523,6 +530,13 @@ class TransactionTestCase(SimpleTestCase):
successfully, (i.e., the HTTP status code was as expected), and that
``text`` doesn't occurs in the content of the response.
"""
+
+ # If the response supports deferred rendering and hasn't been rendered
+ # yet, then ensure that it does get rendered before proceeding further.
+ if (hasattr(response, 'render') and callable(response.render)
+ and not response.is_rendered):
+ response.render()
+
if msg_prefix:
msg_prefix += ": "
diff --git a/tests/regressiontests/test_client_regress/models.py b/tests/regressiontests/test_client_regress/models.py
index ff851971ff..b1e5bc4ff0 100644
--- a/tests/regressiontests/test_client_regress/models.py
+++ b/tests/regressiontests/test_client_regress/models.py
@@ -14,6 +14,8 @@ import django.template.context
from django.test import Client, TestCase
from django.test.client import encode_file, RequestFactory
from django.test.utils import ContextList, override_settings
+from django.template.response import SimpleTemplateResponse
+from django.http import HttpResponse
class AssertContainsTests(TestCase):
@@ -130,6 +132,37 @@ class AssertContainsTests(TestCase):
self.assertNotContains(r, u'はたけ')
self.assertNotContains(r, '\xe3\x81\xaf\xe3\x81\x9f\xe3\x81\x91'.decode('utf-8'))
+ def test_assert_contains_renders_template_response(self):
+ """ Test that we can pass in an unrendered SimpleTemplateReponse
+ without throwing an error.
+ Refs #15826.
+ """
+ response = SimpleTemplateResponse(Template('Hello'), status=200)
+ self.assertContains(response, 'Hello')
+
+ def test_assert_contains_using_non_template_response(self):
+ """ Test that auto-rendering does not affect responses that aren't
+ instances (or subclasses) of SimpleTemplateResponse.
+ Refs #15826.
+ """
+ response = HttpResponse('Hello')
+ self.assertContains(response, 'Hello')
+
+ def test_assert_not_contains_renders_template_response(self):
+ """ Test that we can pass in an unrendered SimpleTemplateReponse
+ without throwing an error.
+ Refs #15826.
+ """
+ response = SimpleTemplateResponse(Template('Hello'), status=200)
+ self.assertNotContains(response, 'Bye')
+
+ def test_assert_not_contains_using_non_template_response(self):
+ """ Test that auto-rendering does not affect responses that aren't
+ instances (or subclasses) of SimpleTemplateResponse.
+ Refs #15826.
+ """
+ response = HttpResponse('Hello')
+ self.assertNotContains(response, 'Bye')
class AssertTemplateUsedTests(TestCase):
fixtures = ['testdata.json']