aboutsummaryrefslogtreecommitdiffhomepage
path: root/crates/shirabe/tests/command/self_update_command_test.rs
diff options
context:
space:
mode:
Diffstat (limited to 'crates/shirabe/tests/command/self_update_command_test.rs')
-rw-r--r--crates/shirabe/tests/command/self_update_command_test.rs138
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));
+ }
}