File size: 3,416 Bytes
0fd441a
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
# 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