use harness_context::default_world;
use harness_core::{Model, Task};
use harness_loop::{AgentLoop, Outcome};
use harness_models::{MockModel, MockResponse};
use std::sync::Arc;
#[tokio::test]
async fn boxed_takes_the_arc_a_factory_returns() {
let model: Arc<dyn Model> = Arc::new(MockModel::new().script(MockResponse::text("done")));
let ws = std::env::temp_dir().join(format!("boxed-model-{}", std::process::id()));
std::fs::create_dir_all(&ws).expect("workspace");
let mut world = default_world(&ws);
let outcome = AgentLoop::boxed(model)
.run(
Task {
description: "say done".into(),
source: None,
deadline: None,
},
&mut world,
)
.await
.expect("run");
let _ = std::fs::remove_dir_all(&ws);
match outcome {
Outcome::Done { text, .. } => assert_eq!(text.as_deref(), Some("done")),
other => panic!("expected Done, got {other:?}"),
}
}