Why: - Any test using the client/api_client fixtures runs the app's real lifespan, which calls the production configure_logging() -- setting cache_logger_on_first_use=True (ADR-0011). That permanently monkeypatches the .bind method on whichever module-level logger = structlog.get_logger(__name__) instance is used first. structlog.reset_defaults() only resets *global* config, not that per-instance mutation, so once triggered, structlog.testing.capture_logs() silently stops intercepting events in every test that runs afterward in the same pytest process -- order-dependent flakiness with no useful failure message (assertions just see an empty list). Changes: - Added two autouse fixtures: one no-ops configure_logging for tests that spin up the app via LifespanManager (they test HTTP behavior, not logging output, so they don't need the real thing), one resets structlog defaults after every test as defense in depth. Impact: - Test-only; makes capture_logs()-based assertions reliable regardless of test execution order.
3.5 KiB
3.5 KiB