Skip to content

Commit 5ecddc2

Browse files
committed
add tests
1 parent 1f37525 commit 5ecddc2

File tree

3 files changed

+64
-3
lines changed

3 files changed

+64
-3
lines changed

compiler-cli/src/dependencies/dependency_manager.rs

Lines changed: 18 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -23,6 +23,22 @@ use super::{
2323
remove_extra_packages, unlock_packages,
2424
};
2525

26+
/// Verifies that all specified packages exist in the manifest.
27+
pub fn ensure_packages_exist_locally(manifest: &Manifest, packages: &[EcoString]) -> Result<()> {
28+
let missing_packages: Vec<EcoString> = packages
29+
.iter()
30+
.filter(|package_name| !manifest.packages.iter().any(|p| &p.name == *package_name))
31+
.cloned()
32+
.collect();
33+
34+
if !missing_packages.is_empty() {
35+
return Err(Error::PackagesToUpdateNotExist {
36+
packages: missing_packages,
37+
});
38+
}
39+
Ok(())
40+
}
41+
2642
pub struct DependencyManagerConfig {
2743
// If `Yes` we read the manifest from disc. If not set then we ignore any
2844
// manifest which will result in the latest versions of the dependency
@@ -81,12 +97,12 @@ where
8197
if !paths.manifest().exists() {
8298
tracing::debug!("manifest_not_present");
8399
let manifest = self.perform_version_resolution(paths, config, None, Vec::new())?;
84-
self.ensure_packages_exist_locally(&manifest, packages_to_update.clone())?;
100+
ensure_packages_exist_locally(&manifest, &packages_to_update)?;
85101
return Ok(Resolved::all_added(manifest));
86102
}
87103

88104
let existing_manifest = read_manifest_from_disc(paths)?;
89-
self.ensure_packages_exist_locally(&existing_manifest, packages_to_update.clone())?;
105+
ensure_packages_exist_locally(&existing_manifest, &packages_to_update)?;
90106

91107
// If we have been asked not to use the manifest then
92108
let (requirements_changed, manifest_for_resolver) = match self.use_manifest {

compiler-cli/src/dependencies/tests.rs

Lines changed: 45 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1374,3 +1374,48 @@ fn test_pretty_print_version_updates() {
13741374

13751375
insta::assert_snapshot!(output);
13761376
}
1377+
1378+
#[test]
1379+
fn test_ensure_packages_exist_locally_all_present() {
1380+
let manifest = Manifest {
1381+
requirements: HashMap::new(),
1382+
packages: vec![
1383+
manifest_package("package_a", "1.0.0", vec![]),
1384+
manifest_package("package_b", "2.0.0", vec![]),
1385+
manifest_package("package_c", "3.0.0", vec![]),
1386+
],
1387+
};
1388+
1389+
let packages_to_check = vec!["package_a".into(), "package_b".into()];
1390+
let result = dependency_manager::ensure_packages_exist_locally(&manifest, &packages_to_check);
1391+
1392+
assert!(result.is_ok(), "All packages exist, should return Ok");
1393+
}
1394+
1395+
#[test]
1396+
fn test_ensure_packages_exist_locally_some_missing() {
1397+
let manifest = Manifest {
1398+
requirements: HashMap::new(),
1399+
packages: vec![
1400+
manifest_package("package_a", "1.0.0", vec![]),
1401+
manifest_package("package_b", "2.0.0", vec![]),
1402+
],
1403+
};
1404+
1405+
let packages_to_check = vec![
1406+
"package_a".into(),
1407+
"package_b".into(),
1408+
"missing_package".into(),
1409+
"another_missing".into(),
1410+
];
1411+
let result = dependency_manager::ensure_packages_exist_locally(&manifest, &packages_to_check);
1412+
1413+
match result {
1414+
Err(Error::PackagesToUpdateNotExist { packages }) => {
1415+
assert_eq!(packages.len(), 2);
1416+
assert!(packages.contains(&"missing_package".into()));
1417+
assert!(packages.contains(&"another_missing".into()));
1418+
}
1419+
_ => panic!("Expected PackagesToUpdateNotExist error"),
1420+
}
1421+
}

compiler-core/src/error.rs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -206,7 +206,7 @@ file_names.iter().map(|x| x.as_str()).join(", "))]
206206
RemovedPackagesNotExist { packages: Vec<String> },
207207

208208
#[error("Packages to update not exist: {}", packages.iter().join(", "))]
209-
PackagesToUpdateNotExist { packages: Vec<String> },
209+
PackagesToUpdateNotExist { packages: Vec<EcoString> },
210210

211211
#[error("unable to find project root")]
212212
UnableToFindProjectRoot { path: String },

0 commit comments

Comments
 (0)