diff options
| author | nsfisis <nsfisis@gmail.com> | 2026-07-20 03:48:11 +0900 |
|---|---|---|
| committer | nsfisis <nsfisis@gmail.com> | 2026-07-20 03:48:11 +0900 |
| commit | 112e0125defacba3fcd59cd5f8949b77746264bc (patch) | |
| tree | 7db674d477527e150a603f0ea22252f06e7e5029 /crates/shirabe/tests | |
| parent | ff00c76d2033b0e3bc15aa3fa6e282d72b00cd1f (diff) | |
| download | php-shirabe-112e0125defacba3fcd59cd5f8949b77746264bc.tar.gz php-shirabe-112e0125defacba3fcd59cd5f8949b77746264bc.tar.zst php-shirabe-112e0125defacba3fcd59cd5f8949b77746264bc.zip | |
fix(git-downloader): un-ignore test_remove via FilesystemMock path seam
The ignore reason went stale: the FilesystemMock seam added for
FileDownloaderTest already intercepts removeDirectoryAsync, and the
sibling fossil/hg testRemove ports use it. The seam now records the
removed directories instead of a bare call count so the PHP
->with($this->equalTo($this->workingDir)) argument assertion can be
reproduced faithfully.
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Diffstat (limited to 'crates/shirabe/tests')
| -rw-r--r-- | crates/shirabe/tests/downloader/git_downloader_test.rs | 56 |
1 files changed, 45 insertions, 11 deletions
diff --git a/crates/shirabe/tests/downloader/git_downloader_test.rs b/crates/shirabe/tests/downloader/git_downloader_test.rs index f7c82066..41852300 100644 --- a/crates/shirabe/tests/downloader/git_downloader_test.rs +++ b/crates/shirabe/tests/downloader/git_downloader_test.rs @@ -16,7 +16,7 @@ use shirabe::package::Mirror; use shirabe::package::handle::{CompletePackageHandle, PackageInterfaceHandle}; use shirabe::util::Git as GitUtil; use shirabe::util::ProcessExecutor; -use shirabe::util::filesystem::Filesystem; +use shirabe::util::filesystem::{Filesystem, FilesystemMock}; use shirabe_php_shim::PhpMixed; use shirabe_semver::VersionParser; use tempfile::TempDir; @@ -1110,20 +1110,54 @@ fn test_not_using_downgrading_with_references() { }); } -#[ignore = "PHP mocks Filesystem::removeDirectoryAsync (asserting it is called once with the \ - working dir). With no Filesystem mock, the real removeDirectoryAsync drives the \ - Filesystem's own ProcessExecutor for `rm -rf`, which requires a Composer\\Loop and \ - cannot be redirected through the mocked ProcessExecutor"] +#[serial] #[test] fn test_remove() { let working_dir = set_up(); let _tear_down = TearDown::new(working_dir.path().to_path_buf()); - let _ = &working_dir; - // TODO(phase-d): PHP mocks Filesystem::removeDirectoryAsync (asserting it is called once - // with the working dir). With no Filesystem mock, the real removeDirectoryAsync drives - // the Filesystem's own ProcessExecutor for `rm -rf`, which requires a Composer\Loop and - // cannot be redirected through the mocked ProcessExecutor. - todo!() + let working_dir_str = working_dir.path().to_string_lossy().into_owned(); + + let package = get_package("dummy/pkg", "1.0.0", None, None); + let (process, _guard) = get_process_executor_mock( + vec![ + cmd(vec!["git", "show-ref", "--head", "-d"]), + cmd(vec!["git", "status", "--porcelain", "--untracked-files=no"]), + ], + true, + Default::default(), + ); + + Filesystem::new(None) + .ensure_directory_exists(&format!("{}/.git", working_dir_str)) + .unwrap(); + + let mut filesystem = Filesystem::new(None); + filesystem.__set_mock(FilesystemMock { + remove_directory_async_result: Some(true), + ..Default::default() + }); + let filesystem = std::rc::Rc::new(std::cell::RefCell::new(filesystem)); + + let downloader = get_downloader_mock(None, None, process, Some(filesystem.clone())); + run(async { + downloader + .prepare("uninstall", package.clone(), &working_dir_str, None) + .await + .unwrap(); + downloader + .remove(package.clone(), &working_dir_str) + .await + .unwrap(); + downloader + .cleanup("uninstall", package, &working_dir_str, None) + .await + .unwrap(); + }); + + assert_eq!( + filesystem.borrow().__remove_directory_async_paths(), + vec![working_dir_str] + ); } #[serial] |
