use std::fs;
use tempfile::TempDir;
use gitgrip::core::agent_registry::{
get_agent, get_agent_by_name, list_agents, register_agent, rename_agent,
};
#[test]
fn test_full_agent_lifecycle() {
let tmp = TempDir::new().unwrap();
let org_dir = tmp.path().join("conversa");
fs::create_dir_all(&org_dir).unwrap();
let org_id = "conversa";
let anchor_id = register_agent(&org_dir, org_id, "anchor", Some("CEO — coordination")).unwrap();
let opus_id = register_agent(&org_dir, org_id, "opus", Some("CTO — data backbone")).unwrap();
let atlas_id = register_agent(&org_dir, org_id, "atlas", Some("CXO — UI, design")).unwrap();
let forge_id = register_agent(&org_dir, org_id, "forge", Some("Chief Architect")).unwrap();
assert_eq!(anchor_id, "anchor-001");
assert_eq!(opus_id, "opus-001");
assert_eq!(atlas_id, "atlas-001");
assert_eq!(forge_id, "forge-001");
let anchor_lookup = get_agent_by_name(&org_dir, org_id, "anchor")
.unwrap()
.unwrap();
assert_eq!(anchor_lookup.agent_id, "anchor-001");
assert_eq!(anchor_lookup.role, Some("CEO — coordination".to_string()));
let all = list_agents(&org_dir, org_id).unwrap();
assert_eq!(all.len(), 4);
rename_agent(&org_dir, "opus-001", "Opus Prime").unwrap();
let renamed = get_agent(&org_dir, "opus-001").unwrap().unwrap();
assert_eq!(renamed.agent_id, "opus-001"); assert_eq!(renamed.display_name, "Opus Prime");
let dup = register_agent(&org_dir, org_id, "anchor", None);
assert!(dup.is_err(), "Duplicate display_name should be rejected");
let ids: Vec<String> = all.iter().map(|a| a.agent_id.clone()).collect();
let unique: std::collections::HashSet<_> = ids.iter().collect();
assert_eq!(ids.len(), unique.len(), "All IDs must be unique");
}
#[test]
fn test_cross_org_isolation() {
let tmp = TempDir::new().unwrap();
let synapt_dir = tmp.path().join("synapt-dev");
let conversa_dir = tmp.path().join("conversa");
fs::create_dir_all(&synapt_dir).unwrap();
fs::create_dir_all(&conversa_dir).unwrap();
let synapt_atlas =
register_agent(&synapt_dir, "synapt-dev", "Atlas", Some("research")).unwrap();
let conversa_atlas =
register_agent(&conversa_dir, "conversa", "Atlas", Some("design")).unwrap();
assert_eq!(synapt_atlas, "atlas-001");
assert_eq!(conversa_atlas, "atlas-001");
assert_eq!(list_agents(&synapt_dir, "synapt-dev").unwrap().len(), 1);
assert_eq!(list_agents(&conversa_dir, "conversa").unwrap().len(), 1);
let s = get_agent(&synapt_dir, "atlas-001").unwrap().unwrap();
let c = get_agent(&conversa_dir, "atlas-001").unwrap().unwrap();
assert_eq!(s.role, Some("research".to_string()));
assert_eq!(c.role, Some("design".to_string()));
}