aboutsummaryrefslogtreecommitdiffhomepage
path: root/crates/mozart/src/commands/licenses.rs
diff options
context:
space:
mode:
Diffstat (limited to 'crates/mozart/src/commands/licenses.rs')
-rw-r--r--crates/mozart/src/commands/licenses.rs293
1 files changed, 0 insertions, 293 deletions
diff --git a/crates/mozart/src/commands/licenses.rs b/crates/mozart/src/commands/licenses.rs
index 0e4ea0b..93c0e63 100644
--- a/crates/mozart/src/commands/licenses.rs
+++ b/crates/mozart/src/commands/licenses.rs
@@ -448,296 +448,3 @@ fn tally_licenses(entries: &[LicenseEntry]) -> Vec<(String, usize)> {
result.sort_by_key(|(_, count)| std::cmp::Reverse(*count));
result
}
-
-#[cfg(test)]
-mod tests {
- use super::*;
-
- fn entry(name: &str, licenses: &[&str]) -> LicenseEntry {
- LicenseEntry {
- pretty_name: name.to_string(),
- name: name.to_lowercase(),
- version: "1.0.0".to_string(),
- licenses: licenses.iter().map(|s| s.to_string()).collect(),
- requires: indexmap::IndexMap::new(),
- support_source: None,
- source_url: None,
- homepage: None,
- }
- }
-
- #[test]
- fn tally_licenses_orders_by_count_then_first_seen() {
- // First MIT entry comes before Apache-2.0; tie-break must keep
- // MIT first when their counts collide.
- let entries = vec![
- entry("a/a", &["MIT"]),
- entry("b/b", &["Apache-2.0"]),
- entry("c/c", &["BSD-3-Clause"]),
- ];
- let counts = tally_licenses(&entries);
- // All three at count 1 — input order preserved.
- assert_eq!(
- counts,
- vec![
- ("MIT".to_string(), 1),
- ("Apache-2.0".to_string(), 1),
- ("BSD-3-Clause".to_string(), 1),
- ]
- );
- }
-
- #[test]
- fn tally_licenses_count_descending() {
- let entries = vec![
- entry("a/a", &["Apache-2.0"]),
- entry("b/b", &["MIT"]),
- entry("c/c", &["MIT"]),
- ];
- let counts = tally_licenses(&entries);
- assert_eq!(counts[0], ("MIT".to_string(), 2));
- assert_eq!(counts[1], ("Apache-2.0".to_string(), 1));
- }
-
- #[test]
- fn tally_licenses_empty() {
- assert!(tally_licenses(&[]).is_empty());
- }
-
- #[test]
- fn tally_licenses_no_license_counts_as_none() {
- let entries = vec![entry("a/a", &[])];
- let counts = tally_licenses(&entries);
- assert_eq!(counts, vec![("none".to_string(), 1)]);
- }
-
- #[test]
- fn read_root_licenses_string_form() {
- let dir = tempfile::tempdir().unwrap();
- let path = dir.path().join("composer.json");
- std::fs::write(&path, r#"{"name": "test/p", "license": "MIT"}"#).unwrap();
- assert_eq!(read_root_licenses(&path).unwrap(), vec!["MIT"]);
- }
-
- #[test]
- fn read_root_licenses_array_form() {
- let dir = tempfile::tempdir().unwrap();
- let path = dir.path().join("composer.json");
- std::fs::write(
- &path,
- r#"{"name": "test/p", "license": ["MIT", "Apache-2.0"]}"#,
- )
- .unwrap();
- assert_eq!(
- read_root_licenses(&path).unwrap(),
- vec!["MIT", "Apache-2.0"]
- );
- }
-
- #[test]
- fn read_root_licenses_absent() {
- let dir = tempfile::tempdir().unwrap();
- let path = dir.path().join("composer.json");
- std::fs::write(&path, r#"{"name": "test/p"}"#).unwrap();
- assert!(read_root_licenses(&path).unwrap().is_empty());
- }
-
- #[test]
- fn installed_to_entry_extracts_require_and_license() {
- use mozart_core::repository::installed::InstalledPackageEntry;
- let mut extra = indexmap::IndexMap::new();
- extra.insert("license".to_string(), serde_json::json!(["MIT"]));
- extra.insert(
- "require".to_string(),
- serde_json::json!({"psr/log": "^1.0"}),
- );
- let pkg = InstalledPackageEntry {
- name: "monolog/monolog".to_string(),
- version: "3.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: extra,
- };
- let e = installed_to_entry(&pkg);
- assert_eq!(e.licenses, vec!["MIT"]);
- assert_eq!(e.requires.get("psr/log").map(String::as_str), Some("^1.0"));
- }
-
- #[test]
- fn installed_to_entry_pulls_support_source_and_source_url() {
- use mozart_core::repository::installed::InstalledPackageEntry;
- let pkg = InstalledPackageEntry {
- name: "vendor/pkg".to_string(),
- version: "1.0.0".to_string(),
- version_normalized: None,
- source: Some(serde_json::json!({"type": "git", "url": "https://example.com/repo.git"})),
- dist: None,
- package_type: None,
- install_path: None,
- autoload: None,
- aliases: vec![],
- homepage: Some("https://example.com/".to_string()),
- support: Some(serde_json::json!({"source": "https://github.com/v/p"})),
- extra_fields: indexmap::IndexMap::new(),
- };
- let e = installed_to_entry(&pkg);
- assert_eq!(e.support_source.as_deref(), Some("https://github.com/v/p"));
- assert_eq!(
- e.source_url.as_deref(),
- Some("https://example.com/repo.git")
- );
- assert_eq!(e.homepage.as_deref(), Some("https://example.com/"));
- // PackageInfo helpers should pick support source first.
- assert_eq!(
- package_info::view_source_or_homepage_url(&e).as_deref(),
- Some("https://github.com/v/p"),
- );
- }
-
- #[test]
- fn no_dev_filters_to_root_require_closure() {
- // Set up: root requires a/a only. b/b is in installed but not
- // reachable; should be dropped under --no-dev.
- let dir = tempfile::tempdir().unwrap();
- let working_dir = dir.path();
- let vendor_dir = working_dir.join("vendor");
-
- std::fs::write(
- working_dir.join("composer.json"),
- r#"{"name": "test/project", "require": {"a/a": "*"}}"#,
- )
- .unwrap();
-
- let mut installed = mozart_core::repository::installed::InstalledPackages::new();
- installed.upsert(mozart_core::repository::installed::InstalledPackageEntry {
- name: "a/a".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: indexmap::IndexMap::new(),
- });
- installed.upsert(mozart_core::repository::installed::InstalledPackageEntry {
- name: "b/b".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: indexmap::IndexMap::new(),
- });
- installed.write(&vendor_dir).unwrap();
-
- let mut root_req = indexmap::IndexMap::new();
- root_req.insert("a/a".to_string(), "*".to_string());
-
- let kept = load_installed_entries(working_dir, &root_req, true).unwrap();
- let names: Vec<&str> = kept.iter().map(|e| e.name.as_str()).collect();
- assert_eq!(names, vec!["a/a"]);
-
- // Without --no-dev: both packages are listed.
- let all = load_installed_entries(working_dir, &root_req, false).unwrap();
- assert_eq!(all.len(), 2);
- }
-
- #[test]
- fn locked_no_dev_drops_packages_dev() {
- use mozart_core::repository::lockfile::{LockFile, LockedPackage};
- let dir = tempfile::tempdir().unwrap();
- let working_dir = dir.path();
- std::fs::write(
- working_dir.join("composer.json"),
- r#"{"name": "test/project"}"#,
- )
- .unwrap();
- let lock = LockFile {
- readme: LockFile::default_readme(),
- content_hash: "abc".to_string(),
- packages: vec![LockedPackage {
- name: "psr/log".to_string(),
- version: "3.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: None,
- package_type: None,
- autoload: None,
- autoload_dev: None,
- license: Some(vec!["MIT".to_string()]),
- description: None,
- homepage: None,
- keywords: None,
- authors: None,
- support: None,
- funding: None,
- time: None,
- extra_fields: indexmap::IndexMap::new(),
- }],
- packages_dev: Some(vec![LockedPackage {
- name: "phpunit/phpunit".to_string(),
- version: "10.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: None,
- package_type: None,
- autoload: None,
- autoload_dev: None,
- license: Some(vec!["BSD-3-Clause".to_string()]),
- description: None,
- homepage: None,
- keywords: None,
- authors: None,
- support: None,
- funding: None,
- time: None,
- extra_fields: indexmap::IndexMap::new(),
- }]),
- 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()),
- };
- lock.write_to_file(&working_dir.join("composer.lock"))
- .unwrap();
-
- let prod = load_locked_entries(working_dir, true).unwrap();
- assert_eq!(prod.len(), 1);
- assert_eq!(prod[0].name, "psr/log");
-
- let all = load_locked_entries(working_dir, false).unwrap();
- assert_eq!(all.len(), 2);
- }
-}