import json from scripts.adapters.jscpd import parse_jscpd_output def test_parses_small_clone_as_low(): payload = { "duplicates": [ { "firstFile": {"name": "src/a.ts", "start": 1, "end": 10}, "secondFile": {"name": "src/b.ts", "start": 5, "end": 14}, "lines": 10, } ] } findings = parse_jscpd_output(json.dumps(payload)) assert len(findings) == 1 f = findings[0] assert f.tool == "jscpd" assert f.severity == "low" assert f.rule_id == "jscpd:clone-10lines" assert f.file == "src/a.ts" assert f.line == 1 assert f.end_line == 10 assert "src/b.ts" in f.message assert "10 lines" in f.message def test_parses_large_clone_as_medium(): payload = { "duplicates": [ { "firstFile": {"name": "src/a.ts", "start": 1, "end": 40}, "secondFile": {"name": "src/b.ts", "start": 1, "end": 40}, "lines": 40, } ] } findings = parse_jscpd_output(json.dumps(payload)) assert findings[0].severity == "medium" def test_empty_or_no_duplicates(): assert parse_jscpd_output("") == [] assert parse_jscpd_output("{}") == [] assert parse_jscpd_output(json.dumps({"duplicates": []})) == [] assert parse_jscpd_output("not json") == []