| import pytest | |
| from app.agents.performance_agent import PerformanceAgent | |
| from app.schemas import CodeChunk, Severity | |
| async def test_performance_agent_flags_requests_without_timeout(): | |
| chunk = CodeChunk( | |
| file_path="client.py", | |
| language="Python", | |
| line_start=1, | |
| line_end=1, | |
| content="response = requests.get(url)", | |
| ) | |
| output = await PerformanceAgent().analyze([chunk]) | |
| assert output.findings[0].title == "HTTP request without timeout" | |
| assert output.findings[0].severity == Severity.medium | |
| async def test_performance_agent_flags_blocking_sleep_in_async_function(): | |
| chunk = CodeChunk( | |
| file_path="worker.py", | |
| language="Python", | |
| line_start=20, | |
| line_end=22, | |
| content="async def run():\n time.sleep(1)\n return True", | |
| ) | |
| output = await PerformanceAgent().analyze([chunk]) | |
| assert output.findings[0].title == "Blocking sleep inside async function" | |
| assert output.findings[0].line_start == 21 | |
| async def test_performance_agent_flags_nested_loop(): | |
| chunk = CodeChunk( | |
| file_path="search.py", | |
| language="Python", | |
| line_start=5, | |
| line_end=7, | |
| content="for user in users:\n for order in orders:\n match(user, order)", | |
| ) | |
| output = await PerformanceAgent().analyze([chunk]) | |
| assert output.findings[0].title == "Nested loop may become expensive" | |
| assert output.findings[0].line_start == 6 | |