"""Shared test fixtures and marker registration.""" from __future__ import annotations from typing import TYPE_CHECKING import pytest import yaml from app.config import Settings from app.registry import AgentRegistry from app.session_manager import SessionManager if TYPE_CHECKING: from pathlib import Path @pytest.fixture(autouse=True) def clear_rate_limit_state() -> None: """Clear module-level rate limit state between tests to prevent leakage.""" import app.ws_handler as ws_handler ws_handler._thread_timestamps.clear() yield ws_handler._thread_timestamps.clear() @pytest.fixture def test_settings() -> Settings: return Settings( database_url="postgresql://test:test@localhost:5432/test_db", llm_provider="anthropic", llm_model="claude-sonnet-4-6", anthropic_api_key="test-key", ) @pytest.fixture def sample_yaml_path(tmp_path: Path) -> Path: data = { "agents": [ { "name": "test_reader", "description": "A test read agent", "permission": "read", "tools": ["get_order_status"], }, { "name": "test_writer", "description": "A test write agent", "permission": "write", "personality": { "tone": "formal", "greeting": "Greetings.", "escalation_message": "Escalating now.", }, "tools": ["cancel_order"], }, { "name": "test_fallback", "description": "A fallback agent", "permission": "read", "tools": ["fallback_respond"], }, ] } path = tmp_path / "test_agents.yaml" path.write_text(yaml.dump(data), encoding="utf-8") return path @pytest.fixture def sample_registry(sample_yaml_path: Path) -> AgentRegistry: return AgentRegistry.load(sample_yaml_path) @pytest.fixture def session_manager() -> SessionManager: return SessionManager(session_ttl_seconds=60)