cookiecutter

Форк
0
/
test_log.py 
122 строки · 3.9 Кб
1
"""Collection of tests around log handling."""
2

3
import logging
4

5
import pytest
6

7
from cookiecutter.log import configure_logger
8

9

10
def create_log_records() -> None:
11
    """Test function, create log entries in expected stage of test."""
12
    cookiecutter_logger = logging.getLogger('cookiecutter')
13
    foo_logger = logging.getLogger('cookiecutter.foo')
14
    foobar_logger = logging.getLogger('cookiecutter.foo.bar')
15

16
    cookiecutter_logger.info('Welcome to Cookiecutter')
17
    cookiecutter_logger.debug('Generating project from pytest-plugin')
18
    foo_logger.info('Loading user config from home dir')
19
    foobar_logger.debug("I don't know.")
20
    foobar_logger.debug('I wanted to save the world.')
21
    foo_logger.error('Aw, snap! Something went wrong')
22
    cookiecutter_logger.debug('Successfully generated project')
23

24

25
@pytest.fixture
26
def info_messages():
27
    """Fixture. List of test info messages."""
28
    return [
29
        'INFO: Welcome to Cookiecutter',
30
        'INFO: Loading user config from home dir',
31
        'ERROR: Aw, snap! Something went wrong',
32
    ]
33

34

35
@pytest.fixture
36
def debug_messages():
37
    """Fixture. List of test debug messages."""
38
    return [
39
        "INFO cookiecutter: Welcome to Cookiecutter",
40
        "DEBUG cookiecutter: Generating project from pytest-plugin",
41
        "INFO cookiecutter.foo: Loading user config from home dir",
42
        "DEBUG cookiecutter.foo.bar: I don't know.",
43
        "DEBUG cookiecutter.foo.bar: I wanted to save the world.",
44
        "ERROR cookiecutter.foo: Aw, snap! Something went wrong",
45
        "DEBUG cookiecutter: Successfully generated project",
46
    ]
47

48

49
@pytest.fixture
50
def info_logger():
51
    """Fixture. Call cookiecutter logger setup with `info` debug level."""
52
    return configure_logger(stream_level='INFO')
53

54

55
@pytest.fixture
56
def debug_logger():
57
    """Fixture. Call cookiecutter logger setup with `debug` debug level."""
58
    return configure_logger(stream_level='DEBUG')
59

60

61
@pytest.fixture
62
def debug_file(tmp_path):
63
    """Fixture. Generate debug file location for tests."""
64
    return tmp_path.joinpath('pytest-plugin.log')
65

66

67
@pytest.fixture
68
def info_logger_with_file(debug_file):
69
    """Fixture. Call cookiecutter logger setup with `info` debug level + `file`."""
70
    return configure_logger(stream_level='INFO', debug_file=str(debug_file))
71

72

73
def test_info_stdout_logging(caplog, info_logger, info_messages) -> None:
74
    """Test that stdout logs use info format and level."""
75
    [stream_handler] = info_logger.handlers
76
    assert isinstance(stream_handler, logging.StreamHandler)
77
    assert stream_handler.level == logging.INFO
78

79
    create_log_records()
80

81
    stream_messages = [
82
        stream_handler.format(r)
83
        for r in caplog.records
84
        if r.levelno >= stream_handler.level
85
    ]
86

87
    assert stream_messages == info_messages
88

89

90
def test_debug_stdout_logging(caplog, debug_logger, debug_messages) -> None:
91
    """Test that stdout logs use debug format and level."""
92
    [stream_handler] = debug_logger.handlers
93
    assert isinstance(stream_handler, logging.StreamHandler)
94
    assert stream_handler.level == logging.DEBUG
95

96
    create_log_records()
97

98
    stream_messages = [
99
        stream_handler.format(r)
100
        for r in caplog.records
101
        if r.levelno >= stream_handler.level
102
    ]
103

104
    assert stream_messages == debug_messages
105

106

107
def test_debug_file_logging(info_logger_with_file, debug_file, debug_messages) -> None:
108
    """Test that logging to stdout uses a different format and level than \
109
    the the file handler."""
110
    [file_handler, stream_handler] = info_logger_with_file.handlers
111
    assert isinstance(file_handler, logging.FileHandler)
112
    assert isinstance(stream_handler, logging.StreamHandler)
113
    assert stream_handler.level == logging.INFO
114
    assert file_handler.level == logging.DEBUG
115

116
    create_log_records()
117

118
    assert debug_file.exists()
119

120
    # Last line in the log file is an empty line
121
    with debug_file.open() as f:
122
        assert f.read().split('\n') == [*debug_messages, '']
123

Использование cookies

Мы используем файлы cookie в соответствии с Политикой конфиденциальности и Политикой использования cookies.

Нажимая кнопку «Принимаю», Вы даете АО «СберТех» согласие на обработку Ваших персональных данных в целях совершенствования нашего веб-сайта и Сервиса GitVerse, а также повышения удобства их использования.

Запретить использование cookies Вы можете самостоятельно в настройках Вашего браузера.