Skip to content

Commit a06476f

Browse files
committed
test: add some tests to tarball crate
1 parent 6671332 commit a06476f

File tree

3 files changed

+76
-0
lines changed

3 files changed

+76
-0
lines changed

Cargo.lock

+1
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

crates/tarball/Cargo.toml

+1
Original file line numberDiff line numberDiff line change
@@ -16,4 +16,5 @@ futures-util = { workspace = true }
1616
reqwest = { workspace = true }
1717
tar = { workspace = true }
1818
thiserror = { workspace = true }
19+
tokio = { workspace = true }
1920
uuid = { workspace = true }

crates/tarball/src/lib.rs

+74
Original file line numberDiff line numberDiff line change
@@ -132,3 +132,77 @@ pub async fn download_indirect_dependency(
132132

133133
Ok(())
134134
}
135+
136+
#[cfg(test)]
137+
mod tests {
138+
use std::path::PathBuf;
139+
140+
use super::*;
141+
142+
fn create_folders() -> PathBuf {
143+
let id = Uuid::new_v4();
144+
let parent_folder = env::temp_dir().join(id.to_string());
145+
fs::create_dir_all(parent_folder.join("store")).expect("failed to create folder");
146+
fs::create_dir_all(parent_folder.join("node_modules")).expect("failed to create folder");
147+
parent_folder
148+
}
149+
150+
#[tokio::test]
151+
async fn ensure_organization_packages_work_as_indirect_dependency() {
152+
let parent_folder = create_folders();
153+
let store_path = parent_folder.join("store");
154+
let node_modules_path = parent_folder.join("node_modules");
155+
let symlink_path = node_modules_path.join("@fastify/error");
156+
157+
download_indirect_dependency(
158+
"@fastify/error",
159+
"3.3.0",
160+
"https://registry.npmjs.org/@fastify/error/-/error-3.3.0.tgz",
161+
&store_path.to_path_buf(),
162+
&symlink_path.to_path_buf(),
163+
)
164+
.await
165+
.unwrap();
166+
167+
// Validate if we delete the tar.gz file
168+
assert!(!store_path.join(format!("@fastify+error@3.3.0.tar.gz")).exists());
169+
// Make sure we create store path with normalized name
170+
assert!(store_path.join("@fastify+error@3.3.0").is_dir());
171+
// Make sure we create a symlink on node_modules folder
172+
assert!(symlink_path.exists());
173+
assert!(symlink_path.is_symlink());
174+
//Make sure we create a @fastify folder inside node_modules
175+
assert!(node_modules_path.join("@fastify").is_dir());
176+
177+
fs::remove_dir_all(&parent_folder).unwrap();
178+
}
179+
180+
#[tokio::test]
181+
async fn do_not_download_existing_indirect_dependency() {
182+
let parent_folder = create_folders();
183+
let store_path = parent_folder.join("store");
184+
let node_modules_path = parent_folder.join("node_modules");
185+
let symlink_path = node_modules_path.join("@fastify/error");
186+
187+
// Create a folder to check if we don't download
188+
fs::create_dir_all(store_path.join("@fastify+error@3.3.0")).unwrap();
189+
190+
// Deliberately put an invalid URL which fails when trying to download.
191+
download_indirect_dependency(
192+
"@fastify/error",
193+
"3.3.0",
194+
"https://!!!",
195+
&store_path.to_path_buf(),
196+
&symlink_path.to_path_buf(),
197+
)
198+
.await
199+
.unwrap();
200+
201+
// Make sure we create a symlink on node_modules folder
202+
assert!(symlink_path.is_symlink());
203+
//Make sure we create a @fastify folder inside node_modules
204+
assert!(node_modules_path.join("@fastify").is_dir());
205+
206+
fs::remove_dir_all(&parent_folder).unwrap();
207+
}
208+
}

0 commit comments

Comments
 (0)