aboutsummaryrefslogtreecommitdiffhomepage
path: root/crates/shirabe/tests/command/audit_command_test.rs
diff options
context:
space:
mode:
authornsfisis <nsfisis@gmail.com>2026-06-26 02:23:58 +0900
committernsfisis <nsfisis@gmail.com>2026-06-26 02:23:58 +0900
commit6c89c720d9e4728c288e3c66ffb7dcb4cba5121c (patch)
tree4697f897302425df1b57eb87bf9441308530d0bf /crates/shirabe/tests/command/audit_command_test.rs
parent4bd544608e4934fff4463fd6b104d06162a51ba0 (diff)
downloadphp-shirabe-6c89c720d9e4728c288e3c66ffb7dcb4cba5121c.tar.gz
php-shirabe-6c89c720d9e4728c288e3c66ffb7dcb4cba5121c.tar.zst
php-shirabe-6c89c720d9e4728c288e3c66ffb7dcb4cba5121c.zip
test(command): port show/remove/global/audit/check-platform-reqs/status/self-update/validate tests
Faithfully port the remaining stubbed command test bodies from their PHP counterparts (expected values verbatim). Newly passing: remove (6), global (2), check-platform-reqs (1), status (1), audit (1), self-update (1). Tests whose ported bodies reach a genuine unported src path keep faithful bodies but stay #[ignore] with precise reasons. Dominant blockers surfaced: - ShowCommand::configure stub (empty set_definition) blocks all 42 show tests - Composer-handle RefCell re-entrancy in the Installer (composer.rs:500) and Factory::create_composer (composer.rs:446) paths - check_platform_reqs nests InstalledRepository in InstalledRepository - audit's non-locked branch (audit_command.rs:285) and write_error3 re-entrancy Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
Diffstat (limited to 'crates/shirabe/tests/command/audit_command_test.rs')
-rw-r--r--crates/shirabe/tests/command/audit_command_test.rs114
1 files changed, 106 insertions, 8 deletions
diff --git a/crates/shirabe/tests/command/audit_command_test.rs b/crates/shirabe/tests/command/audit_command_test.rs
index 7d585d9..bccc7c2 100644
--- a/crates/shirabe/tests/command/audit_command_test.rs
+++ b/crates/shirabe/tests/command/audit_command_test.rs
@@ -1,25 +1,123 @@
//! ref: composer/tests/Composer/Test/Command/AuditCommandTest.php
+use crate::test_case::{
+ RunOptions, create_composer_lock, create_installed_json, get_application_tester, get_package,
+ init_temp_composer,
+};
+use serial_test::serial;
+use shirabe::package::handle::PackageInterfaceHandle;
+use shirabe_php_shim::PhpMixed;
+
#[test]
-#[ignore = "missing TestCase::init_temp_composer and get_application_tester (ApplicationTester) infrastructure"]
+#[serial]
+#[ignore = "todo!() at crates/shirabe/src/command/audit_command.rs:285 (AuditCommand::get_packages non-locked branch: installed-repo conversion unported)"]
fn test_successful_response_code_when_no_packages_are_required() {
- todo!()
+ let tear_down = init_temp_composer(None, None, None, true);
+
+ let mut app_tester = get_application_tester();
+ app_tester
+ .run(
+ vec![(PhpMixed::from("command"), PhpMixed::from("audit"))],
+ RunOptions::default(),
+ )
+ .unwrap();
+
+ assert_eq!(0, app_tester.get_status_code());
+ assert_eq!(
+ "No packages - skipping audit.",
+ app_tester.get_display().trim()
+ );
+
+ drop(tear_down);
}
#[test]
-#[ignore = "missing TestCase::init_temp_composer, create_installed_json, and get_application_tester (ApplicationTester) infrastructure"]
+#[serial]
fn test_error_auditing_lock_file_when_it_is_missing() {
- todo!()
+ let tear_down = init_temp_composer(None, None, None, true);
+ let packages: Vec<PackageInterfaceHandle> = vec![get_package("dummy/pkg", "1.0.0")];
+ create_installed_json(&packages, &[], true);
+
+ let mut app_tester = get_application_tester();
+ let err = app_tester
+ .run(
+ vec![
+ (PhpMixed::from("command"), PhpMixed::from("audit")),
+ (PhpMixed::from("--locked"), PhpMixed::from(true)),
+ ],
+ RunOptions::default(),
+ )
+ .expect_err("expected UnexpectedValueException");
+ assert!(
+ err.to_string().contains(
+ "Valid composer.json and composer.lock files are required to run this command with --locked"
+ ),
+ "unexpected error: {err}"
+ );
+
+ drop(tear_down);
}
#[test]
-#[ignore = "missing TestCase::init_temp_composer, create_installed_json, create_composer_lock, and get_application_tester (ApplicationTester) infrastructure"]
+#[serial]
+#[ignore = "'RefCell already mutably borrowed' panic at crates/shirabe/src/io/io_interface.rs:215 (write_error3) in the locked-audit advisory-fetch path; not in target file"]
fn test_audit_package_with_no_security_vulnerabilities() {
- todo!()
+ let tear_down = init_temp_composer(None, None, None, true);
+ let packages: Vec<PackageInterfaceHandle> = vec![get_package("dummy/pkg", "1.0.0")];
+ create_installed_json(&packages, &[], true);
+ create_composer_lock(&packages, &[]);
+
+ let mut app_tester = get_application_tester();
+ app_tester
+ .run(
+ vec![
+ (PhpMixed::from("command"), PhpMixed::from("audit")),
+ (PhpMixed::from("--locked"), PhpMixed::from(true)),
+ ],
+ RunOptions::default(),
+ )
+ .unwrap();
+
+ assert!(
+ app_tester
+ .get_display()
+ .trim()
+ .contains("No security vulnerability advisories found."),
+ "unexpected display: {}",
+ app_tester.get_display()
+ );
+
+ drop(tear_down);
}
#[test]
-#[ignore = "missing TestCase::init_temp_composer, create_installed_json, create_composer_lock, and get_application_tester (ApplicationTester) infrastructure"]
+#[serial]
+#[ignore = "todo!() at crates/shirabe/src/command/audit_command.rs:285 (AuditCommand::get_packages non-locked branch: installed-repo conversion unported)"]
fn test_audit_package_with_no_dev_option_passed() {
- todo!()
+ let tear_down = init_temp_composer(None, None, None, true);
+ let dev_package: Vec<PackageInterfaceHandle> = vec![get_package("dummy/pkg", "1.0.0")];
+ create_installed_json(&[], &dev_package, true);
+ create_composer_lock(&[], &dev_package);
+
+ let mut app_tester = get_application_tester();
+ app_tester
+ .run(
+ vec![
+ (PhpMixed::from("command"), PhpMixed::from("audit")),
+ (PhpMixed::from("--no-dev"), PhpMixed::from(true)),
+ ],
+ RunOptions::default(),
+ )
+ .unwrap();
+
+ assert!(
+ app_tester
+ .get_display()
+ .trim()
+ .contains("No packages - skipping audit."),
+ "unexpected display: {}",
+ app_tester.get_display()
+ );
+
+ drop(tear_down);
}