"""Test fixtures for PentestAgent tests.""" import asyncio from pathlib import Path from unittest.mock import AsyncMock, MagicMock import pytest from pentestagent.agents.state import AgentStateManager from pentestagent.config import Settings from pentestagent.tools import Tool, ToolSchema @pytest.fixture def settings() -> Settings: """Create test settings.""" return Settings( debug=True, ) @pytest.fixture def agent_state() -> AgentStateManager: """Create a test agent state manager.""" return AgentStateManager() @pytest.fixture def mock_llm() -> MagicMock: """Create a mock LLM.""" mock = AsyncMock() mock.generate.return_value = MagicMock( content="Test response", tool_calls=None, usage={"prompt_tokens": 100, "completion_tokens": 50}, model="gpt-5", finish_reason="stop" ) return mock @pytest.fixture def temp_dir(tmp_path: Path) -> Path: """Create a temporary directory for tests.""" return tmp_path @pytest.fixture def event_loop(): """Create an event loop for async tests.""" loop = asyncio.new_event_loop() yield loop loop.close() @pytest.fixture def sample_finding() -> dict: """Create a sample security finding.""" return { "title": "SQL Injection in Login Form", "severity": "high", "target": "http://example.com/login", "description": "The login form is vulnerable to SQL injection attacks.", "evidence": "Parameter 'username' with payload: ' OR '1'='1", "remediation": "Use parameterized queries or prepared statements." } @pytest.fixture def sample_tool_result() -> dict: """Create a sample tool execution result.""" return { "tool": "terminal", "success": True, "output": "nmap scan results...", "duration_ms": 1500.0 } @pytest.fixture def sample_tool() -> Tool: """Create a sample tool for testing.""" async def dummy_execute(arguments: dict, runtime) -> str: return f"Executed with: {arguments}" return Tool( name="test_tool", description="A test tool", schema=ToolSchema( properties={"param": {"type": "string", "description": "A parameter"}}, required=["param"] ), execute_fn=dummy_execute, category="test" )