Files
Nexus/tests/test_gate_ai_review.py
T
2026-07-08 22:31:31 +08:00

65 lines
1.9 KiB
Python

"""Gate 8 AI review helper tests (no cursor-agent network)."""
from __future__ import annotations
import json
from scripts.gate_ai_review import (
blockers,
extract_json_blob,
is_reviewable,
normalize_finding,
validate_review_doc,
)
def test_is_reviewable_skips_docs_and_assets() -> None:
assert is_reviewable("server/api/foo.py")
assert not is_reviewable("docs/changelog/x.md")
assert not is_reviewable("web/app/assets/index-abc.js")
def test_blockers_p1_high_confidence() -> None:
doc = {
"schema_version": 1,
"head_sha": "abc",
"verdict": "Ready with fixes",
"reviewed_at": "2026-06-14T00:00:00+00:00",
"findings": [
{"severity": "P1", "file": "a.py", "line": 1, "title": "bug", "confidence": 75},
{"severity": "P2", "file": "b.py", "line": 2, "title": "nit", "confidence": 100},
],
}
blocks = blockers(doc)
assert len(blocks) == 1
assert blocks[0]["severity"] == "P1"
def test_blockers_not_ready_verdict() -> None:
doc = {
"schema_version": 1,
"head_sha": "abc",
"verdict": "Not ready",
"reviewed_at": "2026-06-14T00:00:00+00:00",
"findings": [],
}
assert len(blockers(doc)) == 1
def test_extract_json_blob_nested_result() -> None:
inner = {"verdict": "Ready to merge", "findings": []}
outer = {"result": json.dumps(inner)}
parsed = extract_json_blob(json.dumps(outer))
assert parsed["verdict"] == "Ready to merge"
def test_validate_review_doc() -> None:
doc = {
"schema_version": 1,
"head_sha": "deadbeef",
"verdict": "Ready to merge",
"reviewed_at": "2026-06-14T00:00:00+00:00",
"findings": [normalize_finding({"severity": "p3", "file": "x", "line": "3", "title": "t", "confidence": "50"})],
}
validate_review_doc(doc)
assert doc["findings"][0]["severity"] == "P3"