From 759b2980e70dfb8960238f75d68bb6dddce25414 Mon Sep 17 00:00:00 2001 From: nsfisis Date: Fri, 7 Aug 2026 07:01:50 +0900 Subject: test: port the tests left as todo!() stubs Replace the todo!() bodies with real ports. Four autoload-generator tests now run for real; the rest stay #[ignore]d, but each ignore reason now names the concrete missing symbol instead of a vague subsystem. Production additions the ports need: the deprecated AuthHelper::addAuthenticationHeader wrapper, EventDispatcher::__set_dispatch_script_override as the seam for PHPUnit onlyMethods(['dispatchScript']), and a define() stub in the shim. Co-Authored-By: Claude Opus 5 (1M context) --- .../tests/command/self_update_command_test.rs | 138 +++++++++++++++++---- 1 file changed, 112 insertions(+), 26 deletions(-) (limited to 'crates/shirabe/tests/command/self_update_command_test.rs') diff --git a/crates/shirabe/tests/command/self_update_command_test.rs b/crates/shirabe/tests/command/self_update_command_test.rs index 3b73adbb..6dc64104 100644 --- a/crates/shirabe/tests/command/self_update_command_test.rs +++ b/crates/shirabe/tests/command/self_update_command_test.rs @@ -1,40 +1,102 @@ //! ref: composer/tests/Composer/Test/Command/SelfUpdateCommandTest.php use crate::test_case::{RunOptions, get_application_tester, init_temp_composer}; +use indexmap::IndexMap; use serial_test::serial; -use shirabe_php_shim::PhpMixed; +use shirabe_external_packages::symfony::process::Process; +use shirabe_php_shim::{PHP_BINARY, PhpMixed}; -/// ref: SelfUpdateCommandTest::setUp (portable part: initTempComposer; the composer-test.phar copy -/// is omitted because the phar fixture and Symfony Process are not ported). +/// ref: SelfUpdateCommandTest::setUp. The `composer-test.phar` copy PHP also performs here lives in +/// `set_up_with_phar` instead, so the one test that never touches the phar is not blocked by the +/// missing fixture. fn set_up() -> crate::test_case::TearDown { init_temp_composer(None, None, None, true) } +/// ref: SelfUpdateCommandTest::setUp, including the `composer-test.phar` copy. Returns the tear-down +/// guard and `$this->phar`. +fn set_up_with_phar() -> (crate::test_case::TearDown, String) { + let tear_down = set_up(); + let phar = tear_down.working_dir().join("composer.phar"); + std::fs::copy( + std::path::Path::new(env!("CARGO_MANIFEST_DIR")) + .join("../../composer/tests/composer-test.phar"), + &phar, + ) + .unwrap(); + + (tear_down, phar.display().to_string()) +} + +/// ref: SelfUpdateCommandTest::channelOptions +fn channel_options() -> Vec<(&'static str, &'static str)> { + vec![ + ("--stable", "stable channel"), + ("--preview", "preview channel"), + ("--snapshot", "snapshot channel"), + ] +} + #[test] #[serial] -#[ignore = "spawns `new Process([PHP_BINARY, $this->phar, 'self-update'])` running composer-test.phar \ - over HTTP; requires Symfony Process and the composer-test.phar fixture, neither ported"] +#[ignore = "composer-test.phar is built by AllFunctionalTest::testBuildPhar via bin/compile, which has no equivalent here, so the fixture set_up_with_phar copies can never exist"] fn test_successful_update() { - let _tear_down = set_up(); + let (_tear_down, phar) = set_up_with_phar(); + + if shirabe::composer::VERSION != concat!("@package_version", "@") { + eprintln!( + "skipping: On releases this test can fail to upgrade as we are already on latest version" + ); + return; + } + + let mut app_tester = Process::new( + vec![PHP_BINARY.to_string(), phar, "self-update".to_string()], + None, + None, + PhpMixed::Null, + None, + ) + .unwrap(); + let status = app_tester.run(None, IndexMap::new()).unwrap(); + assert_eq!(0, status, "{}", app_tester.get_error_output().unwrap()); - // TODO(phase-d): spawns `new Process([PHP_BINARY, $this->phar, 'self-update'])` running - // composer-test.phar over HTTP; requires Symfony Process and the composer-test.phar fixture, - // neither ported. - todo!() + assert!( + app_tester + .get_output() + .unwrap() + .contains("Upgrading to version") + ); } #[test] #[serial] -#[ignore = "spawns `new Process([PHP_BINARY, $this->phar, 'self-update', '2.4.0'])` running \ - composer-test.phar over HTTP; requires Symfony Process and the composer-test.phar \ - fixture, neither ported"] +#[ignore = "composer-test.phar is built by AllFunctionalTest::testBuildPhar via bin/compile, which has no equivalent here, so the fixture set_up_with_phar copies can never exist"] fn test_update_to_specific_version() { - let _tear_down = set_up(); + let (_tear_down, phar) = set_up_with_phar(); + + let mut app_tester = Process::new( + vec![ + PHP_BINARY.to_string(), + phar, + "self-update".to_string(), + "2.4.0".to_string(), + ], + None, + None, + PhpMixed::Null, + None, + ) + .unwrap(); + let status = app_tester.run(None, IndexMap::new()).unwrap(); + assert_eq!(0, status, "{}", app_tester.get_error_output().unwrap()); - // TODO(phase-d): spawns `new Process([PHP_BINARY, $this->phar, 'self-update', '2.4.0'])` - // running composer-test.phar over HTTP; requires Symfony Process and the composer-test.phar - // fixture, neither ported. - todo!() + assert!( + app_tester + .get_output() + .unwrap() + .contains("Upgrading to version 2.4.0") + ); } #[test] @@ -63,14 +125,38 @@ fn test_update_with_invalid_option_throws_exception() { #[test] #[serial] -#[ignore = "spawns `new Process([PHP_BINARY, $this->phar, 'self-update', $option])` running \ - composer-test.phar over HTTP (data provider: --stable/--preview/--snapshot); requires \ - Symfony Process and the composer-test.phar fixture, neither ported"] +#[ignore = "composer-test.phar is built by AllFunctionalTest::testBuildPhar via bin/compile, which has no equivalent here, so the fixture set_up_with_phar copies can never exist"] fn test_update_to_different_channel() { - let _tear_down = set_up(); + for (option, expected_output) in channel_options() { + let (_tear_down, phar) = set_up_with_phar(); + + if shirabe::composer::VERSION != concat!("@package_version", "@") + && ["--stable", "--preview"].contains(&option) + { + eprintln!( + "skipping: On releases this test can fail to upgrade as we are already on latest version" + ); + continue; + } + + let mut app_tester = Process::new( + vec![ + PHP_BINARY.to_string(), + phar, + "self-update".to_string(), + option.to_string(), + ], + None, + None, + PhpMixed::Null, + None, + ) + .unwrap(); + let status = app_tester.run(None, IndexMap::new()).unwrap(); + assert_eq!(0, status, "{}", app_tester.get_error_output().unwrap()); - // TODO(phase-d): spawns `new Process([PHP_BINARY, $this->phar, 'self-update', $option])` - // running composer-test.phar over HTTP (data provider: --stable/--preview/--snapshot); - // requires Symfony Process and the composer-test.phar fixture, neither ported. - todo!() + let output = app_tester.get_output().unwrap(); + assert!(output.contains("Upgrading to version")); + assert!(output.contains(expected_output)); + } } -- cgit v1.3.1