from ai_orchestrator.application.services.execution import StructuredReviewer from ai_orchestrator.domain.enums import NodeType from ai_orchestrator.domain.models import ExecutionNode, Task def test_structured_reviewer_accepts_valid_output() -> None: reviewer = StructuredReviewer() task = Task(project_id="default", goal="Review", inputs={}) node = ExecutionNode(task_id=task.task_id, node_type=NodeType.PLANNER, input_data={}) reviewed = reviewer.review( task=task, node=node, output_data={"status": "planned", "goal": "Review"}, ) assert reviewed["review"]["status"] == "accepted" assert reviewed["task_id"] == task.task_id def test_structured_reviewer_marks_missing_status_as_review_failed() -> None: reviewer = StructuredReviewer() task = Task(project_id="default", goal="Review", inputs={}) node = ExecutionNode(task_id=task.task_id, node_type=NodeType.PLANNER, input_data={}) reviewed = reviewer.review(task=task, node=node, output_data={"goal": "Review"}) assert reviewed["status"] == "review_failed" assert reviewed["review"]["status"] == "rejected"