| 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() |
|
|