Files
2026-07-13 12:40:22 +08:00

139 lines
4.7 KiB
Python

"""
Integration tests for the execution engine orchestrator
Tests intelligent_execute, quick_execute, and safe_execute functions
that combine reflection, parallel execution, and self-correction.
"""
import pytest
from superclaude.execution import intelligent_execute, quick_execute, safe_execute
class TestQuickExecute:
"""Test quick_execute convenience function"""
def test_quick_execute_simple_ops(self):
"""Quick execute should run simple operations and return results"""
results = quick_execute([
lambda: "result_a",
lambda: "result_b",
lambda: 42,
])
assert results == ["result_a", "result_b", 42]
def test_quick_execute_empty(self):
"""Quick execute with no operations should return empty list"""
results = quick_execute([])
assert results == []
def test_quick_execute_single(self):
"""Quick execute with single operation"""
results = quick_execute([lambda: "only"])
assert results == ["only"]
class TestIntelligentExecute:
"""Test the intelligent_execute orchestrator"""
def test_execute_with_clear_task(self, tmp_path):
"""Clear task with simple operations should succeed"""
# Create PROJECT_INDEX.md so context check passes
(tmp_path / "PROJECT_INDEX.md").write_text("# Index")
(tmp_path / "docs" / "memory").mkdir(parents=True, exist_ok=True)
result = intelligent_execute(
task="Create a new function called validate_email in validators.py",
operations=[lambda: "validated"],
context={
"project_index": "loaded",
"current_branch": "main",
"git_status": "clean",
},
repo_path=tmp_path,
)
assert result["status"] in ("success", "blocked")
assert "confidence" in result
def test_execute_blocked_by_low_confidence(self, tmp_path):
"""Vague task should be blocked by reflection engine"""
(tmp_path / "docs" / "memory").mkdir(parents=True, exist_ok=True)
result = intelligent_execute(
task="fix",
operations=[lambda: "done"],
repo_path=tmp_path,
)
# Very short vague task may get blocked
assert result["status"] in ("blocked", "success", "partial_failure")
assert "confidence" in result
def test_execute_with_failing_operation(self, tmp_path):
"""Failing operation should trigger self-correction"""
(tmp_path / "PROJECT_INDEX.md").write_text("# Index")
(tmp_path / "docs" / "memory").mkdir(parents=True, exist_ok=True)
def failing():
raise ValueError("Test failure")
result = intelligent_execute(
task="Create validation endpoint in api/validate.py",
operations=[lambda: "ok", failing],
context={
"project_index": "loaded",
"current_branch": "main",
"git_status": "clean",
},
repo_path=tmp_path,
auto_correct=True,
)
assert result["status"] in ("partial_failure", "blocked", "failed")
def test_execute_no_auto_correct(self, tmp_path):
"""Disabling auto_correct should skip self-correction phase"""
(tmp_path / "PROJECT_INDEX.md").write_text("# Index")
(tmp_path / "docs" / "memory").mkdir(parents=True, exist_ok=True)
result = intelligent_execute(
task="Create helper function in utils.py for date formatting",
operations=[lambda: "done"],
context={
"project_index": "loaded",
"current_branch": "main",
"git_status": "clean",
},
repo_path=tmp_path,
auto_correct=False,
)
assert result["status"] in ("success", "blocked")
class TestSafeExecute:
"""Test safe_execute convenience function"""
def test_safe_execute_success(self, tmp_path):
"""Safe execute should return result on success"""
(tmp_path / "PROJECT_INDEX.md").write_text("# Index")
(tmp_path / "docs" / "memory").mkdir(parents=True, exist_ok=True)
try:
result = safe_execute(
task="Create user validation function in validators.py",
operation=lambda: "validated",
context={
"project_index": "loaded",
"current_branch": "main",
"git_status": "clean",
},
)
# If it proceeds, should get result
assert result is not None
except RuntimeError:
# If blocked by low confidence, that's also valid
pass