feat(delivery/mcp): get_delivery_status 支持按 pr_number/branch 查询,结论绑定 Gitea head SHA(使者回传 #203) #32
@ -2680,6 +2680,67 @@ mod tests {
|
||||
assert!(text.contains("feat/delivery-status-by-pr"), "{text}");
|
||||
}
|
||||
|
||||
/// 使者回传 #203 的症状正是「传 pr_number 也不起作用」:经 scoped dispatch 断言
|
||||
/// pr_number/branch 真正到达能力本体(未绑定 Gitea,不发网络请求)。
|
||||
#[tokio::test]
|
||||
async fn delivery_status_dispatch_forwards_pr_and_branch_targets() {
|
||||
db::init_test_pool();
|
||||
let base = temp_base("delivery_target_dispatch");
|
||||
{
|
||||
let conn = db::pool().get().unwrap();
|
||||
conn.execute(
|
||||
"INSERT OR IGNORE INTO project_profiles (id, name) VALUES ('delivery-target-profile', 'Delivery target fixture')",
|
||||
[],
|
||||
)
|
||||
.unwrap();
|
||||
conn.execute(
|
||||
"INSERT OR IGNORE INTO project_workspaces (id, profile_id, win_path) VALUES ('delivery-target', 'delivery-target-profile', ?1)",
|
||||
[base.to_str().unwrap()],
|
||||
)
|
||||
.unwrap();
|
||||
}
|
||||
let target_of = |result: &Value| {
|
||||
assert_ne!(result["isError"], true, "{result}");
|
||||
result["structuredContent"]["target"].clone()
|
||||
};
|
||||
|
||||
let by_pr = tools_call_for_project(
|
||||
Some(&json!({"name": "get_delivery_status", "arguments": {
|
||||
"pr_number": 31, "branch": "feat/worktree"
|
||||
}})),
|
||||
"delivery-target",
|
||||
)
|
||||
.await;
|
||||
let target = target_of(&by_pr);
|
||||
assert_eq!(target["mode"], "pull_request", "{by_pr}");
|
||||
assert_eq!(target["pr_number"], 31, "{by_pr}");
|
||||
assert_eq!(
|
||||
by_pr["structuredContent"]["pull_request"]["state"],
|
||||
"not_configured"
|
||||
);
|
||||
|
||||
let by_branch = tools_call_for_project(
|
||||
Some(&json!({"name": "get_delivery_status", "arguments": {
|
||||
"branch": "feat/worktree"
|
||||
}})),
|
||||
"delivery-target",
|
||||
)
|
||||
.await;
|
||||
let target = target_of(&by_branch);
|
||||
assert_eq!(target["mode"], "branch", "{by_branch}");
|
||||
assert_eq!(target["branch"], "feat/worktree", "{by_branch}");
|
||||
|
||||
let default = tools_call_for_project(
|
||||
Some(&json!({"name": "get_delivery_status", "arguments": {
|
||||
"pr_number": null, "branch": null
|
||||
}})),
|
||||
"delivery-target",
|
||||
)
|
||||
.await;
|
||||
assert_eq!(target_of(&default)["mode"], "local_branch", "{default}");
|
||||
let _ = std::fs::remove_dir_all(&base);
|
||||
}
|
||||
|
||||
#[tokio::test]
|
||||
async fn delivery_status_tool_requires_project_id() {
|
||||
let result = tools_call(Some(&json!({
|
||||
|
||||
Loading…
Reference in New Issue
Block a user