Update: 将子项目从 submodule 转为完整内容
- 移除 GovAI, nomifun-tauri, 算力盒子 的 submodule 引用 - 添加所有子项目的完整源代码 - 保留原始 .git 为 .git.bak 备份
This commit is contained in:
@@ -0,0 +1,139 @@
|
||||
//! 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);
|
||||
}
|
||||
Reference in New Issue
Block a user