test_logging.py 2.2 KB

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