test_pagure_lib_mimetype.py 2.3 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273
  1. # -*- coding: utf-8 -*-
  2. """
  3. Tests for :module:`pagure.lib.mimetype`.
  4. """
  5. from __future__ import unicode_literals, absolute_import
  6. import os
  7. import unittest
  8. import sys
  9. from pagure.lib import mimetype
  10. sys.path.insert(
  11. 0, os.path.join(os.path.dirname(os.path.abspath(__file__)), "..")
  12. )
  13. class TestMIMEType(unittest.TestCase):
  14. def test_guess_type(self):
  15. dataset = [
  16. ("hello.html", None, "text/html", None),
  17. ("hello.html", b"#!", "text/html", "ascii"),
  18. ("hello", b"#!", "text/plain", "ascii"),
  19. ("hello.jpg", None, "image/jpeg", None),
  20. ("hello.jpg", b"#!", "image/jpeg", None),
  21. ("hello.jpg", b"\0", "image/jpeg", None),
  22. (None, "😋".encode("utf-8"), "text/plain", "utf-8"),
  23. ("hello", b"\0", "application/octet-stream", None),
  24. ("hello", None, None, None),
  25. ]
  26. for data in dataset:
  27. result = mimetype.guess_type(data[0], data[1])
  28. self.assertEqual(
  29. (data[2], data[3]),
  30. result,
  31. "Wrong mimetype for filename %r and content %r"
  32. % (data[0], data[1]),
  33. )
  34. def test_get_html_file_headers(self):
  35. result = mimetype.get_type_headers("hello.html", None)
  36. expected = {
  37. "Content-Type": "application/octet-stream",
  38. "Content-Disposition": "attachment",
  39. "X-Content-Type-Options": "nosniff",
  40. }
  41. self.assertEqual(result, expected)
  42. def test_get_normal_headers(self):
  43. dataset = [
  44. ("hello", b"#!", "text/plain; charset=ascii"),
  45. ("hello.jpg", None, "image/jpeg"),
  46. ("hello.jpg", b"#!", "image/jpeg"),
  47. ("hello.jpg", b"\0", "image/jpeg"),
  48. (None, "😋".encode("utf-8"), "text/plain; charset=utf-8"),
  49. ("hello", b"\0", "application/octet-stream"),
  50. ]
  51. for data in dataset:
  52. result = mimetype.get_type_headers(data[0], data[1])
  53. self.assertEqual(
  54. result["Content-Type"],
  55. data[2],
  56. "Wrong Content-Type for filename %r and content %r"
  57. % (data[0], data[1]),
  58. )
  59. def test_get_none_header(self):
  60. self.assertIsNone(mimetype.get_type_headers("hello", None))
  61. if __name__ == "__main__":
  62. unittest.main(verbosity=2)