mcpuniverse / tests /workflow /test_workflow_builder.py
haochengsama's picture
Add files using upload-large-folder tool
a36ac47 verified
Raw
History Blame Contribute Delete
3.68 kB
import os
import unittest
from mcpuniverse.mcp.manager import MCPManager
from mcpuniverse.workflows.builder import WorkflowBuilder
from mcpuniverse.common.context import Context
class TestWorkflowBuilder(unittest.TestCase):
def test_get_constructor_signature(self):
builder = WorkflowBuilder(mcp_manager=MCPManager(), config={})
params = builder._get_constructor_signature(builder._workflow_classes["router"])
self.assertTrue(params["llm"]["is_llm_or_executor"])
self.assertTrue(params["agents"]["is_llm_or_executor"])
self.assertFalse(params["top_k"]["is_llm_or_executor"])
def test_build_dependency_graph(self):
folder = os.path.dirname(os.path.realpath(__file__))
config_file = os.path.join(folder, "../data/config/yaml_config.yaml")
workflow = WorkflowBuilder(mcp_manager=MCPManager(), config=config_file)
graph = workflow._build_dependency_graph()
self.assertListEqual(graph["agent-1"], ["llm-1"])
self.assertListEqual(graph["agent-2"], ["llm-1"])
self.assertListEqual(graph["agent-3"], ["llm-1"])
self.assertListEqual(sorted(graph["workflow-1"]), ["agent-1", "agent-2", "agent-3"])
def test_build_workflow(self):
folder = os.path.dirname(os.path.realpath(__file__))
config_file = os.path.join(folder, "../data/config/yaml_config.yaml")
workflow = WorkflowBuilder(mcp_manager=MCPManager(), config=config_file)
workflow.build()
description = workflow.get_component("main").get_description()
self.assertTrue("Main agent" in description)
def test_dump_config(self):
folder = os.path.dirname(os.path.realpath(__file__))
config_file = os.path.join(folder, "../data/config/yaml_config.yaml")
workflow = WorkflowBuilder(mcp_manager=MCPManager(), config=config_file)
workflow.build(project_id="test")
configs = workflow.dump_config()
name2id = {}
for c in configs:
if c["kind"] == "agent":
name2id[c["spec"]["name"]] = f'test:agent:{c["spec"]["name"]}'
elif c["kind"] == "llm":
name2id[c["spec"]["name"]] = f'test:llm:{c["spec"]["name"]}'
elif c["kind"] == "workflow":
name2id[c["spec"]["name"]] = f'test:workflow:{c["spec"]["name"]}'
workflow = WorkflowBuilder(mcp_manager=MCPManager(), config=configs)
workflow.build(project_id="test")
for name in name2id.keys():
self.assertEqual(workflow.get_component(name).id, name2id[name])
def test_list_undefined_env_vars(self):
folder = os.path.dirname(os.path.realpath(__file__))
config_file = os.path.join(folder, "../data/config/yaml_config.yaml")
workflow = WorkflowBuilder(mcp_manager=MCPManager(), config=config_file)
workflow.build(project_id="test")
os.environ["OPENAI_API_KEY"] = ""
r = workflow.list_undefined_env_vars()
self.assertListEqual(r, ["OPENAI_API_KEY"])
context = Context(env={"OPENAI_API_KEY": "xxx"})
workflow.set_context(context)
r = workflow.list_undefined_env_vars()
self.assertListEqual(r, [])
def test_claude_code_config(self):
folder = os.path.dirname(os.path.realpath(__file__))
config_file = os.path.join(folder, "../data/config/claude_code.yaml")
workflow = WorkflowBuilder(mcp_manager=MCPManager(), config=config_file)
workflow.build(project_id="test")
agent = workflow.get_component(name="agent-1")
self.assertEqual(type(agent).__name__, "ClaudeCodeAgent")
if __name__ == "__main__":
unittest.main()