aboutsummaryrefslogtreecommitdiffhomepage
path: root/crates/shirabe/tests/package/loader/root_package_loader_test.rs
diff options
context:
space:
mode:
authornsfisis <nsfisis@gmail.com>2026-06-28 14:30:41 +0900
committernsfisis <nsfisis@gmail.com>2026-06-28 14:30:41 +0900
commite97dc6e64c1be4bf78c420b11cec2a18dfd506d4 (patch)
tree6e397f696631ca23e931a1873803e0b1f85af915 /crates/shirabe/tests/package/loader/root_package_loader_test.rs
parentf408ff1ff95ce6e512810ccb10695f773fe5a8b9 (diff)
downloadphp-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/package/loader/root_package_loader_test.rs')
-rw-r--r--crates/shirabe/tests/package/loader/root_package_loader_test.rs55
1 files changed, 24 insertions, 31 deletions
diff --git a/crates/shirabe/tests/package/loader/root_package_loader_test.rs b/crates/shirabe/tests/package/loader/root_package_loader_test.rs
index 7fa970a..93ee93a 100644
--- a/crates/shirabe/tests/package/loader/root_package_loader_test.rs
+++ b/crates/shirabe/tests/package/loader/root_package_loader_test.rs
@@ -4,7 +4,7 @@
// ProcessExecutor / VersionGuesser or require constraints whose parsing goes through a
// look-around regex the regex crate cannot compile.
-use std::cell::{Cell, RefCell};
+use std::cell::RefCell;
use std::rc::Rc;
use indexmap::IndexMap;
@@ -87,25 +87,17 @@ impl Drop for GitVersionGuard {
}
// A test double for the concrete VersionGuesser, supplied through the VersionGuesserInterface seam.
-#[derive(Debug)]
-struct VersionGuesserMock {
- version_data: VersionData,
- guess_version_calls: Rc<Cell<u32>>,
-}
-
-impl VersionGuesserInterface for VersionGuesserMock {
- fn guess_version(
- &mut self,
- _package_config: &IndexMap<String, PhpMixed>,
- _path: &str,
- ) -> anyhow::Result<Option<VersionData>> {
- self.guess_version_calls
- .set(self.guess_version_calls.get() + 1);
- Ok(Some(self.version_data.clone()))
- }
+mockall::mock! {
+ #[derive(Debug)]
+ pub VersionGuesser {}
+ impl VersionGuesserInterface for VersionGuesser {
+ fn guess_version(
+ &mut self,
+ package_config: &IndexMap<String, PhpMixed>,
+ path: &str,
+ ) -> anyhow::Result<Option<VersionData>>;
- fn get_root_version_from_env(&self) -> anyhow::Result<String> {
- unreachable!("COMPOSER_ROOT_VERSION is not set in this test")
+ fn get_root_version_from_env(&self) -> anyhow::Result<String>;
}
}
@@ -253,17 +245,19 @@ fn test_pretty_version_for_root_package_in_version_branch() {
let config = make_config();
let manager = make_manager(&io, &config);
- let guess_version_calls = Rc::new(Cell::new(0u32));
- let version_guesser = VersionGuesserMock {
- version_data: VersionData {
- version: Some("3.0.9999999.9999999-dev".to_string()),
- commit: Some("aabbccddee".to_string()),
- pretty_version: Some("3.0-dev".to_string()),
- feature_version: None,
- feature_pretty_version: None,
- },
- guess_version_calls: guess_version_calls.clone(),
- };
+ let mut version_guesser = MockVersionGuesser::new();
+ version_guesser
+ .expect_guess_version()
+ .times(1..)
+ .returning(|_, _| {
+ Ok(Some(VersionData {
+ version: Some("3.0.9999999.9999999-dev".to_string()),
+ commit: Some("aabbccddee".to_string()),
+ pretty_version: Some("3.0-dev".to_string()),
+ feature_version: None,
+ feature_pretty_version: None,
+ }))
+ });
let mut loader = RootPackageLoader::new(
manager,
@@ -277,7 +271,6 @@ fn test_pretty_version_for_root_package_in_version_branch() {
.load(IndexMap::new(), "Composer\\Package\\RootPackage", None)
.unwrap();
- assert!(guess_version_calls.get() >= 1);
assert_eq!("3.0-dev", package.as_root().unwrap().get_pretty_version());
}