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] == "_"