from pathlib import Path from scripts.adapters.opengrep import parse_opengrep_output, _clean_rule_id _FIXTURES = Path(__file__).parent / "fixtures" def test_parses_error_as_high(): payload = (_FIXTURES / "opengrep_sample.json").read_text() findings = parse_opengrep_output(payload) by_rule = {f.rule_id: f for f in findings} key = "python.lang.security.audit.dangerous-code.dangerous-code" assert key in by_rule assert by_rule[key].severity == "high" assert by_rule[key].cwe == "CWE-94" assert by_rule[key].line == 12 def test_parses_warning_as_medium(): payload = (_FIXTURES / "opengrep_sample.json").read_text() findings = parse_opengrep_output(payload) by_rule = {f.rule_id: f for f in findings} key = "javascript.lang.audit.dynamic-expression" assert by_rule[key].severity == "medium" def test_handles_empty(): assert parse_opengrep_output('{"results": []}') == [] def test_handles_invalid(): assert parse_opengrep_output("nope") == [] def test_clean_rule_id_strips_local_rules_path_prefix(): mangled = "home.mroberts..claude.plugins.reviews.skills.audit-code.scripts.rules.lua-os-execute" assert _clean_rule_id(mangled) == "lua-os-execute" def test_clean_rule_id_leaves_registry_ids_untouched(): registry_id = "python.lang.security.audit.dangerous-code.dangerous-code" assert _clean_rule_id(registry_id) == registry_id