diff options
| author | nsfisis <nsfisis@gmail.com> | 2026-08-07 07:01:50 +0900 |
|---|---|---|
| committer | nsfisis <nsfisis@gmail.com> | 2026-08-07 07:01:50 +0900 |
| commit | 759b2980e70dfb8960238f75d68bb6dddce25414 (patch) | |
| tree | e37a0af6423f8ae8dd26da309b278d49d45b3451 /crates/shirabe/tests/command/self_update_command_test.rs | |
| parent | 9a393adc0ace86cac788723b524e83c63dfc91c1 (diff) | |
| download | php-shirabe-759b2980e70dfb8960238f75d68bb6dddce25414.tar.gz php-shirabe-759b2980e70dfb8960238f75d68bb6dddce25414.tar.zst php-shirabe-759b2980e70dfb8960238f75d68bb6dddce25414.zip | |
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) <noreply@anthropic.com>
Diffstat (limited to 'crates/shirabe/tests/command/self_update_command_test.rs')
| -rw-r--r-- | crates/shirabe/tests/command/self_update_command_test.rs | 138 |
1 files changed, 112 insertions, 26 deletions
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)); + } } |
