fix(templates): open_project ne rétro-synchronise plus les permissions agents vers les templates — #244 (QA verte)
Suppression du backfill agent→template au open_project (cause racine de la non-persistance des permissions MCP/system des templates) et couverture de régression : create/read/update des default permissions + test dédié open_project sans backfill.
This commit is contained in:
@ -202,8 +202,8 @@ mod tests {
|
||||
};
|
||||
use domain::ports::{EventBus, EventStream, IdGenerator, StoreError, TemplateStore};
|
||||
use domain::{
|
||||
AgentTemplate, DomainEvent, MarkdownDoc, ProfileId, ProjectId, ProjectPath, RemoteRef,
|
||||
TemplateVersion,
|
||||
AgentTemplate, DomainEvent, MarkdownDoc, McpToolPolicy, NetworkPolicy, ProfileId,
|
||||
ProjectId, ProjectPath, RemoteRef, SystemPermissionSet, TemplateVersion,
|
||||
};
|
||||
use uuid::Uuid;
|
||||
|
||||
@ -314,12 +314,24 @@ mod tests {
|
||||
"name": "Base",
|
||||
"content": "v1",
|
||||
"defaultProfileId": profile_id,
|
||||
"defaultAgentName": "Base Agent",
|
||||
"defaultSystemPermissions": { "network": "allow" },
|
||||
"defaultMcpToolPermissions": { "allowedTools": ["idea_template_read"] },
|
||||
}),
|
||||
)
|
||||
.await
|
||||
.unwrap();
|
||||
let template_id = created["id"].as_str().unwrap().to_owned();
|
||||
assert_eq!(created["version"], json!(TemplateVersion::INITIAL));
|
||||
assert_eq!(created["defaultAgentName"], "Base Agent");
|
||||
assert_eq!(
|
||||
created["defaultSystemPermissions"],
|
||||
json!({ "network": "allow" })
|
||||
);
|
||||
assert_eq!(
|
||||
created["defaultMcpToolPermissions"],
|
||||
json!({ "allowedTools": ["idea_template_read"] })
|
||||
);
|
||||
|
||||
let read = provider
|
||||
.handle_template_tool(
|
||||
@ -332,6 +344,15 @@ mod tests {
|
||||
.unwrap();
|
||||
assert_eq!(read["name"], "Base");
|
||||
assert_eq!(read["contentMd"], "v1");
|
||||
assert_eq!(read["defaultAgentName"], "Base Agent");
|
||||
assert_eq!(
|
||||
read["defaultSystemPermissions"],
|
||||
json!({ "network": "allow" })
|
||||
);
|
||||
assert_eq!(
|
||||
read["defaultMcpToolPermissions"],
|
||||
json!({ "allowedTools": ["idea_template_read"] })
|
||||
);
|
||||
|
||||
let listed = provider
|
||||
.handle_template_tool(&project(), "agent", "idea_template_list", json!({}))
|
||||
@ -344,12 +365,48 @@ mod tests {
|
||||
&project(),
|
||||
"agent",
|
||||
"idea_template_update",
|
||||
json!({ "templateId": template_id, "content": "v2" }),
|
||||
json!({
|
||||
"templateId": template_id,
|
||||
"content": "v2",
|
||||
"defaultSystemPermissions": { "network": "deny" },
|
||||
"defaultMcpToolPermissions": { "allowedTools": ["idea_template_update"] },
|
||||
}),
|
||||
)
|
||||
.await
|
||||
.unwrap();
|
||||
assert_eq!(updated["contentMd"], "v2");
|
||||
assert_eq!(updated["version"], json!(2));
|
||||
assert_eq!(updated["defaultAgentName"], "Base Agent");
|
||||
assert_eq!(
|
||||
updated["defaultSystemPermissions"],
|
||||
json!({ "network": "deny" })
|
||||
);
|
||||
assert_eq!(
|
||||
updated["defaultMcpToolPermissions"],
|
||||
json!({ "allowedTools": ["idea_template_update"] })
|
||||
);
|
||||
assert_eq!(
|
||||
store
|
||||
.get(TemplateId::from_uuid(
|
||||
Uuid::parse_str(&template_id).unwrap()
|
||||
))
|
||||
.await
|
||||
.unwrap()
|
||||
.default_system_permissions,
|
||||
Some(SystemPermissionSet::new(Some(NetworkPolicy::Deny)))
|
||||
);
|
||||
assert_eq!(
|
||||
store
|
||||
.get(TemplateId::from_uuid(
|
||||
Uuid::parse_str(&template_id).unwrap()
|
||||
))
|
||||
.await
|
||||
.unwrap()
|
||||
.default_mcp_tool_policy,
|
||||
Some(McpToolPolicy {
|
||||
allowed_tools: vec!["idea_template_update".to_owned()]
|
||||
})
|
||||
);
|
||||
assert!(matches!(
|
||||
events.events.lock().unwrap().as_slice(),
|
||||
[DomainEvent::TemplateUpdated { .. }]
|
||||
|
||||
Reference in New Issue
Block a user