use crate::brain::agent::service::AgentService;
use crate::brain::provider::Provider;
use crate::db::Database;
use crate::services::ServiceContext;
use crate::tests::agent_service_mocks::MockProvider;
use std::path::PathBuf;
use std::sync::Arc;
use uuid::Uuid;
async fn make_service() -> AgentService {
let db = Database::connect_in_memory().await.unwrap();
db.run_migrations().await.unwrap();
let context = ServiceContext::new(db.pool().clone());
let provider: Arc<dyn Provider> = Arc::new(MockProvider);
AgentService::new_for_test(provider, context).await
}
#[tokio::test]
async fn sessions_have_independent_working_directories() {
let svc = make_service().await;
let a = Uuid::new_v4();
let b = Uuid::new_v4();
svc.set_working_directory_for_session(a, PathBuf::from("/tmp/session-a"));
svc.set_working_directory_for_session(b, PathBuf::from("/tmp/session-b"));
assert_eq!(
svc.get_working_directory_for_session(a),
PathBuf::from("/tmp/session-a")
);
assert_eq!(
svc.get_working_directory_for_session(b),
PathBuf::from("/tmp/session-b")
);
svc.set_working_directory_for_session(a, PathBuf::from("/tmp/session-a-moved"));
assert_eq!(
svc.get_working_directory_for_session(a),
PathBuf::from("/tmp/session-a-moved")
);
assert_eq!(
svc.get_working_directory_for_session(b),
PathBuf::from("/tmp/session-b")
);
}
#[tokio::test]
async fn per_session_cd_does_not_move_global() {
let svc = make_service().await;
let global_before = svc.get_working_directory();
let bg = Uuid::new_v4();
let handle = svc.working_dir_handle_for_session(bg);
assert_eq!(*handle.read().unwrap(), global_before);
*handle.write().unwrap() = PathBuf::from("/tmp/background-cd");
assert_eq!(
svc.get_working_directory_for_session(bg),
PathBuf::from("/tmp/background-cd")
);
assert_eq!(svc.get_working_directory(), global_before);
let fresh = Uuid::new_v4();
assert_eq!(svc.get_working_directory_for_session(fresh), global_before);
}
#[tokio::test]
async fn untouched_session_falls_back_to_global() {
let svc = make_service().await;
svc.set_working_directory(PathBuf::from("/tmp/global-seed"));
let fresh = Uuid::new_v4();
assert_eq!(
svc.get_working_directory_for_session(fresh),
PathBuf::from("/tmp/global-seed")
);
}