| """ |
| Integration test: full agent run using the Mock provider. |
| |
| Verifies the complete graph executes without error and produces |
| a valid final state. Does not test correctness of LLM outputs — |
| only the plumbing and state transitions. |
| """ |
|
|
| import pytest |
| from agent.graph import run_agent |
| from llm.router import LLMRouter |
| from llm.providers.mock_provider import MockProvider |
|
|
|
|
| @pytest.mark.asyncio |
| async def test_agent_runs_to_completion_with_mock(): |
| """Agent graph executes without crashing using mock provider.""" |
| router = LLMRouter(provider=MockProvider()) |
|
|
| task = "Write a function add(a, b) that returns a + b." |
| final_state = await run_agent( |
| task_description=task, |
| max_iterations=2, |
| router=router, |
| ) |
|
|
| assert final_state is not None |
| assert "status" in final_state |
| assert final_state["status"] in {"success", "max_iterations_reached"} |
| assert "current_code" in final_state |
| assert isinstance(final_state["events"], list) |
| assert len(final_state["events"]) > 0 |
|
|
|
|
| @pytest.mark.asyncio |
| async def test_agent_produces_code(): |
| """Generator node produces non-empty code.""" |
| router = LLMRouter(provider=MockProvider()) |
| final_state = await run_agent( |
| task_description="Write a function that returns 42.", |
| max_iterations=1, |
| router=router, |
| ) |
| assert final_state.get("current_code", "").strip() != "" |
|
|
|
|
| @pytest.mark.asyncio |
| async def test_stream_agent_yields_events(): |
| """stream_agent yields at least one event.""" |
| from agent.graph import stream_agent |
| router = LLMRouter(provider=MockProvider()) |
|
|
| events = [] |
| async for event in stream_agent( |
| task_description="Write a trivial function.", |
| max_iterations=1, |
| router=router, |
| ): |
| events.append(event) |
|
|
| assert len(events) > 0 |
| for event in events: |
| assert "type" in event |
| assert "message" in event |
|
|
|
|
| @pytest.mark.asyncio |
| async def test_max_iterations_terminates(): |
| """Agent terminates cleanly at max_iterations even on repeated failure.""" |
| |
| |
| router = LLMRouter(provider=MockProvider()) |
| final_state = await run_agent( |
| task_description="Implement an impossible requirement.", |
| max_iterations=1, |
| router=router, |
| ) |
| |
| assert final_state["status"] in {"success", "max_iterations_reached"} |
|
|