Add test files
This commit is contained in:
138
tests/unit/test_graph_builder.py
Normal file
138
tests/unit/test_graph_builder.py
Normal file
@@ -0,0 +1,138 @@
|
||||
import pytest
|
||||
from pathlib import Path
|
||||
from src.graph.builder import GraphBuilder, GraphType, GraphNode, NodeType, GraphEdge
|
||||
from src.parsers.base import Entity, EntityType
|
||||
|
||||
|
||||
class TestGraphBuilder:
|
||||
def setup_method(self):
|
||||
self.builder = GraphBuilder(GraphType.DIRECTED)
|
||||
|
||||
def test_add_node(self):
|
||||
node = GraphNode(
|
||||
node_id="test_node",
|
||||
node_type=NodeType.FILE,
|
||||
name="test.py",
|
||||
file_path=Path("/test/test.py"),
|
||||
)
|
||||
node_id = self.builder.add_node(node)
|
||||
assert node_id == "test_node"
|
||||
assert len(self.builder.nodes) == 1
|
||||
|
||||
def test_add_multiple_nodes(self):
|
||||
node1 = GraphNode(node_id="node1", node_type=NodeType.FILE, name="file1.py")
|
||||
node2 = GraphNode(node_id="node2", node_type=NodeType.FILE, name="file2.py")
|
||||
self.builder.add_node(node1)
|
||||
self.builder.add_node(node2)
|
||||
assert len(self.builder.nodes) == 2
|
||||
|
||||
def test_add_edge(self):
|
||||
source = GraphNode(node_id="source", node_type=NodeType.FILE, name="source.py")
|
||||
target = GraphNode(node_id="target", node_type=NodeType.FILE, name="target.py")
|
||||
self.builder.add_node(source)
|
||||
self.builder.add_node(target)
|
||||
|
||||
edge = GraphEdge(source="source", target="target", edge_type="imports")
|
||||
self.builder.add_edge(edge)
|
||||
assert len(self.builder.edges) == 1
|
||||
|
||||
def test_get_graph(self):
|
||||
graph = self.builder.get_graph()
|
||||
assert graph is not None
|
||||
|
||||
def test_get_node_by_id(self):
|
||||
node = GraphNode(node_id="test", node_type=NodeType.FILE, name="test.py")
|
||||
self.builder.add_node(node)
|
||||
retrieved = self.builder.get_node_by_id("test")
|
||||
assert retrieved is not None
|
||||
assert retrieved.name == "test.py"
|
||||
|
||||
def test_get_nodes_by_type(self):
|
||||
file_node = GraphNode(node_id="file1", node_type=NodeType.FILE, name="file.py")
|
||||
func_node = GraphNode(node_id="func1", node_type=NodeType.FUNCTION, name="func")
|
||||
self.builder.add_node(file_node)
|
||||
self.builder.add_node(func_node)
|
||||
|
||||
file_nodes = self.builder.get_nodes_by_type(NodeType.FILE)
|
||||
func_nodes = self.builder.get_nodes_by_type(NodeType.FUNCTION)
|
||||
assert len(file_nodes) == 1
|
||||
assert len(func_nodes) == 1
|
||||
|
||||
def test_serialize(self):
|
||||
node = GraphNode(
|
||||
node_id="test",
|
||||
node_type=NodeType.FILE,
|
||||
name="test.py",
|
||||
file_path=Path("/test.py"),
|
||||
start_line=1,
|
||||
end_line=10,
|
||||
)
|
||||
self.builder.add_node(node)
|
||||
|
||||
data = self.builder.serialize()
|
||||
assert "nodes" in data
|
||||
assert "edges" in data
|
||||
assert len(data["nodes"]) == 1
|
||||
assert data["nodes"][0]["name"] == "test.py"
|
||||
|
||||
def test_deserialize(self):
|
||||
data = {
|
||||
"nodes": [
|
||||
{
|
||||
"id": "test",
|
||||
"type": "file",
|
||||
"name": "test.py",
|
||||
"file_path": "/test.py",
|
||||
"start_line": 1,
|
||||
"end_line": 10,
|
||||
}
|
||||
],
|
||||
"edges": [],
|
||||
}
|
||||
self.builder.deserialize(data)
|
||||
assert len(self.builder.nodes) == 1
|
||||
|
||||
def test_get_subgraph(self):
|
||||
node1 = GraphNode(node_id="n1", node_type=NodeType.FILE, name="f1.py")
|
||||
node2 = GraphNode(node_id="n2", node_type=NodeType.FILE, name="f2.py")
|
||||
node3 = GraphNode(node_id="n3", node_type=NodeType.FILE, name="f3.py")
|
||||
self.builder.add_node(node1)
|
||||
self.builder.add_node(node2)
|
||||
self.builder.add_node(node3)
|
||||
|
||||
subgraph = self.builder.get_subgraph(["n1", "n2"])
|
||||
assert subgraph.number_of_nodes() == 2
|
||||
|
||||
|
||||
class TestGraphNode:
|
||||
def test_default_label(self):
|
||||
node = GraphNode(node_id="test", node_type=NodeType.FILE, name="test.py")
|
||||
assert node.label == "test.py"
|
||||
|
||||
def test_custom_label(self):
|
||||
node = GraphNode(
|
||||
node_id="test",
|
||||
node_type=NodeType.FILE,
|
||||
name="test.py",
|
||||
label="Custom Label",
|
||||
)
|
||||
assert node.label == "Custom Label"
|
||||
|
||||
def test_default_style_and_shape(self):
|
||||
node = GraphNode(node_id="test", node_type=NodeType.FILE, name="test.py")
|
||||
assert node.style == "filled"
|
||||
assert node.shape == "ellipse"
|
||||
|
||||
|
||||
class TestGraphEdge:
|
||||
def test_default_edge_type(self):
|
||||
edge = GraphEdge(source="a", target="b")
|
||||
assert edge.edge_type == "depends"
|
||||
|
||||
def test_custom_edge_type(self):
|
||||
edge = GraphEdge(source="a", target="b", edge_type="imports")
|
||||
assert edge.edge_type == "imports"
|
||||
|
||||
def test_edge_with_label(self):
|
||||
edge = GraphEdge(source="a", target="b", label="imports os")
|
||||
assert edge.label == "imports os"
|
||||
Reference in New Issue
Block a user