#[macro_export]
macro_rules! git_log_provider_contract_tests {
($name:ident, $setup:expr, $min_commits:expr $(,)?) => {
mod $name {
use $crate::ports::git::GitLogProvider as _;
use super::*;
#[test]
fn contract_walk_all_returns_expected_count() {
let (provider, _guard) = $setup;
let commits = provider.walk_commits(None, None).unwrap();
assert!(
commits.len() >= $min_commits,
"expected >= {} commits, got {}",
$min_commits,
commits.len()
);
}
#[test]
fn contract_walk_limit_one_returns_one() {
let (provider, _guard) = $setup;
let commits = provider.walk_commits(None, Some(1)).unwrap();
assert_eq!(commits.len(), 1, "limit=1 should return exactly 1 commit");
}
#[test]
fn contract_walk_limit_zero_returns_none() {
let (provider, _guard) = $setup;
let commits = provider.walk_commits(None, Some(0)).unwrap();
assert!(commits.is_empty(), "limit=0 should return no commits");
}
}
};
}