Files
SuperCharged-Claude-Code-Up…/prometheus/tests/tools/test_graph_traversal.py
admin b52318eeae feat: Add intelligent auto-router and enhanced integrations
- Add intelligent-router.sh hook for automatic agent routing
- Add AUTO-TRIGGER-SUMMARY.md documentation
- Add FINAL-INTEGRATION-SUMMARY.md documentation
- Complete Prometheus integration (6 commands + 4 tools)
- Complete Dexto integration (12 commands + 5 tools)
- Enhanced Ralph with access to all agents
- Fix /clawd command (removed disable-model-invocation)
- Update hooks.json to v5 with intelligent routing
- 291 total skills now available
- All 21 commands with automatic routing

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude <noreply@anthropic.com>
2026-01-28 00:27:56 +04:00

190 lines
7.1 KiB
Python

import pytest
from prometheus.graph.knowledge_graph import KnowledgeGraph
from prometheus.tools.graph_traversal import GraphTraversalTool
from tests.test_utils import test_project_paths
@pytest.fixture(scope="function")
async def knowledge_graph_fixture():
kg = KnowledgeGraph(1000, 100, 10, 0)
await kg.build_graph(test_project_paths.TEST_PROJECT_PATH)
return kg
@pytest.fixture(scope="function")
def graph_traversal_tool(knowledge_graph_fixture):
graph_traversal_tool = GraphTraversalTool(knowledge_graph_fixture)
return graph_traversal_tool
@pytest.mark.slow
async def test_find_file_node_with_basename(graph_traversal_tool):
result = graph_traversal_tool.find_file_node_with_basename(test_project_paths.PYTHON_FILE.name)
basename = test_project_paths.PYTHON_FILE.name
relative_path = str(
test_project_paths.PYTHON_FILE.relative_to(test_project_paths.TEST_PROJECT_PATH).as_posix()
)
result_data = result[1]
assert len(result_data) == 1
assert "FileNode" in result_data[0]
assert result_data[0]["FileNode"].get("basename", "") == basename
assert result_data[0]["FileNode"].get("relative_path", "") == relative_path
@pytest.mark.slow
async def test_find_file_node_with_relative_path(graph_traversal_tool):
relative_path = str(
test_project_paths.MD_FILE.relative_to(test_project_paths.TEST_PROJECT_PATH).as_posix()
)
result = graph_traversal_tool.find_file_node_with_relative_path(relative_path)
basename = test_project_paths.MD_FILE.name
result_data = result[1]
assert len(result_data) == 1
assert "FileNode" in result_data[0]
assert result_data[0]["FileNode"].get("basename", "") == basename
assert result_data[0]["FileNode"].get("relative_path", "") == relative_path
@pytest.mark.slow
async def test_find_ast_node_with_text_in_file_with_basename(graph_traversal_tool):
basename = test_project_paths.PYTHON_FILE.name
result = graph_traversal_tool.find_ast_node_with_text_in_file_with_basename(
"Hello world!", basename
)
result_data = result[1]
assert len(result_data) > 0
for result_row in result_data:
assert "ASTNode" in result_row
assert "Hello world!" in result_row["ASTNode"].get("text", "")
assert "FileNode" in result_row
assert result_row["FileNode"].get("basename", "") == basename
@pytest.mark.slow
async def test_find_ast_node_with_text_in_file_with_relative_path(graph_traversal_tool):
relative_path = str(
test_project_paths.C_FILE.relative_to(test_project_paths.TEST_PROJECT_PATH).as_posix()
)
result = graph_traversal_tool.find_ast_node_with_text_in_file_with_relative_path(
"Hello world!", relative_path
)
result_data = result[1]
assert len(result_data) > 0
for result_row in result_data:
assert "ASTNode" in result_row
assert "Hello world!" in result_row["ASTNode"].get("text", "")
assert "FileNode" in result_row
assert result_row["FileNode"].get("relative_path", "") == relative_path
@pytest.mark.slow
async def test_find_ast_node_with_type_in_file_with_basename(graph_traversal_tool):
basename = test_project_paths.C_FILE.name
node_type = "function_definition"
result = graph_traversal_tool.find_ast_node_with_type_in_file_with_basename(node_type, basename)
result_data = result[1]
assert len(result_data) > 0
for result_row in result_data:
assert "ASTNode" in result_row
assert result_row["ASTNode"].get("type", "") == node_type
assert "FileNode" in result_row
assert result_row["FileNode"].get("basename", "") == basename
@pytest.mark.slow
async def test_find_ast_node_with_type_in_file_with_relative_path(graph_traversal_tool):
relative_path = str(
test_project_paths.JAVA_FILE.relative_to(test_project_paths.TEST_PROJECT_PATH).as_posix()
)
node_type = "string_literal"
result = graph_traversal_tool.find_ast_node_with_type_in_file_with_relative_path(
node_type, relative_path
)
result_data = result[1]
assert len(result_data) > 0
for result_row in result_data:
assert "ASTNode" in result_row
assert result_row["ASTNode"].get("type", "") == node_type
assert "FileNode" in result_row
assert result_row["FileNode"].get("relative_path", "") == relative_path
@pytest.mark.slow
async def test_find_text_node_with_text(graph_traversal_tool):
text = "Text under header C"
result = graph_traversal_tool.find_text_node_with_text(text)
result_data = result[1]
assert len(result_data) > 0
for result_row in result_data:
assert "TextNode" in result_row
assert text in result_row["TextNode"].get("text", "")
assert "start_line" in result_row["TextNode"]
assert result_row["TextNode"]["start_line"] == 1
assert "end_line" in result_row["TextNode"]
assert result_row["TextNode"]["end_line"] == 13
assert "FileNode" in result_row
assert result_row["FileNode"].get("relative_path", "") == "foo/test.md"
@pytest.mark.slow
async def test_find_text_node_with_text_in_file(graph_traversal_tool):
basename = test_project_paths.MD_FILE.name
text = "Text under header B"
result = graph_traversal_tool.find_text_node_with_text_in_file(text, basename)
result_data = result[1]
assert len(result_data) > 0
for result_row in result_data:
assert "TextNode" in result_row
assert text in result_row["TextNode"].get("text", "")
assert "start_line" in result_row["TextNode"]
assert result_row["TextNode"]["start_line"] == 1
assert "end_line" in result_row["TextNode"]
assert result_row["TextNode"]["end_line"] == 13
assert "FileNode" in result_row
assert result_row["FileNode"].get("basename", "") == basename
@pytest.mark.slow
async def test_get_next_text_node_with_node_id(graph_traversal_tool):
node_id = 34
result = graph_traversal_tool.get_next_text_node_with_node_id(node_id)
result_data = result[1]
assert len(result_data) > 0
for result_row in result_data:
assert "TextNode" in result_row
assert "Text under header D" in result_row["TextNode"].get("text", "")
assert "start_line" in result_row["TextNode"]
assert result_row["TextNode"]["start_line"] == 13
assert "end_line" in result_row["TextNode"]
assert result_row["TextNode"]["end_line"] == 15
assert "FileNode" in result_row
assert result_row["FileNode"].get("relative_path", "") == "foo/test.md"
@pytest.mark.slow
async def test_read_code_with_relative_path(graph_traversal_tool):
relative_path = str(
test_project_paths.C_FILE.relative_to(test_project_paths.TEST_PROJECT_PATH).as_posix()
)
result = graph_traversal_tool.read_code_with_relative_path(relative_path, 5, 6)
result_data = result[1]
assert len(result_data) > 0
for result_row in result_data:
assert "SelectedLines" in result_row
assert "return 0;" in result_row["SelectedLines"].get("text", "")
assert "FileNode" in result_row
assert result_row["FileNode"].get("relative_path", "") == relative_path