diff --git a/tests/test_graph_builder.py b/tests/test_graph_builder.py new file mode 100644 index 0000000..d2c57ed --- /dev/null +++ b/tests/test_graph_builder.py @@ -0,0 +1,120 @@ +import tempfile +import os +from pathlib import Path +from codemap.core import GraphBuilder +from codemap.parsers import ParsedFile, Dependency + + +def test_graph_builder_basic(): + builder = GraphBuilder() + + dep = Dependency( + module_name="utils", + file_path=Path("/app/main.py"), + line_number=1 + ) + parsed1 = ParsedFile( + file_path=Path("/app/main.py"), + module_name="main", + dependencies=[dep], + file_type="python" + ) + parsed2 = ParsedFile( + file_path=Path("/app/utils.py"), + module_name="utils", + dependencies=[], + file_type="python" + ) + + builder.add_file(parsed1) + builder.add_file(parsed2) + + stats = builder.get_stats() + assert stats["node_count"] == 3 + assert stats["edge_count"] == 1 + + +def test_graph_builder_build_from_files(): + builder = GraphBuilder() + + files = [] + for i in range(3): + parsed = ParsedFile( + file_path=Path(f"/app/module{i}.py"), + module_name=f"module{i}", + dependencies=[], + file_type="python" + ) + files.append(parsed) + + builder.build_from_files(files) + + stats = builder.get_stats() + assert stats["node_count"] == 3 + assert stats["edge_count"] == 0 + + +def test_get_dependencies(): + builder = GraphBuilder() + + dep_a = Dependency(module_name="a", file_path=Path("/app/main.py"), line_number=1) + main = ParsedFile( + file_path=Path("/app/main.py"), + module_name="main", + dependencies=[dep_a], + file_type="python" + ) + dep_b = Dependency(module_name="b", file_path=Path("/app/utils.py"), line_number=1) + utils = ParsedFile( + file_path=Path("/app/utils.py"), + module_name="utils", + dependencies=[dep_b], + file_type="python" + ) + a = ParsedFile( + file_path=Path("/app/a.py"), + module_name="a", + dependencies=[], + file_type="python" + ) + + builder.add_file(main) + builder.add_file(utils) + builder.add_file(a) + + graph_data = builder.get_graph_data() + assert len(graph_data.nodes) >= 3 + assert len(graph_data.edges) >= 2 + + +def test_get_packages(): + builder = GraphBuilder() + + files = [ + ParsedFile(file_path=Path("/app/src/main.py"), module_name="main", dependencies=[], file_type="python"), + ParsedFile(file_path=Path("/app/src/utils.py"), module_name="utils", dependencies=[], file_type="python"), + ParsedFile(file_path=Path("/app/lib/helper.py"), module_name="helper", dependencies=[], file_type="python"), + ] + + builder.build_from_files(files) + packages = builder.get_packages() + + assert "src" in packages or "lib" in packages + + +def test_get_stats(): + builder = GraphBuilder() + + for i in range(5): + parsed = ParsedFile( + file_path=Path(f"/app/module{i}.py"), + module_name=f"module{i}", + dependencies=[], + file_type="python" + ) + builder.add_file(parsed) + + stats = builder.get_stats() + assert stats["node_count"] == 5 + assert stats["file_count"] == 5 + assert stats["edge_count"] == 0