parserPDF / tests /test_utils.py
semmyk's picture
initial commit
0fd441a
# tests/test_utils.py
# run with pytest tests/.
#
# import pytest
import logging
from unittest.mock import patch, MagicMock
from pathlib import Path
from utils.logger import get_logger, setup_logging
from utils.utils import is_dict, is_list_of_dicts
from utils.config import TITLE, DESCRIPTION # Assuming these are defined
from utils.get_config import get_config_value # If separate module
def test_setup_logging(capsys):
setup_logging()
captured = capsys.readouterr()
assert "Logging configured" in captured.out or captured.err # Assuming it prints config message
def test_get_logger():
logger = get_logger("test_logger")
assert isinstance(logger, logging.Logger)
assert logger.name == "test_logger"
@patch('logging.getLogger')
def test_get_logger_custom(mock_get_logger):
mock_logger = MagicMock()
mock_get_logger.return_value = mock_logger
logger = get_logger("custom_test")
mock_get_logger.assert_called_once_with("custom_test")
assert logger == mock_logger
def test_is_dict():
assert is_dict({"key": "value"}) is True
assert is_dict({"key": [1, 2]}) is True
assert is_dict([]) is False
assert is_dict("string") is False
assert is_dict(123) is False
assert is_dict(None) is False
def test_is_list_of_dicts():
assert is_list_of_dicts([{"a": 1}, {"b": 2}]) is True
assert is_list_of_dicts([]) is False # Empty list not considered list of dicts
assert is_list_of_dicts([{"a": 1}, "string"]) is False
assert is_list_of_dicts("not_list") is False
assert is_list_of_dicts([1, 2]) is False
assert is_list_of_dicts(None) is False
def test_config_constants():
# Test if config values are as expected (update based on actual config.py)
assert TITLE == "parserPDF" # Or whatever the actual value is
assert DESCRIPTION.startswith("PDF parser") # Partial match for description
@patch('utils.get_config.configparser.ConfigParser')
def test_get_config_value(mock_configparser):
mock_config = MagicMock()
mock_config.get.return_value = "test_value"
mock_configparser.return_value = mock_config
value = get_config_value("SECTION", "KEY")
mock_config.get.assert_called_once_with("SECTION", "KEY")
assert value == "test_value"
@patch('utils.get_config.configparser.ConfigParser')
def test_get_config_value_default(mock_configparser):
mock_config = MagicMock()
mock_config.get.side_effect = KeyError("No such key")
mock_configparser.return_value = mock_config
value = get_config_value("SECTION", "NONEXISTENT", default="fallback")
assert value == "fallback"
mock_config.get.assert_called_once_with("SECTION", "NONEXISTENT")
def test_logger_levels(caplog):
# Test logging at different levels
logger = get_logger("level_test")
with caplog.at_level(logging.DEBUG):
logger.debug("Debug message")
assert "Debug message" in caplog.text
with caplog.at_level(logging.INFO):
logger.info("Info message")
assert "Info message" in caplog.text
with caplog.at_level(logging.ERROR):
logger.error("Error message")
assert "Error message" in caplog.text
def test_setup_logging_file(tmp_path):
log_file = tmp_path / "test.log"
with patch.dict('os.environ', {'LOG_FILE': str(log_file)}):
setup_logging()
assert log_file.exists()
log_file.unlink() # Cleanup