diff options
| author | nsfisis <nsfisis@gmail.com> | 2026-06-28 14:30:41 +0900 |
|---|---|---|
| committer | nsfisis <nsfisis@gmail.com> | 2026-06-28 14:30:41 +0900 |
| commit | e97dc6e64c1be4bf78c420b11cec2a18dfd506d4 (patch) | |
| tree | 6e397f696631ca23e931a1873803e0b1f85af915 /crates/shirabe/tests/common | |
| parent | f408ff1ff95ce6e512810ccb10695f773fe5a8b9 (diff) | |
| download | php-shirabe-e97dc6e64c1be4bf78c420b11cec2a18dfd506d4.tar.gz php-shirabe-e97dc6e64c1be4bf78c420b11cec2a18dfd506d4.tar.zst php-shirabe-e97dc6e64c1be4bf78c420b11cec2a18dfd506d4.zip | |
test(tests): use mockall for hand-written interface mocks
Replace hand-written mock/stub structs that re-implemented PHPUnit
mock-builder behavior (record-and-verify, manual call counters,
unreachable!() guards) with mockall::mock! locals across:
- package/loader: MockLoader, VersionGuesserMock
- command: ArchiveManager/RepositoryManager/EventDispatcher mocks
- util: ConfigSource/AuthJson mocks (auth_helper, bitbucket, github,
forgejo, gitlab)
- repository/vcs: github_driver NullConfigSource
- installer: CountingInstaller, RecordingBinaryInstaller, and the
DownloadManager mock (formerly common/downloader_stub.rs, now deleted)
- downloader: download_manager create_downloader_mock
Verification (counts/args) now lives in mockall expectations checked on
drop. installation_manager BinaryInstaller is left hand-written because
its as_binary_presence_interface seam returns Some(&mut self), which
mockall cannot express; io_stub and io_mock are left as-is.
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
Diffstat (limited to 'crates/shirabe/tests/common')
| -rw-r--r-- | crates/shirabe/tests/common/downloader_stub.rs | 129 |
1 files changed, 0 insertions, 129 deletions
diff --git a/crates/shirabe/tests/common/downloader_stub.rs b/crates/shirabe/tests/common/downloader_stub.rs deleted file mode 100644 index 0c4432b..0000000 --- a/crates/shirabe/tests/common/downloader_stub.rs +++ /dev/null @@ -1,129 +0,0 @@ -//! No-op DownloaderInterface stub for installer tests. -//! -//! PHP mocks `Composer\Downloader\DownloadManager` directly and asserts its -//! `install`/`update`/`remove` calls. The Rust DownloadManager is a concrete type -//! that dispatches to a registered DownloaderInterface, so the equivalent stub -//! lives one level down: a downloader registered under some dist type that records -//! the calls it receives and resolves to null, the same way the PHP mock returns -//! `\React\Promise\resolve(null)`. -#![allow(dead_code)] - -use std::cell::RefCell; -use std::rc::Rc; - -use shirabe::downloader::DownloaderInterface; -use shirabe::package::PackageInterfaceHandle; -use shirabe_php_shim::PhpMixed; - -/// One recorded downloader operation, capturing the package pretty-names and the -/// target path so tests can assert what the LibraryInstaller forwarded. -#[derive(Debug, Clone, PartialEq, Eq)] -pub enum DownloaderCall { - Install { - package: String, - path: String, - }, - Update { - initial: String, - target: String, - path: String, - }, - Remove { - package: String, - path: String, - }, -} - -#[derive(Debug, Default)] -pub struct DownloaderStub { - calls: Rc<RefCell<Vec<DownloaderCall>>>, -} - -impl DownloaderStub { - pub fn new() -> Self { - Self::default() - } - - /// Shared handle to the recorded call log, so tests can inspect it after the - /// stub has been moved into the DownloadManager. - pub fn calls(&self) -> Rc<RefCell<Vec<DownloaderCall>>> { - self.calls.clone() - } -} - -#[async_trait::async_trait(?Send)] -impl DownloaderInterface for DownloaderStub { - fn get_installation_source(&self) -> String { - "dist".to_string() - } - - async fn download( - &mut self, - _package: PackageInterfaceHandle, - _path: &str, - _prev_package: Option<PackageInterfaceHandle>, - _output: bool, - ) -> anyhow::Result<Option<PhpMixed>> { - Ok(None) - } - - async fn prepare( - &mut self, - _type: &str, - _package: PackageInterfaceHandle, - _path: &str, - _prev_package: Option<PackageInterfaceHandle>, - ) -> anyhow::Result<Option<PhpMixed>> { - Ok(None) - } - - async fn install( - &mut self, - package: PackageInterfaceHandle, - path: &str, - _output: bool, - ) -> anyhow::Result<Option<PhpMixed>> { - self.calls.borrow_mut().push(DownloaderCall::Install { - package: package.get_pretty_name(), - path: path.to_string(), - }); - Ok(None) - } - - async fn update( - &mut self, - initial: PackageInterfaceHandle, - target: PackageInterfaceHandle, - path: &str, - ) -> anyhow::Result<Option<PhpMixed>> { - self.calls.borrow_mut().push(DownloaderCall::Update { - initial: initial.get_pretty_name(), - target: target.get_pretty_name(), - path: path.to_string(), - }); - Ok(None) - } - - async fn remove( - &mut self, - package: PackageInterfaceHandle, - path: &str, - _output: bool, - ) -> anyhow::Result<Option<PhpMixed>> { - self.calls.borrow_mut().push(DownloaderCall::Remove { - package: package.get_pretty_name(), - path: path.to_string(), - }); - Ok(None) - } - - async fn cleanup( - &mut self, - _type: &str, - _package: PackageInterfaceHandle, - _path: &str, - _prev_package: Option<PackageInterfaceHandle>, - ) -> anyhow::Result<Option<PhpMixed>> { - Ok(None) - } -} |
