use super::*;
#[test]
fn sync_versions_bumps_ruby_native_package_version_field() {
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"),
"[workspace.package]\nversion = \"1.3.1\"\n\n[workspace]\nresolver = \"2\"\nmembers = []\n",
)
.expect("write Cargo.toml");
let native_dir = root.join("packages/ruby/ext/demolib_rb/native");
std::fs::create_dir_all(&native_dir).expect("mkdir ruby native");
std::fs::write(
native_dir.join("Cargo.toml"),
concat!(
"# Code generated by alef — DO NOT EDIT.\n",
"# alef:hash:deadbeef\n",
"[package]\n",
"name = \"demolib-rb\"\n",
"version = \"1.3.0\"\n",
"edition = \"2024\"\n",
"\n",
"[dependencies]\n",
"magnus = \"0.7\"\n",
"serde = \"1.3.0\"\n",
"demolib = { version = \"1.3.0\", path = \"../../../../../crates/demolib\", features = [\"full\"] }\n",
),
)
.expect("write ruby native Cargo.toml");
let alef_toml = format!(
"[workspace]\nlanguages = [\"ruby\"]\n[[crates]]\nname = \"demolib\"\nsources = []\nversion_from = \"{}\"\n",
root.join("Cargo.toml").display().to_string().replace('\\', "/")
);
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, None, true, true, None);
let _ = std::env::set_current_dir(&original_cwd);
sync_result.expect("sync_versions ok");
let out = std::fs::read_to_string(native_dir.join("Cargo.toml")).expect("read ruby native Cargo.toml");
assert!(
out.contains("name = \"demolib-rb\"\nversion = \"1.3.1\""),
"ruby native crate's own [package] version must be bumped to 1.3.1, got:\n{out}"
);
assert!(
!out.contains("name = \"demolib-rb\"\nversion = \"1.3.0\""),
"stale [package] version 1.3.0 must be gone, got:\n{out}"
);
assert!(
out.contains(r#"demolib = { version = "1.3.1""#),
"core dep pin must still be bumped to 1.3.1, got:\n{out}"
);
assert!(
out.contains(r#"magnus = "0.7""#),
"external magnus dep must not be touched, got:\n{out}"
);
assert!(
out.contains("serde = \"1.3.0\""),
"external serde dep pin coincidentally matching the old project version must be left \
byte-identical, got:\n{out}"
);
}