use std::process::Command;
fn agent_binary() -> String {
let output = Command::new("cargo")
.args(["build", "-p", "terraphim_agent"])
.output()
.expect("cargo build should succeed");
if !output.status.success() {
panic!(
"cargo build failed: {}",
String::from_utf8_lossy(&output.stderr)
);
}
let workspace_root = std::path::Path::new(env!("CARGO_MANIFEST_DIR"))
.parent()
.unwrap()
.parent()
.unwrap();
workspace_root
.join("target/debug/terraphim-agent")
.to_string_lossy()
.to_string()
}
#[test]
fn learn_list_succeeds_from_tmp_dir() {
let binary = agent_binary();
let tmp = tempfile::tempdir().expect("create temp dir");
let output = Command::new(&binary)
.args(["learn", "list"])
.current_dir(tmp.path())
.output()
.expect("should execute learn list");
assert!(
output.status.success(),
"learn list should succeed from temp dir.\nstdout: {}\nstderr: {}",
String::from_utf8_lossy(&output.stdout),
String::from_utf8_lossy(&output.stderr),
);
}
#[test]
fn learn_hook_succeeds_from_tmp_dir() {
let binary = agent_binary();
let tmp = tempfile::tempdir().expect("create temp dir");
let mut child = Command::new(&binary)
.args(["learn", "hook"])
.current_dir(tmp.path())
.stdin(std::process::Stdio::piped())
.stdout(std::process::Stdio::piped())
.stderr(std::process::Stdio::piped())
.spawn()
.expect("should spawn learn hook");
drop(child.stdin.take());
let output = child
.wait_with_output()
.expect("should wait for learn hook");
let stderr = String::from_utf8_lossy(&output.stderr);
assert!(
!stderr.contains("TuiService") && !stderr.contains("panicked"),
"learn hook must not fail due to TuiService init.\nstderr: {}",
stderr,
);
}
#[test]
fn learn_capture_succeeds_from_tmp_dir() {
let binary = agent_binary();
let tmp = tempfile::tempdir().expect("create temp dir");
let output = Command::new(&binary)
.args([
"learn",
"capture",
"fake-cmd",
"--error",
"something went wrong",
"--exit-code",
"1",
])
.current_dir(tmp.path())
.output()
.expect("should execute learn capture");
assert!(
output.status.success(),
"learn capture should succeed from temp dir.\nstdout: {}\nstderr: {}",
String::from_utf8_lossy(&output.stdout),
String::from_utf8_lossy(&output.stderr),
);
}