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

140 lines
4.1 KiB
Rust

//! Integration tests for permission system (test-plan PS-1 through PS-7).
//!
//! These test the public API surface of risk level calculation and permission summary.
use nomifun_extension::{
ExtPermissions, FilesystemScope, NetworkPermission, PermissionLevel, RiskLevel, build_permission_summary,
calculate_risk_level,
};
// -- PS-1: storage + events only → safe --
#[test]
fn ps1_storage_and_events_is_safe() {
let perms = ExtPermissions {
storage: Some(true),
events: Some(true),
..Default::default()
};
assert_eq!(calculate_risk_level(&perms), RiskLevel::Safe);
}
// -- PS-2: scoped network → moderate --
#[test]
fn ps2_scoped_network_is_moderate() {
let perms = ExtPermissions {
network: Some(NetworkPermission::Scoped {
allowed_domains: vec!["api.example.com".into()],
reasoning: "API calls".into(),
}),
..Default::default()
};
assert_eq!(calculate_risk_level(&perms), RiskLevel::Moderate);
}
// -- PS-3: shell → dangerous --
#[test]
fn ps3_shell_is_dangerous() {
let perms = ExtPermissions {
shell: Some(true),
..Default::default()
};
assert_eq!(calculate_risk_level(&perms), RiskLevel::Dangerous);
}
// -- PS-4: full filesystem → dangerous --
#[test]
fn ps4_full_filesystem_is_dangerous() {
let perms = ExtPermissions {
filesystem: Some(FilesystemScope::Full),
..Default::default()
};
assert_eq!(calculate_risk_level(&perms), RiskLevel::Dangerous);
}
// -- PS-5: workspace filesystem → moderate --
#[test]
fn ps5_workspace_filesystem_is_moderate() {
let perms = ExtPermissions {
filesystem: Some(FilesystemScope::Workspace),
..Default::default()
};
assert_eq!(calculate_risk_level(&perms), RiskLevel::Moderate);
}
// -- PS-6: unrestricted network → dangerous --
#[test]
fn ps6_unrestricted_network_is_dangerous() {
let perms = ExtPermissions {
network: Some(NetworkPermission::Unrestricted(true)),
..Default::default()
};
assert_eq!(calculate_risk_level(&perms), RiskLevel::Dangerous);
}
// -- PS-7: no permissions → safe --
#[test]
fn ps7_no_permissions_is_safe() {
let perms = ExtPermissions::default();
assert_eq!(calculate_risk_level(&perms), RiskLevel::Safe);
}
// -- Summary integration --
#[test]
fn summary_contains_correct_risk_and_details() {
let perms = ExtPermissions {
storage: Some(true),
network: Some(NetworkPermission::Scoped {
allowed_domains: vec!["api.example.com".into()],
reasoning: "needed".into(),
}),
..Default::default()
};
let summary = build_permission_summary(&perms);
assert_eq!(summary.risk_level, RiskLevel::Moderate);
assert_eq!(summary.permissions, perms);
// Should have 7 detail entries (one per permission type)
assert_eq!(summary.details.len(), 7);
// Storage should be Full
let storage = summary.details.iter().find(|d| d.permission == "storage").unwrap();
assert_eq!(storage.level, PermissionLevel::Full);
// Network should be Limited
let network = summary.details.iter().find(|d| d.permission == "network").unwrap();
assert_eq!(network.level, PermissionLevel::Limited);
// Shell should be None
let shell = summary.details.iter().find(|d| d.permission == "shell").unwrap();
assert_eq!(shell.level, PermissionLevel::None);
}
#[test]
fn summary_dangerous_permissions_detail() {
let perms = ExtPermissions {
shell: Some(true),
filesystem: Some(FilesystemScope::Full),
network: Some(NetworkPermission::Unrestricted(true)),
..Default::default()
};
let summary = build_permission_summary(&perms);
assert_eq!(summary.risk_level, RiskLevel::Dangerous);
let shell = summary.details.iter().find(|d| d.permission == "shell").unwrap();
assert_eq!(shell.level, PermissionLevel::Full);
let fs = summary.details.iter().find(|d| d.permission == "filesystem").unwrap();
assert_eq!(fs.level, PermissionLevel::Full);
let net = summary.details.iter().find(|d| d.permission == "network").unwrap();
assert_eq!(net.level, PermissionLevel::Full);
}