from pathlib import Path from scripts.adapters.eslint import parse_eslint_output _FIXTURES = Path(__file__).parent / "fixtures" def test_parses_security_rule_as_high(): payload = (_FIXTURES / "eslint_sample.json").read_text() findings = parse_eslint_output(payload, repo_root="/repo") rules = {f.rule_id: f for f in findings} assert "security/detect-eval-with-expression" in rules sec = rules["security/detect-eval-with-expression"] assert sec.severity == "high" assert sec.file == "src/auth.ts" assert sec.line == 22 def test_warning_severity_low(): payload = (_FIXTURES / "eslint_sample.json").read_text() findings = parse_eslint_output(payload, repo_root="/repo") rules = {f.rule_id: f for f in findings} assert rules["@typescript-eslint/no-explicit-any"].severity == "low" def test_non_security_error_severity_medium(): payload = '[{"filePath": "/repo/a.js", "messages": [{"ruleId": "no-undef", "severity": 2, "message": "x", "line": 1, "column": 1, "endLine": 1, "endColumn": 5}]}]' findings = parse_eslint_output(payload, repo_root="/repo") assert findings[0].severity == "medium" def test_strips_repo_prefix(): payload = (_FIXTURES / "eslint_sample.json").read_text() findings = parse_eslint_output(payload, repo_root="/repo") for f in findings: assert not f.file.startswith("/") def test_handles_invalid_json(): assert parse_eslint_output("nope", repo_root="/repo") == []