use std::path::Path;
use std::process::Command;
use assert_cmd::prelude::*;
use tempfile::TempDir;
fn mnem(repo: &Path, args: &[&str]) -> Command {
let mut cmd = Command::cargo_bin("mnem").expect("mnem binary built");
cmd.current_dir(repo).arg("-R").arg(repo);
cmd.env("HOME", repo);
cmd.env("USERPROFILE", repo);
cmd.env("MNEM_DISABLE_GLOBAL_CONFIG", "1");
cmd.env_remove("MNEM_EMBED_PROVIDER");
cmd.env_remove("MNEM_EMBED_MODEL");
cmd.env_remove("MNEM_EMBED_API_KEY_ENV");
cmd.env_remove("MNEM_EMBED_BASE_URL");
for a in args {
cmd.arg(a);
}
cmd
}
#[test]
fn ingest_keybert_reaches_embedder_resolution() {
let td = TempDir::new().expect("tmp");
let repo = td.path();
mnem(repo, &["init"])
.ok()
.expect("mnem init should succeed on an empty dir");
let seeded_cfg = repo.join(".mnem").join("config.toml");
if seeded_cfg.exists() {
std::fs::remove_file(&seeded_cfg).expect("remove seeded config");
}
let file = repo.join("note.md");
std::fs::write(&file, "# hello world\nthis is a note\n").unwrap();
let out = mnem(
repo,
&["ingest", "--extractor", "keybert", file.to_str().unwrap()],
)
.output()
.expect("spawn");
assert!(!out.status.success(), "must fail without embed provider");
let stderr = String::from_utf8_lossy(&out.stderr);
assert!(
stderr.contains("keybert") && stderr.contains("embed"),
"error must reference keybert and the missing [embed] provider; got: {stderr}"
);
assert!(
!stderr.contains("parsed but not yet wired"),
"FIX-3 must replace the E3-T2 stub; still saw: {stderr}"
);
}