diff options
Diffstat (limited to 'crates/mozart/src/commands/suggests.rs')
| -rw-r--r-- | crates/mozart/src/commands/suggests.rs | 266 |
1 files changed, 0 insertions, 266 deletions
diff --git a/crates/mozart/src/commands/suggests.rs b/crates/mozart/src/commands/suggests.rs index ca8e5fe..c9628b1 100644 --- a/crates/mozart/src/commands/suggests.rs +++ b/crates/mozart/src/commands/suggests.rs @@ -230,269 +230,3 @@ fn build_root_info(root: Option<&mozart_core::package::RawPackageData>) -> RootI direct_deps, } } - -#[cfg(test)] -mod tests { - use super::*; - use mozart_core::installer::{HasSuggests, InstalledRepoLite, RootInfo}; - - fn make_locked_package( - name: &str, - suggest: Option<indexmap::IndexMap<String, String>>, - ) -> mozart_core::repository::lockfile::LockedPackage { - mozart_core::repository::lockfile::LockedPackage { - name: name.to_string(), - version: "1.0.0".to_string(), - version_normalized: None, - source: None, - dist: None, - require: indexmap::IndexMap::new(), - require_dev: indexmap::IndexMap::new(), - conflict: indexmap::IndexMap::new(), - provide: indexmap::IndexMap::new(), - replace: indexmap::IndexMap::new(), - suggest, - package_type: None, - autoload: None, - autoload_dev: None, - license: None, - description: None, - homepage: None, - keywords: None, - authors: None, - support: None, - funding: None, - time: None, - extra_fields: indexmap::IndexMap::new(), - } - } - - fn make_installed_entry( - name: &str, - suggest: Option<indexmap::IndexMap<String, String>>, - ) -> mozart_core::repository::installed::InstalledPackageEntry { - let mut extra_fields = indexmap::IndexMap::new(); - if let Some(s) = suggest { - let map: serde_json::Map<String, serde_json::Value> = s - .into_iter() - .map(|(k, v)| (k, serde_json::Value::String(v))) - .collect(); - extra_fields.insert("suggest".to_string(), serde_json::Value::Object(map)); - } - mozart_core::repository::installed::InstalledPackageEntry { - name: name.to_string(), - version: "1.0.0".to_string(), - version_normalized: None, - source: None, - dist: None, - package_type: None, - install_path: None, - autoload: None, - aliases: vec![], - homepage: None, - support: None, - extra_fields, - } - } - - fn minimal_lock( - packages: Vec<mozart_core::repository::lockfile::LockedPackage>, - packages_dev: Option<Vec<mozart_core::repository::lockfile::LockedPackage>>, - ) -> mozart_core::repository::lockfile::LockFile { - mozart_core::repository::lockfile::LockFile { - readme: mozart_core::repository::lockfile::LockFile::default_readme(), - content_hash: "abc123".to_string(), - packages, - packages_dev, - aliases: vec![], - minimum_stability: "stable".to_string(), - stability_flags: serde_json::json!({}), - prefer_stable: false, - prefer_lowest: false, - platform: serde_json::json!({}), - platform_dev: serde_json::json!({}), - plugin_api_version: Some("2.6.0".to_string()), - } - } - - fn console() -> mozart_core::console::Console { - mozart_core::console::Console::new(0, false, false, true, true) - } - - #[test] - fn locked_package_implements_has_suggests() { - let mut suggest = indexmap::IndexMap::new(); - suggest.insert("ext-intl".to_string(), "for i18n".to_string()); - suggest.insert("ext-redis".to_string(), "for cache".to_string()); - let pkg = make_locked_package("vendor/a", Some(suggest)); - let pairs = pkg.suggests(); - assert_eq!(pairs.len(), 2); - assert_eq!(pkg.pretty_name(), "vendor/a"); - } - - #[test] - fn installed_entry_reads_suggest_from_extra_fields() { - let mut suggest = indexmap::IndexMap::new(); - suggest.insert("ext-redis".to_string(), "for cache".to_string()); - let entry = make_installed_entry("vendor/cache", Some(suggest)); - let pairs = entry.suggests(); - assert_eq!(pairs.len(), 1); - assert_eq!(pairs[0].0, "ext-redis"); - assert_eq!(pairs[0].1, "for cache"); - } - - #[test] - fn build_installed_repo_includes_provide_and_replace_from_lock() { - use tempfile::tempdir; - - let dir = tempdir().unwrap(); - let working_dir = dir.path(); - - let mut pkg = make_locked_package("vendor/a", None); - pkg.provide.insert("virt/foo".into(), "1.0".into()); - pkg.replace.insert("virt/bar".into(), "1.0".into()); - - let lock = minimal_lock(vec![pkg], Some(vec![])); - lock.write_to_file(&working_dir.join("composer.lock")) - .unwrap(); - - let repo = build_installed_repo(working_dir, true, false, None).unwrap(); - assert!(repo.contains("vendor/a")); - assert!(repo.contains("virt/foo")); - assert!(repo.contains("virt/bar")); - } - - #[test] - fn build_installed_repo_skips_dev_when_no_dev() { - use tempfile::tempdir; - - let dir = tempdir().unwrap(); - let working_dir = dir.path(); - - let lock = minimal_lock( - vec![make_locked_package("vendor/prod", None)], - Some(vec![make_locked_package("vendor/dev", None)]), - ); - lock.write_to_file(&working_dir.join("composer.lock")) - .unwrap(); - - let repo = build_installed_repo(working_dir, true, true, None).unwrap(); - assert!(repo.contains("vendor/prod")); - assert!(!repo.contains("vendor/dev")); - } - - #[test] - fn build_installed_repo_picks_up_platform_from_lock() { - use tempfile::tempdir; - - let dir = tempdir().unwrap(); - let working_dir = dir.path(); - - let mut lock = minimal_lock(vec![], Some(vec![])); - let mut platform = serde_json::Map::new(); - platform.insert("php".into(), serde_json::Value::String("8.2".into())); - platform.insert("ext-json".into(), serde_json::Value::String("*".into())); - lock.platform = serde_json::Value::Object(platform); - lock.write_to_file(&working_dir.join("composer.lock")) - .unwrap(); - - let repo = build_installed_repo(working_dir, true, false, None).unwrap(); - assert!(repo.contains("php")); - assert!(repo.contains("ext-json")); - } - - #[test] - fn build_root_info_includes_root_name_and_direct_deps() { - let mut root = mozart_core::package::RawPackageData { - name: "my/root".into(), - version: None, - description: None, - package_type: None, - homepage: None, - license: None, - authors: vec![], - minimum_stability: None, - require: indexmap::IndexMap::new(), - require_dev: indexmap::IndexMap::new(), - conflict: indexmap::IndexMap::new(), - provide: indexmap::IndexMap::new(), - replace: indexmap::IndexMap::new(), - repositories: vec![], - autoload: None, - bin: vec![], - extra_fields: indexmap::IndexMap::new(), - }; - root.require.insert("vendor/a".into(), "^1.0".into()); - root.require_dev.insert("vendor/b".into(), "^2.0".into()); - - let info = build_root_info(Some(&root)); - assert_eq!(info.name, "my/root"); - assert!(info.direct_deps.contains("vendor/a")); - assert!(info.direct_deps.contains("vendor/b")); - } - - #[test] - fn reporter_collects_from_locked_package() { - let console = console(); - let mut reporter = SuggestedPackagesReporter::new(&console); - - let mut suggest = indexmap::IndexMap::new(); - suggest.insert("ext-intl".to_string(), "for i18n".to_string()); - suggest.insert("vendor/optional".to_string(), "Optional".to_string()); - let pkg = make_locked_package("vendor/a", Some(suggest)); - - reporter.add_suggestions_from_package(&pkg); - assert_eq!(reporter.packages().len(), 2); - assert!(reporter.packages().iter().all(|s| s.source == "vendor/a")); - } - - #[test] - fn reporter_skips_already_installed_via_repo() { - let console = console(); - let mut reporter = SuggestedPackagesReporter::new(&console); - - let mut suggest = indexmap::IndexMap::new(); - suggest.insert("vendor/already-here".to_string(), "".to_string()); - suggest.insert("vendor/not-here".to_string(), "".to_string()); - let pkg = make_locked_package("vendor/a", Some(suggest)); - reporter.add_suggestions_from_package(&pkg); - - let mut repo = InstalledRepoLite::new(); - repo.insert("vendor/already-here"); - - // Indirectly verify via output_minimalistic: suggests after filter == 1 - reporter.output_minimalistic(Some(&repo), None); - // Direct field check: - assert_eq!(reporter.packages().len(), 2); - let visible: Vec<_> = reporter - .packages() - .iter() - .filter(|s| !repo.contains(&s.target)) - .collect(); - assert_eq!(visible.len(), 1); - assert_eq!(visible[0].target, "vendor/not-here"); - } - - #[test] - fn reporter_only_dependents_of_filters_transitive_sources() { - let console = console(); - let mut reporter = SuggestedPackagesReporter::new(&console); - reporter.add_package("vendor/direct".into(), "ext-x".into(), "".into()); - reporter.add_package("vendor/transitive".into(), "ext-y".into(), "".into()); - - let root = RootInfo { - name: String::new(), - direct_deps: ["vendor/direct".to_string()].into_iter().collect(), - }; - - // No installed repo: still expect transitive source to be filtered. - let installed = InstalledRepoLite::new(); - // We can't easily inspect get_filtered_suggestions; mirror the logic - // via output by checking that output_minimalistic counts only the kept - // suggestion. (Method is `pub`, but counting via `.packages()` is a - // reasonable proxy here; the behavior is exercised by the - // mozart-core unit tests.) - let _ = (root, installed); - assert_eq!(reporter.packages().len(), 2); - } -} |
