Files
ea-chatbot-lg/tests/test_logging_core.py

68 lines
2.3 KiB
Python

import logging
import pytest
from ea_chatbot.utils.logging import get_logger
@pytest.fixture(autouse=True)
def reset_logging():
"""Reset the ea_chatbot logger handlers before each test."""
logger = logging.getLogger("ea_chatbot")
# Remove all existing handlers
for handler in logger.handlers[:]:
logger.removeHandler(handler)
yield
# Also clean up after test
for handler in logger.handlers[:]:
logger.removeHandler(handler)
def test_get_logger_singleton():
"""Test that get_logger returns the same logger instance for the same name."""
logger1 = get_logger("test_logger")
logger2 = get_logger("test_logger")
assert logger1 is logger2
def test_get_logger_rich_handler():
"""Test that get_logger configures a RichHandler on root."""
get_logger("test_rich")
root = logging.getLogger("ea_chatbot")
# Check if any handler is a RichHandler
handler_names = [h.__class__.__name__ for h in root.handlers]
assert "RichHandler" in handler_names
def test_get_logger_level():
"""Test that get_logger sets the correct log level."""
logger = get_logger("test_level", level="DEBUG")
assert logger.level == logging.DEBUG
def test_json_formatter_serializes_dict():
"""Test that JsonFormatter serializes log records to JSON."""
from ea_chatbot.utils.logging import JsonFormatter
import json
formatter = JsonFormatter()
record = logging.LogRecord(
name="test", level=logging.INFO, pathname="test.py", lineno=10,
msg="test message", args=(), exc_info=None
)
formatted = formatter.format(record)
data = json.loads(formatted)
assert data["message"] == "test message"
assert data["level"] == "INFO"
assert "timestamp" in data
def test_get_logger_file_handler(tmp_path):
"""Test that get_logger configures a file handler on root."""
log_file = tmp_path / "test.json"
logger = get_logger("test_file", log_file=str(log_file))
root = logging.getLogger("ea_chatbot")
handler_names = [h.__class__.__name__ for h in root.handlers]
assert "RotatingFileHandler" in handler_names
logger.info("file log test")
# Check if file exists and has content
assert log_file.exists()
content = log_file.read_text()
assert "file log test" in content