"""测试 Workflow Registry 和 CoderOnlyWorkflow 集成"""
import pytest
from akg_agents.core_v2.workflows.registry import WorkflowRegistry, register_workflow
class TestWorkflowRegistry:
"""测试 WorkflowRegistry 基本功能"""
def setup_method(self):
"""每个测试前清空注册表"""
WorkflowRegistry.clear()
def test_register_workflow_with_decorator(self):
"""测试使用装饰器注册 workflow"""
@register_workflow(scopes=["test"])
class MockWorkflow:
TOOL_NAME = "use_mock_workflow"
DESCRIPTION = "测试 workflow"
PARAMETERS_SCHEMA = {"type": "object"}
assert WorkflowRegistry.is_registered("MockWorkflow")
assert "MockWorkflow" in WorkflowRegistry.list_workflows()
assert "MockWorkflow" in WorkflowRegistry.list_workflows(scope="test")
assert "MockWorkflow" not in WorkflowRegistry.list_workflows(scope="op")
def test_get_tool_config(self):
"""测试获取工具配置"""
@register_workflow()
class MockWorkflow:
TOOL_NAME = "use_mock"
DESCRIPTION = "测试描述"
PARAMETERS_SCHEMA = {
"type": "object",
"properties": {
"param1": {"type": "string"}
}
}
config = WorkflowRegistry.get_tool_config("MockWorkflow")
assert config is not None
assert "use_mock" in config
assert config["use_mock"]["type"] == "call_workflow"
assert config["use_mock"]["workflow_name"] == "MockWorkflow"
assert config["use_mock"]["function"]["name"] == "use_mock"
assert config["use_mock"]["function"]["description"] == "测试描述"
def test_workflow_without_tool_config(self):
"""测试没有工具配置的 workflow"""
@register_workflow()
class IncompleteWorkflow:
pass
assert WorkflowRegistry.is_registered("IncompleteWorkflow")
config = WorkflowRegistry.get_tool_config("IncompleteWorkflow")
assert config is None
class TestCoderOnlyWorkflowIntegration:
"""测试 CoderOnlyWorkflow 的注册和集成"""
def setup_method(self):
"""每个测试前清空注册表"""
WorkflowRegistry.clear()
def test_coder_only_workflow_registered(self):
"""测试 CoderOnlyWorkflow 是否正确注册"""
from akg_agents.op.workflows.coder_only_workflow import CoderOnlyWorkflow
WorkflowRegistry.register(CoderOnlyWorkflow, scopes=["op"])
assert WorkflowRegistry.is_registered("CoderOnlyWorkflow")
assert "CoderOnlyWorkflow" in WorkflowRegistry.list_workflows(scope="op")
config = WorkflowRegistry.get_tool_config("CoderOnlyWorkflow")
assert config is not None
assert "use_coder_only_workflow" in config
tool_def = config["use_coder_only_workflow"]
assert tool_def["type"] == "call_workflow"
assert tool_def["workflow_name"] == "CoderOnlyWorkflow"
func = tool_def["function"]
assert func["name"] == "use_coder_only_workflow"
assert "CoderOnly workflow" in func["description"]
params = func["parameters"]
assert params["type"] == "object"
assert "op_name" in params["properties"]
assert "task_desc" in params["properties"]
assert "dsl" in params["properties"]
assert set(params["required"]) == {"op_name", "task_desc", "dsl", "framework", "backend", "arch"}
def test_workflow_class_accessible(self):
"""测试可以获取 workflow 类"""
from akg_agents.op.workflows.coder_only_workflow import CoderOnlyWorkflow
WorkflowRegistry.register(CoderOnlyWorkflow, scopes=["op"])
workflow_class = WorkflowRegistry.get_workflow_class("CoderOnlyWorkflow")
assert workflow_class is not None
assert workflow_class == CoderOnlyWorkflow
assert hasattr(workflow_class, 'TOOL_NAME')
assert hasattr(workflow_class, 'DESCRIPTION')
assert hasattr(workflow_class, 'PARAMETERS_SCHEMA')
assert hasattr(workflow_class, 'build_graph')
if __name__ == "__main__":
pytest.main([__file__, "-v", "-s"])