75 lines
2.3 KiB
Rust
75 lines
2.3 KiB
Rust
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_separates_wanted_control_from_runtime_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::Editable,
|
|
reason: None,
|
|
},
|
|
runtime_control: SystemPermissionControl {
|
|
mode: SystemPermissionControlMode::ReadOnly,
|
|
reason: Some("runtime 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"], "editable");
|
|
assert_eq!(value["runtimeControl"]["mode"], "readOnly");
|
|
}
|