test_conditional_content_removal.py 1.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657
  1. import gzip
  2. from django.http import HttpRequest, HttpResponse, StreamingHttpResponse
  3. from django.test import SimpleTestCase
  4. from django.test.client import conditional_content_removal
  5. class ConditionalContentTests(SimpleTestCase):
  6. def test_conditional_content_removal(self):
  7. """
  8. Content is removed from regular and streaming responses with a
  9. status_code of 100-199, 204, 304, or a method of "HEAD".
  10. """
  11. req = HttpRequest()
  12. # Do nothing for 200 responses.
  13. res = HttpResponse('abc')
  14. conditional_content_removal(req, res)
  15. self.assertEqual(res.content, b'abc')
  16. res = StreamingHttpResponse(['abc'])
  17. conditional_content_removal(req, res)
  18. self.assertEqual(b''.join(res), b'abc')
  19. # Strip content for some status codes.
  20. for status_code in (100, 150, 199, 204, 304):
  21. res = HttpResponse('abc', status=status_code)
  22. conditional_content_removal(req, res)
  23. self.assertEqual(res.content, b'')
  24. res = StreamingHttpResponse(['abc'], status=status_code)
  25. conditional_content_removal(req, res)
  26. self.assertEqual(b''.join(res), b'')
  27. # Issue #20472
  28. abc = gzip.compress(b'abc')
  29. res = HttpResponse(abc, status=304)
  30. res['Content-Encoding'] = 'gzip'
  31. conditional_content_removal(req, res)
  32. self.assertEqual(res.content, b'')
  33. res = StreamingHttpResponse([abc], status=304)
  34. res['Content-Encoding'] = 'gzip'
  35. conditional_content_removal(req, res)
  36. self.assertEqual(b''.join(res), b'')
  37. # Strip content for HEAD requests.
  38. req.method = 'HEAD'
  39. res = HttpResponse('abc')
  40. conditional_content_removal(req, res)
  41. self.assertEqual(res.content, b'')
  42. res = StreamingHttpResponse(['abc'])
  43. conditional_content_removal(req, res)
  44. self.assertEqual(b''.join(res), b'')