use sal_git::*; use std::fs; use tempfile::TempDir; #[test] fn test_parse_git_url_https() { let (server, account, repo) = parse_git_url("https://github.com/user/repo.git"); assert_eq!(server, "github.com"); assert_eq!(account, "user"); assert_eq!(repo, "repo"); } #[test] fn test_parse_git_url_https_without_git_extension() { let (server, account, repo) = parse_git_url("https://github.com/user/repo"); assert_eq!(server, "github.com"); assert_eq!(account, "user"); assert_eq!(repo, "repo"); } #[test] fn test_parse_git_url_ssh() { let (server, account, repo) = parse_git_url("git@github.com:user/repo.git"); assert_eq!(server, "github.com"); assert_eq!(account, "user"); assert_eq!(repo, "repo"); } #[test] fn test_parse_git_url_ssh_without_git_extension() { let (server, account, repo) = parse_git_url("git@github.com:user/repo"); assert_eq!(server, "github.com"); assert_eq!(account, "user"); assert_eq!(repo, "repo"); } #[test] fn test_parse_git_url_invalid() { let (server, account, repo) = parse_git_url("invalid-url"); assert_eq!(server, ""); assert_eq!(account, ""); assert_eq!(repo, ""); } #[test] fn test_git_tree_new_creates_directory() { let temp_dir = TempDir::new().unwrap(); let base_path = temp_dir.path().join("git_repos"); let base_path_str = base_path.to_str().unwrap(); let _git_tree = GitTree::new(base_path_str).unwrap(); assert!(base_path.exists()); assert!(base_path.is_dir()); } #[test] fn test_git_tree_new_existing_directory() { let temp_dir = TempDir::new().unwrap(); let base_path = temp_dir.path().join("existing_dir"); fs::create_dir_all(&base_path).unwrap(); let base_path_str = base_path.to_str().unwrap(); let _git_tree = GitTree::new(base_path_str).unwrap(); } #[test] fn test_git_tree_new_invalid_path() { let temp_dir = TempDir::new().unwrap(); let file_path = temp_dir.path().join("file.txt"); fs::write(&file_path, "content").unwrap(); let file_path_str = file_path.to_str().unwrap(); let result = GitTree::new(file_path_str); assert!(result.is_err()); if let Err(error) = result { match error { GitError::InvalidBasePath(_) => {} _ => panic!("Expected InvalidBasePath error"), } } } #[test] fn test_git_tree_list_empty_directory() { let temp_dir = TempDir::new().unwrap(); let base_path_str = temp_dir.path().to_str().unwrap(); let git_tree = GitTree::new(base_path_str).unwrap(); let repos = git_tree.list().unwrap(); assert!(repos.is_empty()); } #[test] fn test_git_repo_new() { let repo = GitRepo::new("/path/to/repo".to_string()); assert_eq!(repo.path(), "/path/to/repo"); } #[test] fn test_git_repo_clone() { let repo1 = GitRepo::new("/path/to/repo".to_string()); let repo2 = repo1.clone(); assert_eq!(repo1.path(), repo2.path()); } #[test] fn test_git_error_display() { let error = GitError::InvalidUrl("bad-url".to_string()); assert_eq!(format!("{}", error), "Could not parse git URL: bad-url"); let error = GitError::NoRepositoriesFound; assert_eq!(format!("{}", error), "No repositories found"); let error = GitError::RepositoryNotFound("pattern".to_string()); assert_eq!( format!("{}", error), "No repositories found matching 'pattern'" ); }