use crate::ports::git::{CommitRecord, GitLogProvider, GitProviderError};
pub struct FakeGitLogProvider {
commits: Vec<CommitRecord>,
fail: bool,
}
impl FakeGitLogProvider {
pub fn with_commits(commits: Vec<CommitRecord>) -> Self {
Self {
commits,
fail: false,
}
}
pub fn poisoned() -> Self {
Self {
commits: vec![],
fail: true,
}
}
}
impl GitLogProvider for FakeGitLogProvider {
fn walk_commits(
&self,
_range: Option<&str>,
limit: Option<usize>,
) -> Result<Vec<CommitRecord>, GitProviderError> {
if self.fail {
return Err(GitProviderError::LockPoisoned);
}
let commits = match limit {
Some(n) => self.commits.iter().take(n).cloned().collect(),
None => self.commits.clone(),
};
Ok(commits)
}
}