use super::*;
use tempfile::tempdir;
fn write_manifest(project: &std::path::Path, body: &str) {
let dir = project.join(".trusty-mpm").join("framework");
std::fs::create_dir_all(&dir).unwrap();
std::fs::write(dir.join("manifest.toml"), body).unwrap();
}
#[test]
fn resolve_conditional_mcp_toggles_defaults_to_both_on() {
let tmp = tempdir().unwrap();
let fw = crate::core::paths::FrameworkPaths::under(tmp.path());
let project = tmp.path().join("proj");
std::fs::create_dir_all(&project).unwrap();
assert_eq!(resolve_conditional_mcp_toggles(&fw, &project), (true, true));
}
#[test]
fn resolve_conditional_mcp_toggles_honors_project_manifest_toggle() {
let tmp = tempdir().unwrap();
let fw = crate::core::paths::FrameworkPaths::under(tmp.path());
let project = tmp.path().join("proj");
std::fs::create_dir_all(&project).unwrap();
write_manifest(&project, "[mcp]\ntrusty_memory = false\n");
assert_eq!(
resolve_conditional_mcp_toggles(&fw, &project),
(false, true)
);
}
#[test]
#[serial_test::serial]
fn session_mcp_env_omits_both_when_both_toggles_are_off() {
let tmp = tempdir().unwrap();
let fw = crate::core::paths::FrameworkPaths::under(tmp.path());
let project = tmp.path().join("proj");
std::fs::create_dir_all(&project).unwrap();
write_manifest(
&project,
"[mcp]\ntrusty_memory = false\ntrusty_search = false\n",
);
let env = session_mcp_env_with(&fw, &project, Some("git@github.com:acme/widget.git"));
assert!(env.is_empty(), "both toggles off exports nothing: {env:?}");
}
#[test]
#[serial_test::serial]
fn session_mcp_env_omits_palace_when_memory_disabled() {
let tmp = tempdir().unwrap();
let fw = crate::core::paths::FrameworkPaths::under(tmp.path());
let project = tmp.path().join("proj");
std::fs::create_dir_all(&project).unwrap();
write_manifest(
&project,
"[mcp]\ntrusty_memory = false\ntrusty_search = false\n",
);
let env = session_mcp_env_with(&fw, &project, Some("git@github.com:acme/widget.git"));
assert!(
!env.iter()
.any(|(name, _)| name == trusty_common::PALACE_OVERRIDE_ENV),
"a disabled trusty-memory toggle must not export a palace pin: {env:?}"
);
}
#[test]
#[serial_test::serial]
fn session_mcp_env_exports_palace_when_memory_enabled() {
unsafe { std::env::remove_var(trusty_common::PALACE_OVERRIDE_ENV) };
let tmp = tempdir().unwrap();
let fw = crate::core::paths::FrameworkPaths::under(tmp.path());
let project = tmp.path().join("proj");
std::fs::create_dir_all(&project).unwrap();
write_manifest(&project, "[mcp]\ntrusty_search = false\n");
let env = session_mcp_env_with(&fw, &project, Some("git@github.com:acme/widget.git"));
let palace = env
.iter()
.find(|(name, _)| name == trusty_common::PALACE_OVERRIDE_ENV)
.map(|(_, value)| value.clone());
assert_eq!(
palace.as_deref(),
Some("acme-widget"),
"the exported palace must be the repo identity, not the workspace basename: {env:?}"
);
}
#[test]
#[serial_test::serial]
fn session_mcp_env_omits_index_when_search_disabled() {
let tmp = tempdir().unwrap();
let fw = crate::core::paths::FrameworkPaths::under(tmp.path());
let project = tmp.path().join("proj");
std::fs::create_dir_all(&project).unwrap();
write_manifest(&project, "[mcp]\ntrusty_search = false\n");
let env = session_mcp_env_with(&fw, &project, None);
assert!(
!env.iter().any(|(name, _)| name == SEARCH_INDEX_ENV),
"a disabled trusty-search toggle must not export an index pin: {env:?}"
);
}