test(logging); add tests for setup_handler and setup_formatter function

This commit is contained in:
2026-07-29 19:42:52 +02:00
parent d02887f164
commit 63893513ee
7 changed files with 218 additions and 11 deletions
+19
View File
@@ -0,0 +1,19 @@
# tests/conftest.py
import os
from pathlib import Path
import pytest
from logwatcher.logging import setup_logging
# Forcer un dossier temporaire pour les tests
os.environ["PYTEST_DEBUG_TEMPROOT"] = str(Path("output/test").absolute())
@pytest.fixture
def tmp_log_file(tmp_path):
return tmp_path / "logwatcher_test.log"
@pytest.fixture(autouse=True)
def tmp_setup_logging(tmp_log_file):
"""Redirige les logs vers un dossier temporaire pendant les tests."""
setup_logging(file_path=tmp_log_file)
+101
View File
@@ -0,0 +1,101 @@
"""
this module contains all tests logging-related :
- the logger should have at least one StreamHandler and one FileHandler each time
logwatcher is launched.
- the StreamHandler must watch at an error level
- the FileHandler must watch at a debug
level
-
"""
import re
from logging import DEBUG, ERROR, INFO, WARNING, FileHandler, StreamHandler, getLogger
import pytest
from logwatcher import logger
from logwatcher.logging import _setup_formatter, _setup_handler, setup_logging
def test_setup_handler(tmp_log_file):
formatter = _setup_formatter()
handler = _setup_handler(formatter=formatter, level=DEBUG)
assert isinstance(handler, StreamHandler)
handler = _setup_handler(formatter=formatter, level=INFO,filename=tmp_log_file)
assert isinstance(handler, FileHandler)
def test_count_of_handler(tmp_log_file):
logger = getLogger()
count_file_handler = 0
count_stream_handler = 0
for handler in logger.handlers:
if isinstance(handler, FileHandler):
count_file_handler += 1
elif isinstance(handler, StreamHandler):
count_stream_handler += 1
else:
pass
assert count_file_handler >= 1
assert count_stream_handler >= 1
def test_type_of_handlers():
for handler in logger.handlers:
if isinstance(handler, FileHandler):
assert handler.level == DEBUG
elif isinstance(handler, StreamHandler):
assert handler.level == ERROR
else:
pytest.fail("handlers must be either a file or a stream handler")
assert handler.formatter._fmt == '[%(asctime)s] - %(levelname)s: %(message)s'
assert handler.formatter.datefmt == '%d/%m/%Y %H:%M:%S'
def test_modified_format():
"""
when starting, the logger is first intialized, thus two handlers are at position
1 and 2 in logger.handlers list.
"""
logger = setup_logging()
for handler in logger.handlers[2:]:
assert handler.formatter._fmt == '[%(asctime)s] - %(levelname)s: %(message)s'
formatter_different_format = _setup_formatter(format='%(asctime)s - %(levelname)s: %(message)s')
logger = setup_logging(formatter=formatter_different_format)
for handler in logger.handlers[4:]:
assert handler.formatter._fmt == '%(asctime)s - %(levelname)s: %(message)s'
formatter_different_datefmt = _setup_formatter(datefmt='%a %b %Y at %Hh%M')
logger = setup_logging(formatter=formatter_different_datefmt)
for handler in logger.handlers[6:]:
assert handler.formatter._fmt == '[%(asctime)s] - %(levelname)s: %(message)s'
assert handler.formatter.datefmt == '%a %b %Y at %Hh%M'
def test_logging_in_correct_path(tmp_log_file):
# must be both in file and stdout
logger.critical("hi- BYE")
logger.error("hi... ok, bye")
logger.warning("hi, are you alright?")
# only in file
logger.info("hi there")
logger.debug("hi, how are you? it's been a while!")
with open(tmp_log_file) as log_file:
content = log_file.readlines()
regex = r'\[\d{2}/\d{2}/\d{4} \d{2}:\d{2}:\d{2}\] - '
assert len(content) == 5
for line in content:
assert re.search(regex, line)
# test critical to warning
assert re.search(r'CRITICAL: hi- BYE', content[0])
assert re.search(r'ERROR: hi... ok, bye', content[1])
assert re.search(r'WARNING: hi, are you alright?', content[2])
assert re.search(r'INFO: hi there', content[3])
assert logger.getEffectiveLevel() < WARNING
assert re.search(r"DEBUG: hi, how are you\? it's been a while!", content[4])