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::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 no_saved_provider_is_a_noop() {
let svc = make_service().await;
let sid = Uuid::new_v4();
svc.ensure_session_provider_restored(sid, None, None).await;
assert_eq!(svc.provider_name_for_session(sid), "mock");
}
#[tokio::test]
async fn saved_equals_global_default_is_a_noop() {
let svc = make_service().await;
let sid = Uuid::new_v4();
svc.ensure_session_provider_restored(sid, Some("mock"), Some("mock-model"))
.await;
assert_eq!(svc.provider_name_for_session(sid), "mock");
assert_eq!(svc.provider_model_for_session(sid), "mock-model");
}
#[tokio::test]
async fn already_registered_session_is_not_touched() {
let svc = make_service().await;
let sid = Uuid::new_v4();
let provider: Arc<dyn Provider> = Arc::new(MockProvider);
svc.swap_provider_for_session(sid, provider, "pinned-model".to_string());
svc.ensure_session_provider_restored(sid, Some("some-other-provider"), Some("x"))
.await;
assert_eq!(svc.provider_name_for_session(sid), "mock");
assert_eq!(svc.provider_model_for_session(sid), "pinned-model");
}