test_conditional_content_removal.py 1.9 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556
  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"")