peregrine/tests/conftest.py
pyr0ball e85fb9bba3 test: fix rate limiter cross-test contamination
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.
2026-06-14 14:00:31 -07:00

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