from codesnap.output.json_formatter import JSONFormatter class TestJSONFormatter: def setup_method(self) -> None: self.formatter = JSONFormatter() def test_format_valid_result(self) -> None: result = { "files": [ { "file": "test.py", "language": "python", "lines": 50, "functions": [{"name": "test_func", "start_line": 1, "end_line": 10}], "classes": [], "complexity": {"score": 5, "rating": "low"} } ], "dependency_graph": { "total_dependencies": 0, "orphaned_files": 0, "cycles_detected": 0, "cycle_details": [], "orphaned_details": [], "edges": [], "statistics": {} } } output = self.formatter.format(result) import json parsed = json.loads(output) assert "schema_version" in parsed assert "summary" in parsed assert "files" in parsed assert parsed["summary"]["total_files"] == 1 def test_format_empty_result(self) -> None: result = { "files": [], "dependency_graph": { "total_dependencies": 0, "orphaned_files": 0, "cycles_detected": 0, "cycle_details": [], "orphaned_details": [], "edges": [], "statistics": {} } } output = self.formatter.format(result) import json parsed = json.loads(output) assert parsed["summary"]["total_files"] == 0 def test_summary_includes_language_counts(self) -> None: result = { "files": [ {"file": "a.py", "language": "python", "lines": 10, "functions": [], "classes": [], "complexity": {}}, {"file": "b.js", "language": "javascript", "lines": 20, "functions": [], "classes": [], "complexity": {}}, {"file": "c.py", "language": "python", "lines": 30, "functions": [], "classes": [], "complexity": {}} ], "dependency_graph": { "total_dependencies": 0, "orphaned_files": 0, "cycles_detected": 0, "cycle_details": [], "orphaned_details": [], "edges": [], "statistics": {} } } output = self.formatter.format(result) import json parsed = json.loads(output) assert parsed["summary"]["languages"]["python"] == 2 assert parsed["summary"]["languages"]["javascript"] == 1