|
2 | 2 |
|
3 | 3 | from __future__ import annotations |
4 | 4 |
|
| 5 | +import logging |
5 | 6 | from collections.abc import Generator |
6 | 7 |
|
7 | 8 | import pytest |
8 | 9 | from pytest_mock import AsyncMockType, MockerFixture |
9 | 10 |
|
10 | 11 | from configuration import AppConfig |
| 12 | +from constants import DEFAULT_LOGGER_NAME |
| 13 | +from log import setup_logging |
11 | 14 |
|
12 | 15 | type AgentFixtures = Generator[ |
13 | 16 | tuple[ |
|
19 | 22 | ] |
20 | 23 |
|
21 | 24 |
|
| 25 | +@pytest.fixture(autouse=True) |
| 26 | +def reset_logging_state(): |
| 27 | + """Reset logging state before and after each test. |
| 28 | +
|
| 29 | + Module-level calls to setup_logging() (such as from importing lightspeed_stack) |
| 30 | + set propagate=False on the application logger, which prevents caplog from |
| 31 | + capturing log records. |
| 32 | +
|
| 33 | + This fixture ensures propagation is enabled during tests and restores the |
| 34 | + original logger state afterward. It also clears the setup_logging lru_cache |
| 35 | + so tests that call setup_logging() get a fresh configuration. |
| 36 | + """ |
| 37 | + setup_logging.cache_clear() |
| 38 | + logger = logging.getLogger(DEFAULT_LOGGER_NAME) |
| 39 | + original_propagate = logger.propagate |
| 40 | + original_handlers = logger.handlers[:] |
| 41 | + original_level = logger.level |
| 42 | + logger.propagate = True |
| 43 | + |
| 44 | + yield |
| 45 | + |
| 46 | + setup_logging.cache_clear() |
| 47 | + logger.propagate = original_propagate |
| 48 | + logger.handlers = original_handlers |
| 49 | + logger.level = original_level |
| 50 | + |
| 51 | + |
22 | 52 | @pytest.fixture(name="prepare_agent_mocks", scope="function") |
23 | 53 | def prepare_agent_mocks_fixture( |
24 | 54 | mocker: MockerFixture, |
|
0 commit comments