test_pagure_lib_mimetype.py 2.8 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192939495
  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. cchardet = None
  10. try:
  11. import cchardet
  12. except ImportError:
  13. pass
  14. from pagure.lib import mimetype
  15. sys.path.insert(
  16. 0, os.path.join(os.path.dirname(os.path.abspath(__file__)), "..")
  17. )
  18. class TestMIMEType(unittest.TestCase):
  19. def test_guess_type(self):
  20. dataset = [
  21. ("hello.html", None, "text/html", None),
  22. (
  23. "hello.html",
  24. b"#!",
  25. "text/html",
  26. "ascii" if cchardet is None else "utf-8",
  27. ),
  28. (
  29. "hello",
  30. b"#!",
  31. "text/plain",
  32. "ascii" if cchardet is None else "utf-8",
  33. ),
  34. ("hello.jpg", None, "image/jpeg", None),
  35. ("hello.jpg", b"#!", "image/jpeg", None),
  36. ("hello.jpg", b"\0", "image/jpeg", None),
  37. (None, "😋".encode("utf-8"), "text/plain", "utf-8"),
  38. ("hello", b"\0", "application/octet-stream", None),
  39. ("hello", None, None, None),
  40. ]
  41. for data in dataset:
  42. result = mimetype.guess_type(data[0], data[1])
  43. self.assertEqual(
  44. (data[2], data[3]),
  45. result,
  46. "Wrong mimetype for filename %r and content %r"
  47. % (data[0], data[1]),
  48. )
  49. def test_get_html_file_headers(self):
  50. result = mimetype.get_type_headers("hello.html", None)
  51. expected = {
  52. "Content-Type": "application/octet-stream",
  53. "Content-Disposition": "attachment",
  54. "X-Content-Type-Options": "nosniff",
  55. }
  56. self.assertEqual(result, expected)
  57. def test_get_normal_headers(self):
  58. dataset = [
  59. (
  60. "hello",
  61. b"#!",
  62. "text/plain; charset=ascii"
  63. if cchardet is None
  64. else "text/plain; charset=utf-8",
  65. ),
  66. ("hello.jpg", None, "image/jpeg"),
  67. ("hello.jpg", b"#!", "image/jpeg"),
  68. ("hello.jpg", b"\0", "image/jpeg"),
  69. (None, "😋".encode("utf-8"), "text/plain; charset=utf-8"),
  70. ("hello", b"\0", "application/octet-stream"),
  71. ]
  72. for data in dataset:
  73. result = mimetype.get_type_headers(data[0], data[1])
  74. self.assertEqual(
  75. result["Content-Type"],
  76. data[2],
  77. "Wrong Content-Type for filename %r and content %r"
  78. % (data[0], data[1]),
  79. )
  80. def test_get_none_header(self):
  81. self.assertIsNone(mimetype.get_type_headers("hello", None))
  82. if __name__ == "__main__":
  83. unittest.main(verbosity=2)