use gate4agent::{CliTool, SpawnOptions, TransportSession};
#[test]
fn all_cli_tool_variants_are_accessible() {
let tools = [
CliTool::ClaudeCode,
CliTool::Codex,
CliTool::Gemini,
CliTool::Cursor,
CliTool::OpenCode,
CliTool::OpenClaw,
];
assert_eq!(tools.len(), 6);
}
#[test]
fn spawn_options_with_resume_id() {
let opts = SpawnOptions {
resume_session_id: Some("ses_1234".to_string()),
..SpawnOptions::default()
};
assert_eq!(opts.resume_session_id.as_deref(), Some("ses_1234"));
assert!(opts.prompt.is_empty());
assert!(opts.model.is_none());
}
#[test]
fn transport_session_is_public_type() {
let _: fn() -> std::pin::Pin<Box<dyn std::future::Future<Output = _>>> = || {
Box::pin(async {
let dir = std::path::Path::new(".");
let result = TransportSession::spawn(
CliTool::ClaudeCode,
dir,
"hello",
SpawnOptions::default(),
)
.await;
result
})
};
}
#[test]
fn transport_session_public_methods_exist() {
fn _assert_api_exists() {
async fn _check(session: TransportSession) -> &'static str {
let _rx = session.subscribe();
let _sid: &str = session.session_id();
let _ = session.send_prompt("test").await;
let _ = session.kill().await;
"ok"
}
}
}
#[tokio::test]
async fn openclaw_spawn_returns_daemon_error_when_no_daemon() {
let dir = std::env::temp_dir();
let result = TransportSession::spawn(
CliTool::OpenClaw,
&dir,
"test",
SpawnOptions::default(),
)
.await;
let err = result.err().expect("OpenClaw spawn must fail when no daemon is running");
let err_str = format!("{}", err);
assert!(
err_str.contains("not running") || err_str.contains("timed out"),
"Expected daemon not running or timed out error, got: {}",
err_str
);
}