summaryrefslogtreecommitdiff
path: root/tests/test_client
diff options
context:
space:
mode:
authorTim Graham <timograham@gmail.com>2016-04-25 07:56:07 -0400
committerTim Graham <timograham@gmail.com>2016-04-25 07:56:07 -0400
commitbb0b4b705b508451567bcada9106b91b8fca9e86 (patch)
treee7239192a52349d084f621d7bf6ffe656447de80 /tests/test_client
parentbd145e7209a0e628cced10384bd6f62d65c0f211 (diff)
Fixed #26052 -- Moved conditional_content_removal() processing to the test client.
Diffstat (limited to 'tests/test_client')
-rw-r--r--tests/test_client/test_conditional_content_removal.py71
1 files changed, 71 insertions, 0 deletions
diff --git a/tests/test_client/test_conditional_content_removal.py b/tests/test_client/test_conditional_content_removal.py
new file mode 100644
index 0000000000..cc5bdb69ed
--- /dev/null
+++ b/tests/test_client/test_conditional_content_removal.py
@@ -0,0 +1,71 @@
+from __future__ import unicode_literals
+
+import gzip
+import io
+
+from django.http import HttpRequest, HttpResponse, StreamingHttpResponse
+from django.test import SimpleTestCase
+from django.test.client import conditional_content_removal
+
+
+# based on Python 3.3's gzip.compress
+def gzip_compress(data):
+ buf = io.BytesIO()
+ f = gzip.GzipFile(fileobj=buf, mode='wb', compresslevel=0)
+ try:
+ f.write(data)
+ finally:
+ f.close()
+ return buf.getvalue()
+
+
+class ConditionalContentTests(SimpleTestCase):
+
+ def test_conditional_content_removal(self):
+ """
+ Content is removed from regular and streaming responses with a
+ status_code of 100-199, 204, 304, or a method of "HEAD".
+ """
+ req = HttpRequest()
+
+ # Do nothing for 200 responses.
+ res = HttpResponse('abc')
+ conditional_content_removal(req, res)
+ self.assertEqual(res.content, b'abc')
+
+ res = StreamingHttpResponse(['abc'])
+ conditional_content_removal(req, res)
+ self.assertEqual(b''.join(res), b'abc')
+
+ # Strip content for some status codes.
+ for status_code in (100, 150, 199, 204, 304):
+ res = HttpResponse('abc', status=status_code)
+ conditional_content_removal(req, res)
+ self.assertEqual(res.content, b'')
+
+ res = StreamingHttpResponse(['abc'], status=status_code)
+ conditional_content_removal(req, res)
+ self.assertEqual(b''.join(res), b'')
+
+ # Issue #20472
+ abc = gzip_compress(b'abc')
+ res = HttpResponse(abc, status=304)
+ res['Content-Encoding'] = 'gzip'
+ conditional_content_removal(req, res)
+ self.assertEqual(res.content, b'')
+
+ res = StreamingHttpResponse([abc], status=304)
+ res['Content-Encoding'] = 'gzip'
+ conditional_content_removal(req, res)
+ self.assertEqual(b''.join(res), b'')
+
+ # Strip content for HEAD requests.
+ req.method = 'HEAD'
+
+ res = HttpResponse('abc')
+ conditional_content_removal(req, res)
+ self.assertEqual(res.content, b'')
+
+ res = StreamingHttpResponse(['abc'])
+ conditional_content_removal(req, res)
+ self.assertEqual(b''.join(res), b'')