From daa937bcb759bdf670db7dea4334d3eb339ad2fd Mon Sep 17 00:00:00 2001 From: Lukas Date: Sat, 23 May 2026 22:44:40 +0200 Subject: [PATCH] Fix test isolation: clear logging handlers and reset propagate flags Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com> --- tests/conftest.py | 42 ++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 42 insertions(+) diff --git a/tests/conftest.py b/tests/conftest.py index 07bbe38..568a4cf 100644 --- a/tests/conftest.py +++ b/tests/conftest.py @@ -1,5 +1,6 @@ """Pytest configuration and shared fixtures for all tests.""" +import logging from unittest.mock import Mock import pytest @@ -149,3 +150,44 @@ def mock_series_app_download(monkeypatch): yield + +@pytest.fixture(autouse=True) +def reset_logging_state(): + """Reset logging handlers and propagate flags before and after each test. + + Tests that call setup_logging() or logging.config.dictConfig() may leave + FileHandlers and propagate=False on various loggers. This fixture clears + handlers and resets propagate for all relevant loggers before/after tests. + """ + # All loggers that might have handlers or propagate changes from test setup + logger_names = ( + "aniworld", "uvicorn", "uvicorn.access", "uvicorn.error", + "watchfiles.main" + ) + + def clear_logger_state(logger_name): + logger = logging.getLogger(logger_name) + for handler in logger.handlers[:]: + logger.removeHandler(handler) + handler.close() + # Reset propagate to default (True) for child loggers + # Root logger propagate is always True by default + if logger_name != "root": + logger.propagate = True + + # Clear state BEFORE test + for name in logger_names: + clear_logger_state(name) + + yield + + # Clear state AFTER test + for name in logger_names: + clear_logger_state(name) + + # Also clear root handlers + root = logging.getLogger() + for handler in root.handlers[:]: + root.removeHandler(handler) + handler.close() +