diff --git a/apps/ai-game-creator-shell/src-tauri/src/environment_check.rs b/apps/ai-game-creator-shell/src-tauri/src/environment_check.rs index 72d2284ed..fbe50c395 100644 --- a/apps/ai-game-creator-shell/src-tauri/src/environment_check.rs +++ b/apps/ai-game-creator-shell/src-tauri/src/environment_check.rs @@ -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();