mod helpers;
use helpers::TestContext;
use std::time::Duration;
#[test]
fn test_agent_workflow() {
let ctx = TestContext::new("test-e2e");
let output = ctx
.cmd()
.args([
"--session",
&ctx.session,
"run",
"echo 'Starting...' && sleep 0.5 && echo 'Server ready on port 3000' && sleep 60",
"--name",
"server",
])
.output()
.unwrap();
assert!(output.status.success());
let output = ctx
.cmd()
.args([
"--session",
&ctx.session,
"wait",
"server",
"--until",
"ready on port",
"--timeout",
"10",
])
.timeout(Duration::from_secs(15))
.output()
.unwrap();
assert!(
output.status.success(),
"wait failed: stdout={} stderr={}",
String::from_utf8_lossy(&output.stdout),
String::from_utf8_lossy(&output.stderr)
);
let output = ctx
.cmd()
.args(["--session", &ctx.session, "status", "--json"])
.output()
.unwrap();
assert!(output.status.success());
let status_out = String::from_utf8_lossy(&output.stdout);
assert!(
status_out.contains("running"),
"expected 'running' in status output: {}",
status_out
);
let output = ctx
.cmd()
.args(["--session", &ctx.session, "logs", "server", "--tail", "5"])
.output()
.unwrap();
assert!(output.status.success());
assert!(String::from_utf8_lossy(&output.stdout).contains("Server ready"));
let output = ctx
.cmd()
.args(["--session", &ctx.session, "stop-all"])
.output()
.unwrap();
assert!(output.status.success());
}