mirror of
https://github.com/kirill-markin/repo-to-text.git
synced 2025-12-06 03:22:23 -08:00
Refactor devide logic by files and more tests
This commit is contained in:
parent
6a434e5174
commit
dbfa602cd3
9 changed files with 922 additions and 0 deletions
142
tests/test_utils.py
Normal file
142
tests/test_utils.py
Normal file
|
|
@ -0,0 +1,142 @@
|
|||
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__])
|
||||
Loading…
Add table
Add a link
Reference in a new issue