test_logging.py 2.8 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182
  1. import logging
  2. from django.template import Engine, Variable, VariableDoesNotExist
  3. from django.test import SimpleTestCase
  4. class TestHandler(logging.Handler):
  5. def __init__(self):
  6. super().__init__()
  7. self.log_record = None
  8. def emit(self, record):
  9. self.log_record = record
  10. class BaseTemplateLoggingTestCase(SimpleTestCase):
  11. def setUp(self):
  12. self.test_handler = TestHandler()
  13. self.logger = logging.getLogger('django.template')
  14. self.original_level = self.logger.level
  15. self.logger.addHandler(self.test_handler)
  16. self.logger.setLevel(self.loglevel)
  17. def tearDown(self):
  18. self.logger.removeHandler(self.test_handler)
  19. self.logger.level = self.original_level
  20. class VariableResolveLoggingTests(BaseTemplateLoggingTestCase):
  21. loglevel = logging.DEBUG
  22. def test_log_on_variable_does_not_exist_silent(self):
  23. class TestObject:
  24. class SilentDoesNotExist(Exception):
  25. silent_variable_failure = True
  26. @property
  27. def template_name(self):
  28. return "template_name"
  29. @property
  30. def template(self):
  31. return Engine().from_string('')
  32. @property
  33. def article(self):
  34. raise TestObject.SilentDoesNotExist("Attribute does not exist.")
  35. def __iter__(self):
  36. return iter(attr for attr in dir(TestObject) if attr[:2] != "__")
  37. def __getitem__(self, item):
  38. return self.__dict__[item]
  39. Variable('article').resolve(TestObject())
  40. self.assertEqual(
  41. self.test_handler.log_record.getMessage(),
  42. "Exception while resolving variable 'article' in template 'template_name'."
  43. )
  44. self.assertIsNotNone(self.test_handler.log_record.exc_info)
  45. raised_exception = self.test_handler.log_record.exc_info[1]
  46. self.assertEqual(str(raised_exception), 'Attribute does not exist.')
  47. def test_log_on_variable_does_not_exist_not_silent(self):
  48. with self.assertRaises(VariableDoesNotExist):
  49. Variable('article.author').resolve({'article': {'section': 'News'}})
  50. self.assertEqual(
  51. self.test_handler.log_record.getMessage(),
  52. "Exception while resolving variable 'author' in template 'unknown'."
  53. )
  54. self.assertIsNotNone(self.test_handler.log_record.exc_info)
  55. raised_exception = self.test_handler.log_record.exc_info[1]
  56. self.assertEqual(
  57. str(raised_exception),
  58. "Failed lookup for key [author] in {'section': 'News'}"
  59. )
  60. def test_no_log_when_variable_exists(self):
  61. Variable('article.section').resolve({'article': {'section': 'News'}})
  62. self.assertIsNone(self.test_handler.log_record)