补fnm默认别名符号链接回归测试

- 新增单测 fnm_default_alias_symlink_selects_the_linked_installation,断言 default 别名选中该链接的 v20 而不是最高的 v22
- 核实评审该项前提有误:fnm 1.39 的 aliases/default 是指向安装目录的符号链接,当前实现本就正确
This commit is contained in:
2026-10-07 11:45:02 +08:00
parent d905fa1c02
commit 6f4667d96f
@@ -1294,6 +1294,28 @@ mod tests {
assert_eq!(default.version, (22, 23, 3));
}
#[cfg(unix)]
#[test]
fn fnm_default_alias_symlink_selects_the_linked_installation() {
use std::os::unix::fs::symlink;
let fnm_root = tempfile::tempdir().unwrap();
let older = install_fnm_version(fnm_root.path(), "v20.11.0");
install_fnm_version(fnm_root.path(), "v22.23.3");
let alias_dir = fnm_root.path().join("aliases");
fs::create_dir_all(&alias_dir).unwrap();
// fnm 1.39 的 default 别名是指向安装目录的符号链接,不是版本字符串文件。
symlink(&older, alias_dir.join("default")).unwrap();
let installed = installed_node_versions(&[fnm_root.path().to_path_buf()], &[]);
assert_eq!(installed.len(), 2);
let default =
default_managed_installation(&installed, &[fnm_root.path().to_path_buf()], &[])
.expect("fnm default alias should resolve");
// 必须跟随别名选中 v20,而不是回退到最高的 v22。
assert_eq!(default.prefix, older.canonicalize().unwrap());
assert_eq!(default.version, (20, 11, 0));
}
#[test]
fn version_file_pin_is_authoritative_and_blocks_when_not_installed() {
let fnm_root = tempfile::tempdir().unwrap();