feat: P1 补齐(自动评审队列、自动化+分诊、并发 caps、运行时审批队列)
This commit is contained in:
1 parent
29efc6c61f
commit
e0cecd70aa
18 files changed
+3474
-27
No files matched your search
@@ -0,0 +1,134 @@
|
||||
"""自动代码评审模块单测:cloud/review.py。
|
||||
|
||||
不跑真实模型、不联网:纯 sqlite 内存库 + 协议目标构造。
|
||||
覆盖四种 ReviewTarget、非法组合、登记/队列/取单条/写回
|
||||
状态机(findings 写回默认 completed、显式 failed 可覆盖)。
|
||||
"""
|
||||
|
||||
import sqlite3
|
||||
import sys
|
||||
import unittest
|
||||
from pathlib import Path
|
||||
|
||||
try:
|
||||
from cloud.review import build_review_target
|
||||
from cloud.review import create_review
|
||||
from cloud.review import ensure_reviews_table
|
||||
from cloud.review import get_review
|
||||
from cloud.review import list_project_reviews
|
||||
from cloud.review import list_reviews
|
||||
from cloud.review import update_review
|
||||
except ImportError: # discover -s cloud/tests 时把项目根目录补进 sys.path
|
||||
sys.path.insert(0, str(Path(__file__).resolve().parents[2]))
|
||||
from cloud.review import build_review_target
|
||||
from cloud.review import create_review
|
||||
from cloud.review import ensure_reviews_table
|
||||
from cloud.review import get_review
|
||||
from cloud.review import list_project_reviews
|
||||
from cloud.review import list_reviews
|
||||
from cloud.review import update_review
|
||||
|
||||
|
||||
class ReviewTargetTestCase(unittest.TestCase):
|
||||
def test_four_targets(self):
|
||||
self.assertEqual(
|
||||
build_review_target("uncommittedChanges"),
|
||||
{"type": "uncommittedChanges"})
|
||||
self.assertEqual(
|
||||
build_review_target("baseBranch", branch="main"),
|
||||
{"type": "baseBranch", "branch": "main"})
|
||||
self.assertEqual(
|
||||
build_review_target("commit", sha="abc123"),
|
||||
{"type": "commit", "sha": "abc123"})
|
||||
self.assertEqual(
|
||||
build_review_target("custom", instructions="look closely"),
|
||||
{"type": "custom", "instructions": "look closely"})
|
||||
|
||||
def test_target_validation(self):
|
||||
with self.assertRaises(ValueError):
|
||||
build_review_target("baseBranch")
|
||||
with self.assertRaises(ValueError):
|
||||
build_review_target("baseBranch", branch=" ")
|
||||
with self.assertRaises(ValueError):
|
||||
build_review_target("commit")
|
||||
with self.assertRaises(ValueError):
|
||||
build_review_target("custom")
|
||||
with self.assertRaises(ValueError):
|
||||
build_review_target("nope")
|
||||
|
||||
def test_whitespace_trimmed(self):
|
||||
self.assertEqual(
|
||||
build_review_target("baseBranch", branch=" main "),
|
||||
{"type": "baseBranch", "branch": "main"})
|
||||
|
||||
|
||||
class ReviewStoreTestCase(unittest.TestCase):
|
||||
def setUp(self):
|
||||
self.conn = sqlite3.connect(":memory:")
|
||||
ensure_reviews_table(self.conn)
|
||||
|
||||
def tearDown(self):
|
||||
self.conn.close()
|
||||
|
||||
def test_create_and_list(self):
|
||||
first = create_review(
|
||||
self.conn, "task-a", "proj-a", "uncommittedChanges",
|
||||
"owner-1")
|
||||
self.assertEqual(first["status"], "requested")
|
||||
self.assertIsNone(first["findings"])
|
||||
self.assertEqual(first["task_id"], "task-a")
|
||||
second = create_review(
|
||||
self.conn, "task-a", "proj-a", "baseBranch", "owner-1",
|
||||
branch="main")
|
||||
self.assertEqual(second["target_type"], "baseBranch")
|
||||
self.assertEqual(second["branch"], "main")
|
||||
queue = list_reviews(self.conn, "task-a")
|
||||
self.assertEqual(
|
||||
[r["id"] for r in queue], [first["id"], second["id"]])
|
||||
self.assertEqual(list_reviews(self.conn, "task-other"), [])
|
||||
proj = list_project_reviews(self.conn, "proj-a")
|
||||
self.assertEqual(len(proj), 2)
|
||||
|
||||
def test_create_invalid_target_writes_nothing(self):
|
||||
with self.assertRaises(ValueError):
|
||||
create_review(
|
||||
self.conn, "task-a", "proj-a", "commit", "owner-1")
|
||||
self.assertEqual(list_reviews(self.conn, "task-a"), [])
|
||||
|
||||
def test_get_missing_returns_none(self):
|
||||
self.assertIsNone(get_review(self.conn, "no-such-id"))
|
||||
|
||||
def test_findings_writeback_defaults_completed(self):
|
||||
record = create_review(
|
||||
self.conn, "task-a", "proj-a", "custom", "owner-1",
|
||||
instructions="check it")
|
||||
updated = update_review(
|
||||
self.conn, record["id"], findings="two issues found")
|
||||
self.assertEqual(updated["status"], "completed")
|
||||
self.assertEqual(updated["findings"], "two issues found")
|
||||
self.assertEqual(
|
||||
get_review(self.conn, record["id"])["status"], "completed")
|
||||
|
||||
def test_explicit_failed_status_kept(self):
|
||||
record = create_review(
|
||||
self.conn, "task-a", "proj-a", "uncommittedChanges",
|
||||
"owner-1")
|
||||
updated = update_review(
|
||||
self.conn, record["id"], status="failed",
|
||||
findings="reviewer crashed")
|
||||
self.assertEqual(updated["status"], "failed")
|
||||
|
||||
def test_update_validation(self):
|
||||
record = create_review(
|
||||
self.conn, "task-a", "proj-a", "uncommittedChanges",
|
||||
"owner-1")
|
||||
with self.assertRaises(ValueError):
|
||||
update_review(self.conn, record["id"], status="bogus")
|
||||
with self.assertRaises(ValueError):
|
||||
update_review(self.conn, record["id"], findings=123)
|
||||
self.assertIsNone(
|
||||
update_review(self.conn, "no-such-id", findings="x"))
|
||||
|
||||
|
||||
if __name__ == "__main__":
|
||||
unittest.main()
|
||||
Reference in new issue
Block a user