77 lines
2.6 KiB
Python
77 lines
2.6 KiB
Python
"""Tests for myclaude.fs_ops module."""
|
|
|
|
from pathlib import Path
|
|
|
|
import pytest
|
|
|
|
from myclaude.fs_ops import (
|
|
collect_local_skills,
|
|
copy_claude_md_to_project,
|
|
copy_skills_to_project,
|
|
copy_skills_to_repo,
|
|
)
|
|
|
|
|
|
def test_i_can_copy_all_skills(tmp_project: Path, tmp_repo: Path) -> None:
|
|
copy_skills_to_project(tmp_repo, tmp_project)
|
|
assert (tmp_project / ".claude" / "skills" / "skill_a" / "SKILL.md").exists()
|
|
assert (tmp_project / ".claude" / "skills" / "skill_b" / "SKILL.md").exists()
|
|
|
|
|
|
@pytest.mark.parametrize("requested,expected", [
|
|
(["skill_a"], ["skill_a"]),
|
|
(["skill_a", "skill_b"], ["skill_a", "skill_b"]),
|
|
])
|
|
def test_i_can_copy_filtered_skills(
|
|
tmp_project: Path,
|
|
tmp_repo: Path,
|
|
requested: list[str],
|
|
expected: list[str],
|
|
) -> None:
|
|
copy_skills_to_project(tmp_repo, tmp_project, skills=requested)
|
|
installed = collect_local_skills(tmp_project)
|
|
assert installed == sorted(expected)
|
|
|
|
|
|
def test_i_can_copy_claude_md(tmp_project: Path, tmp_repo: Path) -> None:
|
|
copy_claude_md_to_project(tmp_repo, tmp_project)
|
|
assert (tmp_project / "CLAUDE.md").read_text() == "# Claude Template"
|
|
|
|
|
|
def test_i_cannot_init_when_skills_dir_exists(tmp_project: Path, tmp_repo: Path) -> None:
|
|
(tmp_project / ".claude" / "skills").mkdir(parents=True)
|
|
with pytest.raises(FileExistsError):
|
|
copy_skills_to_project(tmp_repo, tmp_project)
|
|
|
|
|
|
def test_i_can_force_overwrite_skills_dir(tmp_project: Path, tmp_repo: Path) -> None:
|
|
skills_dir = tmp_project / ".claude" / "skills"
|
|
(skills_dir / "old_skill").mkdir(parents=True)
|
|
copy_skills_to_project(tmp_repo, tmp_project, force=True)
|
|
assert not (skills_dir / "old_skill").exists()
|
|
assert (skills_dir / "skill_a").exists()
|
|
|
|
|
|
@pytest.mark.parametrize("unknown_skill", ["ghost", "unknown", "skill99"])
|
|
def test_i_cannot_copy_unknown_skill(
|
|
tmp_project: Path,
|
|
tmp_repo: Path,
|
|
unknown_skill: str,
|
|
) -> None:
|
|
with pytest.raises(ValueError, match=unknown_skill):
|
|
copy_skills_to_project(tmp_repo, tmp_project, skills=[unknown_skill])
|
|
|
|
|
|
def test_i_can_collect_local_skills(tmp_project: Path) -> None:
|
|
for skill in ("skill_a", "skill_b"):
|
|
(tmp_project / ".claude" / "skills" / skill).mkdir(parents=True)
|
|
assert collect_local_skills(tmp_project) == ["skill_a", "skill_b"]
|
|
|
|
|
|
def test_i_can_copy_skills_to_repo(tmp_project: Path, tmp_repo: Path) -> None:
|
|
skill_dir = tmp_project / ".claude" / "skills" / "skill_a"
|
|
skill_dir.mkdir(parents=True)
|
|
(skill_dir / "SKILL.md").write_text("# Updated A")
|
|
copy_skills_to_repo(tmp_project, tmp_repo)
|
|
assert (tmp_repo / "skills" / "skill_a" / "SKILL.md").read_text() == "# Updated A"
|