60 lines
1.8 KiB
Python
60 lines
1.8 KiB
Python
# -*- coding: utf-8 -*-
|
|
import logging
|
|
|
|
try:
|
|
from cStringIO import StringIO # NOQA
|
|
except ImportError:
|
|
from io import StringIO # NOQA
|
|
|
|
try:
|
|
import importlib # NOQA
|
|
except ImportError:
|
|
from django.utils import importlib # NOQA
|
|
|
|
from django.core.management import call_command
|
|
from django.test import TestCase
|
|
|
|
|
|
class MockLoggingHandler(logging.Handler):
|
|
""" Mock logging handler to check for expected logs. """
|
|
|
|
def __init__(self, *args, **kwargs):
|
|
self.reset()
|
|
logging.Handler.__init__(self, *args, **kwargs)
|
|
|
|
def emit(self, record):
|
|
self.messages[record.levelname.lower()].append(record.getMessage())
|
|
|
|
def reset(self):
|
|
self.messages = {
|
|
'debug': [],
|
|
'info': [],
|
|
'warning': [],
|
|
'error': [],
|
|
'critical': [],
|
|
}
|
|
|
|
|
|
class CommandTest(TestCase):
|
|
def test_error_logging(self):
|
|
# Ensure command errors are properly logged and reraised
|
|
from django_extensions.management.base import logger
|
|
logger.addHandler(MockLoggingHandler())
|
|
module_path = "django_extensions.tests.management.commands.error_raising_command"
|
|
module = importlib.import_module(module_path)
|
|
error_raising_command = module.Command()
|
|
self.assertRaises(Exception, error_raising_command.execute)
|
|
handler = logger.handlers[0]
|
|
self.assertEqual(len(handler.messages['error']), 1)
|
|
|
|
|
|
class ShowTemplateTagsTests(TestCase):
|
|
def test_some_output(self):
|
|
out = StringIO()
|
|
call_command('show_templatetags', stdout=out)
|
|
output = out.getvalue()
|
|
# Once django_extension is installed during tests it should appear with
|
|
# its templatetags
|
|
self.assertIn('django_extensions', output)
|
|
# let's check at least one
|
|
self.assertIn('truncate_letters', output)
|