use crate::git::GitError;
use crate::runutil;
#[test]
fn dirty_repo_error_is_detected_in_error_chain() {
let git_err = GitError::DirtyRepo {
details: "uncommitted changes".to_string(),
};
let err = anyhow::anyhow!(git_err);
assert!(
runutil::is_dirty_repo_error(&err),
"Should detect DirtyRepo in error chain"
);
}
#[test]
fn dirty_repo_error_with_context_is_detected() {
let git_err = GitError::DirtyRepo {
details: "uncommitted changes".to_string(),
};
let err = anyhow::anyhow!(git_err).context("running phase 1");
assert!(
runutil::is_dirty_repo_error(&err),
"Should detect DirtyRepo through context layers"
);
}
#[test]
fn non_dirty_repo_error_is_not_detected() {
let git_err = GitError::NoUpstream;
let err = anyhow::anyhow!(git_err);
assert!(
!runutil::is_dirty_repo_error(&err),
"Should NOT detect NoUpstream as DirtyRepo"
);
}
#[test]
fn arbitrary_error_is_not_detected_as_dirty_repo() {
let err = anyhow::anyhow!("something went wrong");
assert!(
!runutil::is_dirty_repo_error(&err),
"Should NOT detect arbitrary error as DirtyRepo"
);
}
#[test]
fn dirty_repo_error_deep_in_chain_is_detected() {
let git_err = GitError::DirtyRepo {
details: "uncommitted changes".to_string(),
};
let err = anyhow::anyhow!(git_err)
.context("phase 2 failed")
.context("task execution failed")
.context("run loop iteration failed");
assert!(
runutil::is_dirty_repo_error(&err),
"Should detect DirtyRepo deep in error chain"
);
}