mirror of
https://github.com/kirill-markin/repo-to-text.git
synced 2025-12-06 03:22:23 -08:00
142 lines
No EOL
4.5 KiB
Python
142 lines
No EOL
4.5 KiB
Python
import logging
|
|
import pytest
|
|
from typing import Generator
|
|
from repo_to_text.utils.utils import setup_logging
|
|
|
|
@pytest.fixture(autouse=True)
|
|
def reset_logger() -> Generator[None, None, None]:
|
|
"""Reset root logger before each test."""
|
|
root_logger = logging.getLogger()
|
|
for handler in root_logger.handlers[:]:
|
|
root_logger.removeHandler(handler)
|
|
root_logger.setLevel(logging.WARNING) # Default level
|
|
yield
|
|
for handler in root_logger.handlers[:]:
|
|
root_logger.removeHandler(handler)
|
|
root_logger.setLevel(logging.WARNING) # Reset after test
|
|
|
|
def test_setup_logging_debug() -> None:
|
|
"""Test setup_logging with debug mode."""
|
|
root_logger = logging.getLogger()
|
|
root_logger.handlers.clear() # Clear existing handlers
|
|
root_logger.setLevel(logging.WARNING) # Reset to default
|
|
|
|
setup_logging(debug=True)
|
|
assert len(root_logger.handlers) > 0
|
|
assert root_logger.level == logging.DEBUG
|
|
|
|
def test_setup_logging_info() -> None:
|
|
"""Test setup_logging with info mode."""
|
|
root_logger = logging.getLogger()
|
|
root_logger.handlers.clear() # Clear existing handlers
|
|
root_logger.setLevel(logging.WARNING) # Reset to default
|
|
|
|
setup_logging(debug=False)
|
|
assert len(root_logger.handlers) > 0
|
|
assert root_logger.level == logging.INFO
|
|
|
|
def test_setup_logging_formatter() -> None:
|
|
"""Test logging formatter setup."""
|
|
setup_logging(debug=True)
|
|
logger = logging.getLogger()
|
|
handlers = logger.handlers
|
|
|
|
# Check if there's at least one handler
|
|
assert len(handlers) > 0
|
|
|
|
# Check formatter
|
|
formatter = handlers[0].formatter
|
|
assert formatter is not None
|
|
|
|
# Test format string
|
|
test_record = logging.LogRecord(
|
|
name='test',
|
|
level=logging.DEBUG,
|
|
pathname='test.py',
|
|
lineno=1,
|
|
msg='Test message',
|
|
args=(),
|
|
exc_info=None
|
|
)
|
|
formatted = formatter.format(test_record)
|
|
assert 'Test message' in formatted
|
|
assert test_record.levelname in formatted
|
|
|
|
def test_setup_logging_multiple_calls() -> None:
|
|
"""Test that multiple calls to setup_logging don't create duplicate handlers."""
|
|
root_logger = logging.getLogger()
|
|
root_logger.handlers.clear()
|
|
|
|
setup_logging(debug=True)
|
|
initial_handler_count = len(root_logger.handlers)
|
|
|
|
# Call setup_logging again
|
|
setup_logging(debug=True)
|
|
assert len(root_logger.handlers) == initial_handler_count, "Should not create duplicate handlers"
|
|
|
|
def test_setup_logging_level_change() -> None:
|
|
"""Test changing log levels between setup_logging calls."""
|
|
root_logger = logging.getLogger()
|
|
root_logger.handlers.clear()
|
|
|
|
# Start with debug
|
|
setup_logging(debug=True)
|
|
assert root_logger.level == logging.DEBUG
|
|
|
|
# Clear handlers before next setup
|
|
root_logger.handlers.clear()
|
|
|
|
# Switch to info
|
|
setup_logging(debug=False)
|
|
assert root_logger.level == logging.INFO
|
|
|
|
def test_setup_logging_message_format() -> None:
|
|
"""Test the actual format of logged messages."""
|
|
setup_logging(debug=True)
|
|
logger = logging.getLogger()
|
|
|
|
# Create a temporary handler to capture output
|
|
import io
|
|
log_capture = io.StringIO()
|
|
handler = logging.StreamHandler(log_capture)
|
|
# Use formatter that includes pathname
|
|
handler.setFormatter(logging.Formatter('%(levelname)s %(name)s:%(pathname)s:%(lineno)d %(message)s'))
|
|
logger.addHandler(handler)
|
|
|
|
# Ensure debug level is set
|
|
logger.setLevel(logging.DEBUG)
|
|
handler.setLevel(logging.DEBUG)
|
|
|
|
# Log a test message
|
|
test_message = "Test log message"
|
|
logger.debug(test_message)
|
|
log_output = log_capture.getvalue()
|
|
|
|
# Verify format components
|
|
assert test_message in log_output
|
|
assert "DEBUG" in log_output
|
|
assert "test_utils.py" in log_output
|
|
|
|
def test_setup_logging_error_messages() -> None:
|
|
"""Test logging of error messages."""
|
|
setup_logging(debug=False)
|
|
logger = logging.getLogger()
|
|
|
|
# Create a temporary handler to capture output
|
|
import io
|
|
log_capture = io.StringIO()
|
|
handler = logging.StreamHandler(log_capture)
|
|
handler.setFormatter(logger.handlers[0].formatter)
|
|
logger.addHandler(handler)
|
|
|
|
# Log an error message
|
|
error_message = "Test error message"
|
|
logger.error(error_message)
|
|
log_output = log_capture.getvalue()
|
|
|
|
# Error messages should always be logged regardless of debug setting
|
|
assert error_message in log_output
|
|
assert "ERROR" in log_output
|
|
|
|
if __name__ == "__main__":
|
|
pytest.main([__file__]) |