Each importlib.reload(dev_api) re-applies @limiter.limit() decorators to the shared slowapi Limiter singleton, accumulating stale registrations in _route_limits. One real HTTP request then triggered N limit-checks (N = reload count), exhausting per-hour budgets prematurely. Fix: conftest.py autouse fixture resets both _storage and _route_limits before each test, giving a clean slate regardless of prior reloads. Also updates test_dev_api_prep.py client fixture to use monkeypatch to clear DEMO_MODE + importlib.reload to get a fresh IS_DEMO module state (prevents 403 bleed from test_demo_guard.py tests running first). All 842 tests passing.
18 lines
671 B
Python
18 lines
671 B
Python
"""Shared pytest fixtures for the Peregrine test suite."""
|
|
import pytest
|
|
|
|
|
|
@pytest.fixture(autouse=True)
|
|
def reset_rate_limiter():
|
|
"""Reset slowapi state before each test.
|
|
|
|
Each importlib.reload(dev_api) re-applies @limiter.limit() decorators,
|
|
accumulating stale registrations in _route_limits on the shared limiter
|
|
singleton. One real request then triggers N limit-checks (N = reload count),
|
|
exhausting per-hour budgets prematurely. Clearing both _storage and
|
|
_route_limits before each test gives each test a clean slate.
|
|
"""
|
|
from scripts.rate_limit import limiter
|
|
limiter._storage.reset()
|
|
limiter._route_limits.clear()
|
|
yield
|