|
from unittest.mock import patch, MagicMock
|
|
from pr.core.logging import setup_logging, get_logger
|
|
|
|
|
|
class TestLogging:
|
|
@patch("pr.core.logging.os.makedirs")
|
|
@patch("pr.core.logging.os.path.dirname")
|
|
@patch("pr.core.logging.os.path.exists")
|
|
@patch("pr.core.logging.RotatingFileHandler")
|
|
@patch("pr.core.logging.logging.getLogger")
|
|
def test_setup_logging_basic(
|
|
self, mock_get_logger, mock_handler, mock_exists, mock_dirname, mock_makedirs
|
|
):
|
|
mock_exists.return_value = False
|
|
mock_dirname.return_value = "/tmp/logs"
|
|
mock_logger = MagicMock()
|
|
mock_get_logger.return_value = mock_logger
|
|
mock_logger.handlers = []
|
|
|
|
result = setup_logging(verbose=False)
|
|
|
|
mock_makedirs.assert_called_once_with("/tmp/logs", exist_ok=True)
|
|
mock_get_logger.assert_called_once_with("pr")
|
|
mock_logger.setLevel.assert_called_once_with(20) # INFO level
|
|
mock_handler.assert_called_once()
|
|
assert result == mock_logger
|
|
|
|
@patch("pr.core.logging.os.makedirs")
|
|
@patch("pr.core.logging.os.path.dirname")
|
|
@patch("pr.core.logging.os.path.exists")
|
|
@patch("pr.core.logging.RotatingFileHandler")
|
|
@patch("pr.core.logging.logging.StreamHandler")
|
|
@patch("pr.core.logging.logging.getLogger")
|
|
def test_setup_logging_verbose(
|
|
self,
|
|
mock_get_logger,
|
|
mock_stream_handler,
|
|
mock_file_handler,
|
|
mock_exists,
|
|
mock_dirname,
|
|
mock_makedirs,
|
|
):
|
|
mock_exists.return_value = True
|
|
mock_dirname.return_value = "/tmp/logs"
|
|
mock_logger = MagicMock()
|
|
mock_get_logger.return_value = mock_logger
|
|
mock_logger.handlers = MagicMock()
|
|
|
|
result = setup_logging(verbose=True)
|
|
|
|
mock_makedirs.assert_not_called()
|
|
mock_get_logger.assert_called_once_with("pr")
|
|
mock_logger.setLevel.assert_called_once_with(10) # DEBUG level
|
|
mock_logger.handlers.clear.assert_called_once()
|
|
mock_file_handler.assert_called_once()
|
|
mock_stream_handler.assert_called_once()
|
|
assert result == mock_logger
|
|
|
|
@patch("pr.core.logging.logging.getLogger")
|
|
def test_get_logger_default(self, mock_get_logger):
|
|
mock_logger = MagicMock()
|
|
mock_get_logger.return_value = mock_logger
|
|
|
|
result = get_logger()
|
|
|
|
mock_get_logger.assert_called_once_with("pr")
|
|
assert result == mock_logger
|
|
|
|
@patch("pr.core.logging.logging.getLogger")
|
|
def test_get_logger_named(self, mock_get_logger):
|
|
mock_logger = MagicMock()
|
|
mock_get_logger.return_value = mock_logger
|
|
|
|
result = get_logger("test")
|
|
|
|
mock_get_logger.assert_called_once_with("pr.test")
|
|
assert result == mock_logger
|