from pathlib import Path from scripts.adapters.selene import parse_selene_output _FIXTURES = Path(__file__).parent / "fixtures" def test_parses_error_as_high(): payload = (_FIXTURES / "selene_sample.json").read_text() findings = parse_selene_output(payload) by_rule = {f.rule_id: f for f in findings} assert "undefined_variable" in by_rule f = by_rule["undefined_variable"] assert f.severity == "high" assert f.file == "src/game.lua" assert f.line == 5 assert f.end_line == 5 assert "undefined_var" in f.message assert f.tool == "selene" def test_parses_warning_as_medium(): payload = (_FIXTURES / "selene_sample.json").read_text() findings = parse_selene_output(payload) by_rule = {f.rule_id: f for f in findings} assert by_rule["undefined_field"].severity == "medium" assert by_rule["undefined_field"].line == 12 assert by_rule["undefined_field"].end_line == 12 def test_parses_note_as_low(): payload = (_FIXTURES / "selene_sample.json").read_text() findings = parse_selene_output(payload) by_rule = {f.rule_id: f for f in findings} assert by_rule["unused_variable"].severity == "low" def test_handles_empty_array(): findings = parse_selene_output("[]") assert findings == [] def test_handles_invalid_json(): findings = parse_selene_output("not json") assert findings == [] def test_handles_non_array_json(): findings = parse_selene_output('{"error": "unexpected"}') assert findings == []