use super::*;
#[test]
fn sync_versions_stamps_rewritten_files_fresh_against_post_bump_alef_toml() {
use crate::core::config::NewAlefConfig;
let _guard = CWD_LOCK.lock().unwrap_or_else(|e| e.into_inner());
let original_cwd = std::env::current_dir().expect("cwd");
let tmp = tempfile::tempdir().expect("tempdir");
let root = tmp.path();
std::fs::write(
root.join("Cargo.toml"),
"[package]\nname = \"mylib\"\nversion = \"1.3.1\"\nedition = \"2024\"\n",
)
.expect("write Cargo.toml");
let test_apps_rust_dir = root.join("test_apps/rust");
std::fs::create_dir_all(&test_apps_rust_dir).expect("mkdir test_apps/rust");
std::fs::write(
test_apps_rust_dir.join("Cargo.toml"),
concat!(
"# This file is auto-generated by alef — DO NOT EDIT.\n",
"# alef:hash:deadbeef\n",
"# To regenerate: alef generate\n",
"# To verify freshness: alef verify\n",
"\n",
"[workspace]\n",
"\n",
"[package]\n",
"name = \"mylib-e2e-rust\"\n",
"version = \"1.3.1\"\n",
"edition = \"2024\"\n",
"license = \"MIT\"\n",
"publish = false\n",
"\n",
"[dependencies]\n",
"mylib = { version = \"1.3.1\" }\n",
),
)
.expect("write test_apps/rust/Cargo.toml");
let alef_toml = concat!(
"[workspace]\n",
"languages = [\"rust\"]\n\n",
"[[crates]]\n",
"name = \"mylib\"\n",
"sources = []\n",
"version_from = \"Cargo.toml\"\n\n",
"[crates.e2e]\n",
"languages = []\n\n",
"[crates.e2e.call]\n",
"module = \"mylib\"\n",
"function = \"hello\"\n\n",
"[crates.e2e.registry.packages.python]\n",
"name = \"mylib\"\n",
"version = \"0.0.0\"\n",
);
let alef_toml_path = root.join("alef.toml");
std::fs::write(&alef_toml_path, alef_toml).expect("write alef.toml");
let cfg: NewAlefConfig = toml::from_str(alef_toml).expect("parse alef.toml");
let mut resolved = cfg.resolve().expect("resolve config");
let resolved_cfg = resolved.remove(0);
std::env::set_current_dir(root).expect("set_current_dir");
let sync_result = sync_versions(&resolved_cfg, &alef_toml_path, Some("patch"), true, true, None);
let _ = std::env::set_current_dir(&original_cwd);
sync_result.expect("sync_versions ok");
let rewritten = std::fs::read_to_string(test_apps_rust_dir.join("Cargo.toml"))
.expect("read test_apps/rust/Cargo.toml after sync_versions");
let embedded_hash = crate::core::hash::extract_hash(&rewritten)
.expect("test_apps/rust/Cargo.toml must carry an alef:hash: line after sync_versions");
let stripped = crate::core::hash::strip_hash_line(&rewritten);
let expected_hash = crate::core::hash::compute_file_hash(&stripped);
assert_eq!(
embedded_hash, expected_hash,
"test_apps/rust/Cargo.toml's embedded alef:hash: must cover the file's own final, \
post-registry-bump bytes — it was rewritten by this very sync_versions run and must \
not be stamped against stale (pre-bump) content. embedded={embedded_hash} \
expected={expected_hash}\n\nfile content:\n{rewritten}"
);
}