use super::tests::EnvVarGuard;
use super::*;
use tempfile::tempdir;
#[test]
#[serial_test::serial]
fn register_project_index_never_bypasses_sensitive_path_denylist() {
let data_dir = tempdir().unwrap();
let _env = EnvVarGuard::set(
trusty_common::data_dir::DATA_DIR_OVERRIDE_ENV,
data_dir.path(),
);
let _allow_production =
EnvVarGuard::set_str(trusty_common::test_harness::ALLOW_PRODUCTION_ENV, "1");
let socket_dir = tempdir().unwrap();
let socket = socket_dir.path().join("s.sock");
let seen: std::sync::Arc<std::sync::Mutex<Vec<serde_json::Value>>> =
std::sync::Arc::new(std::sync::Mutex::new(Vec::new()));
let log = std::sync::Arc::clone(&seen);
let _daemon = crate::uds_mock::spawn_blocking_at(socket.clone(), move |method, params| {
if method == trusty_common::search_rpc::METHOD_INDEX_CREATE {
log.lock().unwrap_or_else(|e| e.into_inner()).push(params);
}
Box::pin(async move { Ok(serde_json::json!({})) })
});
let _socket_env = EnvVarGuard::set_str(
trusty_common::search_rpc::TRUSTY_SEARCH_SOCKET_ENV,
&socket.to_string_lossy(),
);
let project = tempdir().unwrap();
std::fs::create_dir_all(project.path().join(".git")).unwrap();
let _ = register_project_index(project.path());
let body_json = seen
.lock()
.unwrap_or_else(|e| e.into_inner())
.first()
.cloned()
.expect("the fake daemon must have received the create call");
assert_eq!(
body_json.get("allow_sensitive_path"),
Some(&serde_json::Value::Bool(false)),
"register_project_index must never set allow_sensitive_path: true; got {body_json:?}"
);
}
#[test]
fn worktree_skip_vector_true_for_worktree_root() {
let tmp = tempdir().unwrap();
let wt = tmp.path().join("feat-branch");
std::fs::create_dir_all(&wt).unwrap();
std::fs::write(wt.join(".git"), "gitdir: /elsewhere/.git/worktrees/feat").unwrap();
assert!(
super::search_index::worktree_skip_vector(&wt),
"a worktree keeps its BM25+KG-only registration at launch"
);
}
#[test]
fn worktree_skip_vector_true_from_worktree_subdirectory() {
let tmp = tempdir().unwrap();
let wt = tmp.path().join("feat-branch");
let nested = wt.join("crates").join("inner");
std::fs::create_dir_all(&nested).unwrap();
std::fs::write(wt.join(".git"), "gitdir: /elsewhere/.git/worktrees/feat").unwrap();
assert!(
super::search_index::worktree_skip_vector(&nested),
"the decision must follow the git-root the index is keyed to, not the cwd"
);
}
#[test]
fn worktree_skip_vector_false_for_plain_clone() {
let tmp = tempdir().unwrap();
let clone = tmp.path().join("my-repo");
std::fs::create_dir_all(clone.join(".git")).unwrap();
assert!(
!super::search_index::worktree_skip_vector(&clone),
"a primary clone still embeds — skip_vector is a worktree-only decision"
);
}