Skip to content

Commit 7c08907

Browse files
committed
chore: test snm pnpm install
1 parent 1523fb1 commit 7c08907

File tree

13 files changed

+108
-28
lines changed

13 files changed

+108
-28
lines changed

.gitignore

+2
Original file line numberDiff line numberDiff line change
@@ -15,3 +15,5 @@ Cargo.lock
1515
.DS_Store
1616
.idea
1717
.idea
18+
19+
node_modules
Original file line numberDiff line numberDiff line change
@@ -0,0 +1 @@
1+
pnpm-lock.yaml
Original file line numberDiff line numberDiff line change
@@ -0,0 +1 @@
1+
18.19.0

crates/cli/tests/snm_install_npm/package-lock.json

+13
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,14 @@
1+
{
2+
"name": "snm_install_postinstall",
3+
"version": "1.0.0",
4+
"description": "",
5+
"main": "index.js",
6+
"packageManager": "[email protected]",
7+
"scripts": {
8+
"test": "echo \"Error: no test specified\" && exit 1"
9+
},
10+
"keywords": [],
11+
"author": "",
12+
"license": "ISC",
13+
"dependencies": {}
14+
}
Original file line numberDiff line numberDiff line change
@@ -0,0 +1 @@
1+
pnpm-lock.yaml
Original file line numberDiff line numberDiff line change
@@ -0,0 +1 @@
1+
18.19.0
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,14 @@
1+
{
2+
"name": "snm_install_postinstall",
3+
"version": "1.0.0",
4+
"description": "",
5+
"main": "index.js",
6+
"packageManager": "[email protected]",
7+
"scripts": {
8+
"test": "echo \"Error: no test specified\" && exit 1"
9+
},
10+
"keywords": [],
11+
"author": "",
12+
"license": "ISC",
13+
"dependencies": {}
14+
}

crates/cli/tests/snm_install_test.rs

+46
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,46 @@
1+
#[cfg(test)]
2+
mod snm_install_test {
3+
mod install_1 {
4+
use std::env::{self, current_dir, set_current_dir};
5+
6+
use clap::Parser;
7+
use cli::{execute_cli, SnmCli};
8+
use std::fs;
9+
10+
#[tokio::test]
11+
async fn test_pnpm_install() {
12+
env::set_var("SNM_NODE_INSTALL_STRATEGY", "auto");
13+
env::set_var("SNM_PACKAGE_MANAGER_INSTALL_STRATEGY", "auto");
14+
let c_dir = current_dir().expect("get current dir error");
15+
let test_dir = c_dir.join("tests").join("snm_install_pnpm");
16+
set_current_dir(&test_dir).expect("set current dir error");
17+
18+
let cli = SnmCli::parse_from(["snm", "install"]);
19+
let lock = &test_dir.join("pnpm-lock.yaml");
20+
let _ = fs::remove_file(lock);
21+
22+
assert!(!lock.exists());
23+
let res = execute_cli::execute_cli(cli).await;
24+
assert!(res.is_ok());
25+
assert!(lock.exists());
26+
}
27+
28+
#[tokio::test]
29+
async fn test_npm_install() {
30+
env::set_var("SNM_NODE_INSTALL_STRATEGY", "auto");
31+
env::set_var("SNM_PACKAGE_MANAGER_INSTALL_STRATEGY", "auto");
32+
let c_dir = current_dir().expect("get current dir error");
33+
let test_dir = c_dir.join("tests").join("snm_install_npm");
34+
set_current_dir(&test_dir).expect("set current dir error");
35+
36+
let cli = SnmCli::parse_from(["snm", "install"]);
37+
let lock = &test_dir.join("package-lock.json");
38+
let _ = fs::remove_file(lock);
39+
40+
assert!(!lock.exists());
41+
let res = execute_cli::execute_cli(cli).await;
42+
assert!(res.is_ok());
43+
assert!(lock.exists());
44+
}
45+
}
46+
}

crates/cli/tests/tests.rs

+2-1
Original file line numberDiff line numberDiff line change
@@ -4,4 +4,5 @@ mod no_package_manager_property_test;
44
#[path = "no_package_json/no_package_json_test.rs"]
55
mod no_package_json_test;
66

7-
mod snm_cli_test;
7+
mod snm_cli_test;
8+
mod snm_install_test;

crates/snm_core/src/model/dispatch_manage.rs

+6-5
Original file line numberDiff line numberDiff line change
@@ -297,13 +297,14 @@ impl DispatchManage {
297297
self.manager
298298
.decompress_download_file(&downloaded_file_path_buf, &runtime_dir_path_buf)?;
299299

300-
fs::remove_file(&downloaded_file_path_buf).expect(
301-
format!(
300+
let remove_result = fs::remove_file(&downloaded_file_path_buf);
301+
302+
if remove_result.is_err() {
303+
print_warning!(
302304
"download remove_file error {:?}",
303305
&downloaded_file_path_buf.display()
304-
)
305-
.as_str(),
306-
);
306+
);
307+
}
307308

308309
Ok(())
309310
}

crates/snm_core/src/utils/tarball.rs

-19
Original file line numberDiff line numberDiff line change
@@ -34,25 +34,6 @@ where
3434
.as_str(),
3535
);
3636

37-
let old_base = get_target_dir(output_path);
38-
39-
let transform = |f: &PathBuf| -> Result<PathBuf, SnmError> {
40-
let new_path = f
41-
.strip_prefix(&old_base)
42-
.expect("decompress_tgz strip_prefix error");
43-
Ok(output_path.join(new_path))
44-
};
45-
46-
rename(&old_base, &transform)?;
47-
48-
std::fs::remove_dir_all(&old_base).expect(
49-
format!(
50-
"decompress_tgz remove_dir_all error {:?}",
51-
&old_base.display()
52-
)
53-
.as_str(),
54-
);
55-
5637
Ok(())
5738
}
5839

crates/snm_npm/src/snm_npm.rs

+7-3
Original file line numberDiff line numberDiff line change
@@ -260,12 +260,16 @@ impl ShimTrait for SnmNpm {
260260
bin_name: &str,
261261
version: &str,
262262
) -> Result<PathBuf, SnmError> {
263-
let package_json_buf_path = self
263+
let mut package_json_buf_path = self
264264
.snm_config
265265
.get_node_modules_dir_path_buf()
266266
.join(self.prefix.to_string())
267-
.join(&version)
268-
.join("package.json");
267+
.join(&version);
268+
269+
if !(&package_json_buf_path.join("package.json").exists()) {
270+
package_json_buf_path = package_json_buf_path.join("package")
271+
}
272+
package_json_buf_path = package_json_buf_path.join("package.json");
269273

270274
let mut hashmap = PackageJson::from_file_path(&package_json_buf_path)?.bin_to_hashmap()?;
271275

0 commit comments

Comments
 (0)