90 lines
3.0 KiB
Rust
90 lines
3.0 KiB
Rust
use std::collections::{HashMap, HashSet};
|
|
use std::path::PathBuf;
|
|
|
|
use dirs::home_dir;
|
|
use repo_metadata::{RepositoryUpdate, TargetFile};
|
|
|
|
use super::{
|
|
filter_repository_update_by_prefix, galaxy_home_mcp_config_file_path, galaxy_home_skills_dir,
|
|
galaxy_managed_mcp_config_path, warp_managed_skill_dirs,
|
|
};
|
|
|
|
#[test]
|
|
fn warp_managed_skill_dirs_contains_only_warp_home_path() {
|
|
let dirs = warp_managed_skill_dirs();
|
|
match galaxy_home_skills_dir() {
|
|
Some(warp_home_skills_dir) => assert_eq!(dirs, vec![warp_home_skills_dir]),
|
|
None => assert!(dirs.is_empty()),
|
|
}
|
|
}
|
|
|
|
#[test]
|
|
fn warp_managed_mcp_config_path_contains_only_warp_home_path() {
|
|
match (
|
|
home_dir(),
|
|
galaxy_home_mcp_config_file_path(),
|
|
galaxy_managed_mcp_config_path(),
|
|
) {
|
|
(Some(home_dir), Some(warp_home_mcp_config_path), Some(path)) => {
|
|
assert_eq!(path.root_path, home_dir);
|
|
assert_eq!(path.config_path, warp_home_mcp_config_path);
|
|
}
|
|
(_, _, None) => {}
|
|
_ => panic!("Expected Warp MCP path when home directory is available"),
|
|
}
|
|
}
|
|
|
|
#[test]
|
|
fn filter_repository_update_by_prefix_keeps_only_matching_paths() {
|
|
let skills_dir = PathBuf::from("/tmp/.warp-local/skills");
|
|
let other_dir = PathBuf::from("/tmp/.warp-local/worktrees/repo");
|
|
let skill_file = skills_dir.join("deploy").join("SKILL.md");
|
|
let other_file = other_dir.join("README.md");
|
|
|
|
let update = RepositoryUpdate {
|
|
added: HashSet::from([
|
|
TargetFile::new(skill_file.clone(), false),
|
|
TargetFile::new(other_file.clone(), false),
|
|
]),
|
|
modified: HashSet::new(),
|
|
deleted: HashSet::new(),
|
|
moved: HashMap::new(),
|
|
commit_updated: false,
|
|
index_lock_detected: false,
|
|
remote_ref_updated: false,
|
|
};
|
|
|
|
let filtered =
|
|
filter_repository_update_by_prefix(&update, &skills_dir).expect("expected update");
|
|
|
|
assert!(filtered.contains_added_or_modified(&TargetFile::new(skill_file, false)));
|
|
assert!(!filtered.contains_added_or_modified(&TargetFile::new(other_file, false)));
|
|
}
|
|
|
|
#[test]
|
|
fn filter_repository_update_by_prefix_converts_cross_boundary_moves() {
|
|
let skills_dir = PathBuf::from("/tmp/.warp-local/skills");
|
|
let skill_file = skills_dir.join("deploy").join("SKILL.md");
|
|
let ignored_file = PathBuf::from("/tmp/.warp-local/worktrees/repo/SKILL.md");
|
|
|
|
let update = RepositoryUpdate {
|
|
added: HashSet::new(),
|
|
modified: HashSet::new(),
|
|
deleted: HashSet::new(),
|
|
moved: HashMap::from([(
|
|
TargetFile::new(skill_file.clone(), false),
|
|
TargetFile::new(ignored_file, false),
|
|
)]),
|
|
commit_updated: false,
|
|
index_lock_detected: false,
|
|
remote_ref_updated: false,
|
|
};
|
|
|
|
let filtered =
|
|
filter_repository_update_by_prefix(&update, &skills_dir).expect("expected update");
|
|
|
|
assert!(filtered.contains_added_or_modified(&TargetFile::new(skill_file, false)));
|
|
assert!(filtered.moved.is_empty());
|
|
assert!(filtered.deleted.is_empty());
|
|
}
|