import pytest from aegis.agents import EvaluatorAgent from aegis.core import AgentContext, AgentResult, Task def make_context(result: AgentResult | dict[str, object] | None) -> AgentContext: inputs: dict[str, object] = {} if result is not None: inputs["result"] = result.model_dump() if isinstance(result, AgentResult) else result return AgentContext( task=Task( name="Evaluate result", description="Evaluate an agent execution result.", ), inputs=inputs, ) @pytest.mark.asyncio async def test_evaluator_passes_valid_result() -> None: evaluator = EvaluatorAgent() context = make_context( AgentResult( agent_name="planner", success=True, output={"steps": ["analyze", "execute"]}, ) ) result = await evaluator.run(context) assert result.success is True assert result.output["passed"] is True assert result.output["score"] == 100 assert result.output["issues"] == () assert result.output["evaluated_agent"] == "planner" @pytest.mark.asyncio async def test_evaluator_fails_unsuccessful_result() -> None: evaluator = EvaluatorAgent() context = make_context( AgentResult( agent_name="tool", success=False, errors=["Execution failed."], ) ) result = await evaluator.run(context) assert result.success is True assert result.output["passed"] is False assert result.output["score"] == 25 assert len(result.output["issues"]) == 3 @pytest.mark.asyncio async def test_evaluator_rejects_missing_result() -> None: evaluator = EvaluatorAgent() context = make_context(None) result = await evaluator.run(context) assert result.success is False assert result.errors == ["Missing required input: result"] @pytest.mark.asyncio async def test_evaluator_rejects_invalid_result() -> None: evaluator = EvaluatorAgent() context = make_context( { "agent_name": "", "success": True, } ) result = await evaluator.run(context) assert result.success is False assert result.errors assert result.errors[0].startswith("Invalid agent result:")