use super::*;
use std::path::Path;
#[test]
fn test_has_changes_clean_repo() {
let root = git_repo_root(None).unwrap();
let result = has_changes(&root);
assert!(result.is_ok());
}
#[test]
fn test_has_changes_invalid_path() {
let result = has_changes(Path::new("/nonexistent/path"));
assert!(result.is_err());
}
#[test]
fn test_generate_name_has_prefix() {
let name = generate_name();
assert!(
name.starts_with("zag-"),
"name should start with 'agent-': {}",
name
);
}
#[test]
fn test_generate_name_has_hex_suffix() {
let name = generate_name();
let suffix = &name["zag-".len()..];
assert_eq!(suffix.len(), 8, "hex suffix should be 8 chars: {}", suffix);
assert!(
suffix.chars().all(|c| c.is_ascii_hexdigit()),
"suffix should be hex: {}",
suffix
);
}
#[test]
fn test_generate_name_not_empty() {
let name = generate_name();
assert!(!name.is_empty());
assert!(name.len() > "zag-".len());
}
#[test]
fn test_git_repo_root_in_repo() {
let root = git_repo_root(None).unwrap();
assert!(root.exists());
assert!(root.join("Cargo.toml").exists());
}
#[test]
fn test_git_repo_root_with_explicit_dir() {
let root = git_repo_root(Some(".")).unwrap();
assert!(root.exists());
}
#[test]
fn test_has_unpushed_commits_runs_without_error() {
let root = git_repo_root(None).unwrap();
let result = has_unpushed_commits(&root);
assert!(result.is_ok());
}
#[test]
fn test_has_unpushed_commits_invalid_path() {
let result = has_unpushed_commits(Path::new("/nonexistent/path"));
assert!(result.is_err());
}
#[test]
fn test_git_repo_root_outside_repo() {
let result = git_repo_root(Some("/tmp"));
assert!(result.is_err());
}
#[test]
fn test_worktree_base_dir_contains_expected_components() {
let base = worktree_base_dir(Path::new("/home/user/my-project"));
let path_str = base.to_string_lossy();
assert!(
path_str.contains(".zag"),
"should contain .zag: {}",
path_str
);
assert!(
path_str.contains("worktrees"),
"should contain worktrees: {}",
path_str
);
assert!(
path_str.contains("home-user-my-project"),
"should contain sanitized path: {}",
path_str
);
}
#[test]
fn test_worktree_base_dir_uses_sanitize_path() {
let base = worktree_base_dir(Path::new("/Users/foo/Source/app"));
let path_str = base.to_string_lossy();
assert!(path_str.contains("Users-foo-Source-app"));
}
#[test]
fn test_generate_name_format() {
let name = generate_name();
assert_eq!(name.len(), 12); assert!(name.starts_with("zag-"));
}