diff --git a/tests/test_mermaid_generator.py b/tests/test_mermaid_generator.py new file mode 100644 index 0000000..62ea852 --- /dev/null +++ b/tests/test_mermaid_generator.py @@ -0,0 +1,85 @@ +from pathlib import Path +from codemap.core import GraphBuilder, MermaidGenerator +from codemap.parsers import ParsedFile + + +def test_mermaid_generator_basic(): + builder = GraphBuilder() + + files = [ + ParsedFile(file_path=Path("/app/main.py"), module_name="main", dependencies=[], file_type="python"), + ParsedFile(file_path=Path("/app/utils.py"), module_name="utils", dependencies=[], file_type="python"), + ] + + builder.build_from_files(files) + graph_data = builder.get_graph_data() + + generator = MermaidGenerator(graph_data) + output = generator.generate_flowchart() + + assert "graph TD" in output + assert "main" in output + assert "utils" in output + + +def test_mermaid_generator_with_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"), + ] + + builder.build_from_files(files) + graph_data = builder.get_graph_data() + + generator = MermaidGenerator(graph_data) + output = generator.generate_flowchart(include_packages=True) + + assert "subgraph" in output + + +def test_mermaid_generator_class_diagram(): + builder = GraphBuilder() + + files = [ + ParsedFile(file_path=Path("/app/main.py"), module_name="main", dependencies=[], file_type="python"), + ] + + builder.build_from_files(files) + graph_data = builder.get_graph_data() + + generator = MermaidGenerator(graph_data) + output = generator.generate_class_diagram() + + assert "classDiagram" in output + + +def test_mermaid_generator_pie_chart(): + builder = GraphBuilder() + + files = [ + ParsedFile(file_path=Path("/app/main.py"), module_name="main", dependencies=[], file_type="python"), + ParsedFile(file_path=Path("/app/main.js"), module_name="main", dependencies=[], file_type="javascript"), + ParsedFile(file_path=Path("/app/main.go"), module_name="main", dependencies=[], file_type="go"), + ] + + builder.build_from_files(files) + graph_data = builder.get_graph_data() + + generator = MermaidGenerator(graph_data) + output = generator.generate_pie_chart() + + assert "pie" in output + assert "python" in output + assert "javascript" in output + assert "go" in output + + +def test_safe_id(): + builder = GraphBuilder() + generator = MermaidGenerator(builder.get_graph_data()) + + safe = generator._safe_id("/app/my-project/file.name.js") + assert " " not in safe + assert safe[0].isalpha() or safe[0] == "_"