use super::*;
fn run_registry_dep_pin_case(package_name: &str, expect_package_rename: bool) {
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"),
format!("[package]\nname = \"{package_name}\"\nversion = \"1.3.1\"\nedition = \"2024\"\n"),
)
.expect("write Cargo.toml");
let dep_name = package_name.replace('-', "_");
let dep_line = if expect_package_rename {
format!("{dep_name} = {{ package = \"{package_name}\", version = \"1.3.1\" }}")
} else {
format!("{dep_name} = {{ version = \"1.3.1\" }}")
};
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"),
format!(
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 = \"{package_name}-e2e-rust\"\n",
"version = \"1.3.1\"\n",
"edition = \"2024\"\n",
"license = \"MIT\"\n",
"publish = false\n",
"\n",
"[dependencies]\n",
"{dep_line}\n",
),
package_name = package_name,
dep_line = dep_line,
),
)
.expect("write test_apps/rust/Cargo.toml");
let alef_toml = format!(
concat!(
"[workspace]\n",
"languages = [\"rust\"]\n\n",
"[[crates]]\n",
"name = \"{package_name}\"\n",
"sources = []\n",
"version_from = \"Cargo.toml\"\n\n",
"[crates.e2e]\n",
"languages = []\n\n",
"[crates.e2e.call]\n",
"module = \"{package_name}\"\n",
"function = \"hello\"\n",
),
package_name = package_name,
);
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 out = std::fs::read_to_string(test_apps_rust_dir.join("Cargo.toml")).expect("read test_apps/rust/Cargo.toml");
assert!(
out.contains("version = \"1.3.2\""),
"test_apps/rust/Cargo.toml [package] version must be bumped to 1.3.2, got:\n{out}"
);
assert!(
!out.contains("1.3.1"),
"stale version 1.3.1 must be gone from test_apps/rust/Cargo.toml (checked both [package] \
and the {dep_name} dependency pin), got:\n{out}"
);
}
#[test]
fn sync_versions_bumps_registry_dep_pin_with_package_rename() {
run_registry_dep_pin_case("sample-widget-lib", true);
}
#[test]
fn sync_versions_bumps_registry_dep_pin_without_package_rename() {
run_registry_dep_pin_case("samplewidget", false);
}