68 lines
2.3 KiB
Python
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
|