use crate::brain::prompt_builder::{BrainLoader, RuntimeInfo};
use tempfile::TempDir;
fn loader() -> (TempDir, BrainLoader) {
let dir = TempDir::new().expect("tempdir");
let loader = BrainLoader::new(dir.path().to_path_buf());
(dir, loader)
}
fn runtime_info_with_collapsed_wd() -> RuntimeInfo {
RuntimeInfo {
model: Some("test-model".to_string()),
provider: Some("test-provider".to_string()),
working_directory: Some("~/srv/rs/opencrabs".to_string()),
}
}
#[test]
fn full_brain_renders_home_anchor_when_wd_present() {
let (_dir, loader) = loader();
let info = runtime_info_with_collapsed_wd();
let prompt = loader.build_system_brain(Some(&info), None);
assert!(prompt.contains("Working directory: ~/srv/rs/opencrabs"));
let home = dirs::home_dir().expect("home dir");
assert!(
prompt.contains(&format!("Home: {}", home.display())),
"home anchor missing — prompt should include `Home: {}`",
home.display()
);
assert!(
prompt.contains("the '~' in paths above expands to this"),
"home-anchor explainer missing"
);
}
#[test]
fn full_brain_renders_path_expansion_rule() {
let (_dir, loader) = loader();
let info = runtime_info_with_collapsed_wd();
let prompt = loader.build_system_brain(Some(&info), None);
assert!(
prompt.contains("Path expansion:"),
"missing 'Path expansion:' header"
);
assert!(
prompt.contains("the shell expands `~` for you"),
"missing the 'shell expands ~ for you' guidance"
);
assert!(
prompt.contains("Do NOT substitute `/Users/<name>/...` yourself"),
"missing the explicit 'do not substitute' rule that addresses the \
/Users/adolfo regression"
);
}
#[test]
fn core_brain_renders_home_anchor_when_wd_present() {
let (_dir, loader) = loader();
let info = runtime_info_with_collapsed_wd();
let prompt = loader.build_core_brain(Some(&info), None);
assert!(prompt.contains("Working directory: ~/srv/rs/opencrabs"));
let home = dirs::home_dir().expect("home dir");
assert!(prompt.contains(&format!("Home: {}", home.display())));
assert!(prompt.contains("Path expansion:"));
assert!(prompt.contains("the shell expands `~` for you"));
}
#[test]
fn no_anchor_when_working_directory_is_none() {
let (_dir, loader) = loader();
let info = RuntimeInfo {
model: Some("test-model".to_string()),
provider: None,
working_directory: None,
};
let prompt = loader.build_system_brain(Some(&info), None);
assert!(
!prompt.contains("Home: "),
"Home anchor should not appear without a working directory"
);
assert!(
!prompt.contains("Path expansion:"),
"expansion rule should not appear without a working directory"
);
}
#[test]
fn no_anchor_when_runtime_info_absent() {
let (_dir, loader) = loader();
let prompt = loader.build_system_brain(None, None);
assert!(!prompt.contains("--- Runtime Info ---"));
assert!(!prompt.contains("Home: "));
assert!(!prompt.contains("Path expansion:"));
}