feat(permissions): expose network permission state (#103)

This commit is contained in:
2026-07-25 23:05:55 +02:00
parent e8731834f4
commit 3047dc9195
31 changed files with 2080 additions and 94 deletions

View File

@ -0,0 +1,69 @@
use app_tauri_lib::dto::{
ProjectSystemPermissionsDto, ResolvedAgentSystemPermissionsDto,
UpdateProjectSystemPermissionsRequestDto,
};
use domain::{
NetworkPolicy, ProjectSystemPermissions, ResolvedAgentSystemPermissions, RuntimeLock,
RuntimeLockState, SystemPermissionControl, SystemPermissionControlMode, SystemPermissionSet,
};
use serde_json::json;
#[test]
fn project_system_permissions_dto_serializes_network_policy_contract() {
let dto = ProjectSystemPermissionsDto(ProjectSystemPermissions::new(
Some(SystemPermissionSet::new(Some(NetworkPolicy::Ask))),
vec![],
));
let value = serde_json::to_value(dto).unwrap();
assert_eq!(
value,
json!({
"version": 1,
"projectDefault": {
"network": "ask",
},
})
);
}
#[test]
fn update_project_system_permissions_request_deserializes_allow_deny_ask() {
let dto: UpdateProjectSystemPermissionsRequestDto = serde_json::from_value(json!({
"projectId": "project",
"permissions": {
"network": "allow",
},
}))
.unwrap();
assert_eq!(
dto.permissions.and_then(|permissions| permissions.network),
Some(NetworkPolicy::Allow)
);
}
#[test]
fn resolved_agent_system_permissions_dto_carries_runtime_lock_and_read_only_control() {
let dto = ResolvedAgentSystemPermissionsDto(ResolvedAgentSystemPermissions {
wanted: Some(NetworkPolicy::Allow),
effective: NetworkPolicy::Deny,
runtime_lock: RuntimeLock {
state: RuntimeLockState::Locked,
source: Some("external-runtime".to_owned()),
reason: Some("not inspectable".to_owned()),
},
control: SystemPermissionControl {
mode: SystemPermissionControlMode::ReadOnly,
reason: Some("not editable".to_owned()),
},
});
let value = serde_json::to_value(dto).unwrap();
assert_eq!(value["wanted"], "allow");
assert_eq!(value["effective"], "deny");
assert_eq!(value["runtimeLock"]["state"], "locked");
assert_eq!(value["control"]["mode"], "readOnly");
}