"""Test logging.""" import uuid from datetime import datetime from unittest.mock import Mock, patch import pytest from grass import tornado_logger as logger def fixture_record(): """Fixture for a full json encodable record.""" record = Mock() message = 'Message' correlation_id = str(uuid.uuid1()) record.msg = message record.exc_info = None record.created = datetime.now().timestamp() record.correlation_id = correlation_id record.levelname = 'info' record.lineno = 1 record.filename = 'some filename' record.funcName = 'some funcname' return record def test_handler_creation(): """Test the creation of the handler.""" dsn = 'dsn value' handler = logger.DSNHandler(dsn) assert handler.dsn == dsn def test_get_full_message(): """Test getting a full message.""" record = Mock() message = 'Message' record.msg = message record.exc_info = None record.created = datetime.now().timestamp() handler = logger.DSNHandler('dsn') assert handler.get_full_message(record) == message @patch('traceback.format_exception') def test_get_full_message_with_exception(trace): """Test getting message from exception.""" record = Mock() record.exc_info = ['one', 'two'] trace.return_value = ['trace', 'two'] record.created = datetime.now().timestamp() handler = logger.DSNHandler('dsn') assert handler.get_full_message(record) trace.assert_called_once_with('one', 'two') @pytest.fixture @patch('grass.tornado_logger.session') def test_get_full_message_with_text(session, fixture_record): """Test emiting a message.""" handler = logger.DSNHandler('dsn') handler.emit(fixture_record) assert session.fetch.called @pytest.fixture @patch('grass.tornado_logger.session') def test_get_full_message_with_random_exception(session, fixture_record): """Test emiting a message.""" session.fetch = Mock(side_effect=SystemExit) handler = logger.DSNHandler('dsn') with pytest.raises(SystemExit): handler.emit(fixture_record()) @patch('grass.tornado_logger.session') def test_get_full_message_with_except(session): """Test emiting a message.""" session.fetch = Mock(side_effect=Exception()) record = Mock() record.msg = 'Message' record.exc_info = None record.created = datetime.now().timestamp() record.correlation_id = uuid.uuid1() handler = logger.DSNHandler('dsn') handler.handleError = Mock() handler.emit(record) handler.handleError.assert_called_with(record)