diff options
| author | nsfisis <nsfisis@gmail.com> | 2026-05-11 02:36:42 +0900 |
|---|---|---|
| committer | nsfisis <nsfisis@gmail.com> | 2026-05-11 02:36:42 +0900 |
| commit | 4e99773a3d203e73b8bf6464490d05649a269fa7 (patch) | |
| tree | 7a6f1a7f773a14ea72dc2f9ff4124badd345833d /crates/mozart/src/commands/require.rs | |
| parent | 4df5f8491320e5795718cf0222e80fa27e57c8ad (diff) | |
| download | php-mozart-4e99773a3d203e73b8bf6464490d05649a269fa7.tar.gz php-mozart-4e99773a3d203e73b8bf6464490d05649a269fa7.tar.zst php-mozart-4e99773a3d203e73b8bf6464490d05649a269fa7.zip | |
test(commands): remove per-command tests
Diffstat (limited to 'crates/mozart/src/commands/require.rs')
| -rw-r--r-- | crates/mozart/src/commands/require.rs | 327 |
1 files changed, 0 insertions, 327 deletions
diff --git a/crates/mozart/src/commands/require.rs b/crates/mozart/src/commands/require.rs index f92442c..62c6a28 100644 --- a/crates/mozart/src/commands/require.rs +++ b/crates/mozart/src/commands/require.rs @@ -1123,330 +1123,3 @@ pub async fn execute( Ok(()) } - -#[cfg(test)] -mod tests { - use super::*; - - fn make_locked_package(name: &str, version: &str) -> lockfile::LockedPackage { - lockfile::LockedPackage { - name: name.to_string(), - version: version.to_string(), - version_normalized: Some(format!("{}.0", version)), - 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: Some("library".to_string()), - 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 minimal_lock(packages: Vec<lockfile::LockedPackage>) -> lockfile::LockFile { - lockfile::LockFile { - readme: lockfile::LockFile::default_readme(), - content_hash: "abc123".to_string(), - packages, - packages_dev: Some(vec![]), - 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()), - } - } - - /// Verify that compute_update_changes produces correct Install entries for new packages. - #[test] - fn test_require_change_report_new_packages() { - let new_lock = minimal_lock(vec![ - make_locked_package("psr/log", "3.0.0"), - make_locked_package("monolog/monolog", "3.8.0"), - ]); - - let changes = super::super::update::compute_update_changes(None, &new_lock, false); - assert_eq!(changes.len(), 2); - for change in &changes { - assert!( - matches!( - change.kind, - super::super::update::ChangeKind::Install { .. } - ), - "Expected Install, got {:?} for {}", - change.kind, - change.name - ); - } - } - - /// Verify the dry-run path does not write lock file. - #[test] - fn test_no_update_skips_lock_generation() { - let dir = tempfile::tempdir().unwrap(); - let lock_path = dir.path().join("composer.lock"); - assert!(!lock_path.exists()); - } - - #[test] - fn test_require_dry_run_modifies_nothing() { - use tempfile::tempdir; - - let dir = tempdir().unwrap(); - let composer_path = dir.path().join("composer.json"); - let lock_path = dir.path().join("composer.lock"); - let vendor_dir = dir.path().join("vendor"); - - let original_content = r#"{"name": "test/project", "require": {}}"#; - std::fs::write(&composer_path, original_content).unwrap(); - - assert_eq!( - std::fs::read_to_string(&composer_path).unwrap(), - original_content - ); - assert!( - !lock_path.exists(), - "Lock file should not be created by dry run" - ); - assert!( - !vendor_dir.exists(), - "Vendor dir should not be created by dry run" - ); - } - - /// Verify firstRequire is true when require and require-dev are both empty. - #[test] - fn test_first_require_empty_sections() { - use mozart_core::package::RawPackageData; - - let raw = RawPackageData::new("test/project".to_string()); - let first_require = raw.require.is_empty() && raw.require_dev.is_empty(); - assert!( - first_require, - "firstRequire should be true when both sections are empty" - ); - } - - /// Verify firstRequire is false when require is non-empty. - #[test] - fn test_first_require_non_empty_require() { - use mozart_core::package::RawPackageData; - - let mut raw = RawPackageData::new("test/project".to_string()); - raw.require - .insert("some/pkg".to_string(), "^1.0".to_string()); - let first_require = raw.require.is_empty() && raw.require_dev.is_empty(); - assert!( - !first_require, - "firstRequire should be false when require is non-empty" - ); - } - - /// Verify get_packages_by_require_key returns correct section for each package. - #[test] - fn test_get_packages_by_require_key() { - use mozart_core::package::RawPackageData; - - let mut raw = RawPackageData::new("test/project".to_string()); - raw.require - .insert("vendor/a".to_string(), "^1.0".to_string()); - raw.require_dev - .insert("vendor/b".to_string(), "^2.0".to_string()); - - let map = get_packages_by_require_key(&raw); - assert_eq!(map.get("vendor/a"), Some(&"require".to_string())); - assert_eq!(map.get("vendor/b"), Some(&"require-dev".to_string())); - assert_eq!(map.get("vendor/c"), None); - } - - /// Verify get_inconsistent_require_keys returns packages in the opposite section. - #[test] - fn test_get_inconsistent_require_keys() { - let mut packages_by_key = IndexMap::new(); - packages_by_key.insert("vendor/a".to_string(), "require".to_string()); - packages_by_key.insert("vendor/b".to_string(), "require-dev".to_string()); - - // Adding vendor/a to require-dev while it's in require → inconsistent - let new_pkgs = vec!["vendor/a".to_string(), "vendor/c".to_string()]; - let inconsistent = - get_inconsistent_require_keys(&new_pkgs, "require-dev", &packages_by_key); - assert_eq!(inconsistent, vec!["vendor/a"]); - - // Adding vendor/b to require while it's in require-dev → inconsistent - let new_pkgs2 = vec!["vendor/b".to_string()]; - let inconsistent2 = get_inconsistent_require_keys(&new_pkgs2, "require", &packages_by_key); - assert_eq!(inconsistent2, vec!["vendor/b"]); - } - - #[tokio::test] - #[ignore] - async fn test_require_full_e2e() { - use indexmap::IndexSet; - use mozart_core::package::RawPackageData; - use mozart_core::repository::lockfile::{LockFileGenerationRequest, generate_lock_file}; - - let composer_json_content = r#"{"name": "test/project", "require": {"psr/log": "^3.0"}}"#; - let composer_json: RawPackageData = serde_json::from_str(composer_json_content).unwrap(); - - let request = ResolveRequest { - root_name: String::new(), - root_version: None, - require: vec![("psr/log".to_string(), "^3.0".to_string())], - require_dev: vec![], - include_dev: false, - minimum_stability: Stability::Stable, - stability_flags: IndexMap::new(), - prefer_stable: true, - prefer_lowest: false, - platform: PlatformConfig::new(), - ignore_platform_reqs: false, - ignore_platform_req_list: vec![], - repositories: std::sync::Arc::new( - mozart_core::repository::repository::RepositorySet::with_packagist( - mozart_core::repository::cache::Cache::new( - std::env::temp_dir().join("mozart-test-cache"), - false, - ), - ), - ), - temporary_constraints: IndexMap::new(), - raw_repositories: vec![], - root_provide: IndexMap::new(), - root_replace: IndexMap::new(), - root_conflict: IndexMap::new(), - locked_package_names: IndexSet::new(), - locked_packages: Vec::new(), - block_abandoned: false, - root_branch_alias: None, - preferred_versions: indexmap::IndexMap::new(), - block_insecure: false, - }; - - let resolved = resolver::resolve(&request) - .await - .expect("Resolution should succeed"); - assert!(!resolved.is_empty()); - assert!(resolved.iter().any(|p| p.name == "psr/log")); - - let lock = generate_lock_file(&LockFileGenerationRequest { - resolved_packages: resolved, - composer_json_content: composer_json_content.to_string(), - composer_json, - include_dev: false, - repositories: std::sync::Arc::new( - mozart_core::repository::repository::RepositorySet::with_packagist( - mozart_core::repository::cache::Cache::new( - std::env::temp_dir().join("mozart-test-cache"), - false, - ), - ), - ), - previous_lock: None, - lock_pinned_names: IndexSet::new(), - }) - .await - .expect("Lock file generation should succeed"); - - assert!(!lock.content_hash.is_empty()); - assert!(!lock.packages.is_empty()); - assert!(lock.packages.iter().any(|p| p.name == "psr/log")); - } - - #[tokio::test] - #[ignore] - async fn test_require_no_install_writes_lock_only() { - use indexmap::IndexSet; - use mozart_core::package::RawPackageData; - use tempfile::tempdir; - - let dir = tempdir().unwrap(); - let composer_path = dir.path().join("composer.json"); - let lock_path = dir.path().join("composer.lock"); - let vendor_dir = dir.path().join("vendor"); - - let content = r#"{"name": "test/project", "require": {"psr/log": "^3.0"}}"#; - std::fs::write(&composer_path, content).unwrap(); - - let raw: RawPackageData = serde_json::from_str(content).unwrap(); - - let request = ResolveRequest { - root_name: String::new(), - root_version: None, - require: vec![("psr/log".to_string(), "^3.0".to_string())], - require_dev: vec![], - include_dev: false, - minimum_stability: Stability::Stable, - stability_flags: IndexMap::new(), - prefer_stable: true, - prefer_lowest: false, - platform: PlatformConfig::new(), - ignore_platform_reqs: false, - ignore_platform_req_list: vec![], - repositories: std::sync::Arc::new( - mozart_core::repository::repository::RepositorySet::with_packagist( - mozart_core::repository::cache::Cache::new( - std::env::temp_dir().join("mozart-test-cache"), - false, - ), - ), - ), - temporary_constraints: IndexMap::new(), - raw_repositories: vec![], - root_provide: IndexMap::new(), - root_replace: IndexMap::new(), - root_conflict: IndexMap::new(), - locked_package_names: IndexSet::new(), - locked_packages: Vec::new(), - block_abandoned: false, - root_branch_alias: None, - preferred_versions: indexmap::IndexMap::new(), - block_insecure: false, - }; - - let resolved = resolver::resolve(&request) - .await - .expect("Resolution should succeed"); - let new_lock = lockfile::generate_lock_file(&lockfile::LockFileGenerationRequest { - resolved_packages: resolved, - composer_json_content: content.to_string(), - composer_json: raw, - include_dev: false, - repositories: std::sync::Arc::new( - mozart_core::repository::repository::RepositorySet::with_packagist( - mozart_core::repository::cache::Cache::new( - std::env::temp_dir().join("mozart-test-cache"), - false, - ), - ), - ), - previous_lock: None, - lock_pinned_names: IndexSet::new(), - }) - .await - .expect("Lock file generation should succeed"); - - new_lock.write_to_file(&lock_path).unwrap(); - - assert!(lock_path.exists(), "Lock file should be written"); - assert!( - !vendor_dir.exists(), - "Vendor dir should NOT exist with --no-install" - ); - } -} |
