import json from scripts.adapters.radon import parse_radon_output def test_parses_high_complexity_as_medium(): payload = { "src/foo.py": [ {"type": "function", "name": "bar", "lineno": 10, "endline": 25, "complexity": 12, "rank": "C"} ] } findings = parse_radon_output(json.dumps(payload)) assert len(findings) == 1 f = findings[0] assert f.severity == "medium" assert f.rule_id == "radon:cc=12" assert f.file == "src/foo.py" assert f.line == 10 assert f.end_line == 25 def test_very_high_complexity_is_high(): payload = { "src/foo.py": [ {"type": "function", "name": "baz", "lineno": 30, "endline": 80, "complexity": 22, "rank": "E"} ] } findings = parse_radon_output(json.dumps(payload)) assert findings[0].severity == "high" def test_low_complexity_is_skipped(): payload = { "src/foo.py": [ {"type": "function", "name": "simple", "lineno": 1, "endline": 5, "complexity": 5, "rank": "A"} ] } assert parse_radon_output(json.dumps(payload)) == [] def test_multiple_files(): payload = { "src/a.py": [ {"type": "function", "name": "fn_a", "lineno": 1, "endline": 20, "complexity": 15, "rank": "C"} ], "src/b.py": [ {"type": "function", "name": "fn_b", "lineno": 5, "endline": 50, "complexity": 25, "rank": "E"} ], } findings = parse_radon_output(json.dumps(payload)) assert len(findings) == 2 files = {f.file for f in findings} assert files == {"src/a.py", "src/b.py"} def test_empty_input(): assert parse_radon_output("") == [] assert parse_radon_output("not json") == []