Files
freedak f7a720204a Update: 将子项目从 submodule 转为完整内容
- 移除 GovAI, nomifun-tauri, 算力盒子 的 submodule 引用
- 添加所有子项目的完整源代码
- 保留原始 .git 为 .git.bak 备份
2026-07-04 19:20:46 +08:00

45 lines
1.4 KiB
Rust

use nomi_protocol::commands::ApprovalScope;
use nomi_protocol::events::ToolCategory;
use nomi_protocol::{ToolApprovalManager, ToolApprovalResult};
use rstest::rstest;
#[rstest]
#[case(ApprovalScope::Once, ToolCategory::Exec, "exec", false)]
#[case(ApprovalScope::Always, ToolCategory::Edit, "edit", true)]
#[tokio::test]
async fn approve_resolves_request_and_updates_auto_approval(
#[case] scope: ApprovalScope,
#[case] category: ToolCategory,
#[case] category_name: &str,
#[case] should_auto_approve: bool,
) {
let manager = ToolApprovalManager::new();
let rx = manager.request_approval("call-1", &category);
manager.approve("call-1", scope);
let result = rx.await.expect("approval result should arrive");
assert!(matches!(result, ToolApprovalResult::Approved));
assert_eq!(manager.is_auto_approved(category_name), should_auto_approve);
}
#[tokio::test]
async fn resolve_preserves_denial_reason() {
let manager = ToolApprovalManager::new();
let rx = manager.request_approval("call-2", &ToolCategory::Exec);
manager.resolve(
"call-2",
ToolApprovalResult::Denied {
reason: "policy violation".to_string(),
},
);
let result = rx.await.expect("denial result should arrive");
assert!(matches!(
result,
ToolApprovalResult::Denied { reason } if reason == "policy violation"
));
assert!(!manager.is_auto_approved("exec"));
}