75 lines
2.5 KiB
Python
75 lines
2.5 KiB
Python
import io
|
|
from pathlib import Path
|
|
import zipfile
|
|
|
|
from src.ai.skills.base import SkillsManager
|
|
|
|
|
|
def _build_codex_skill_zip_bytes(markdown_text: str, root_name: str = "Humanizer-zh-main") -> bytes:
|
|
buffer = io.BytesIO()
|
|
with zipfile.ZipFile(buffer, "w", zipfile.ZIP_DEFLATED) as zf:
|
|
zf.writestr(f"{root_name}/SKILL.md", markdown_text)
|
|
return buffer.getvalue()
|
|
|
|
|
|
def test_resolve_network_source_supports_github_git_url(tmp_path: Path):
|
|
manager = SkillsManager(tmp_path / "skills")
|
|
url, hint_key, subpath = manager._resolve_network_source(
|
|
"https://github.com/op7418/Humanizer-zh.git"
|
|
)
|
|
|
|
assert url == "https://codeload.github.com/op7418/Humanizer-zh/zip/refs/heads/main"
|
|
assert hint_key == "humanizer_zh"
|
|
assert subpath is None
|
|
|
|
|
|
def test_install_skill_from_local_skill_markdown_source(tmp_path: Path):
|
|
source_dir = tmp_path / "Humanizer-zh-main"
|
|
source_dir.mkdir(parents=True, exist_ok=True)
|
|
(source_dir / "SKILL.md").write_text(
|
|
"# Humanizer-zh\n\nUse natural and human-like Chinese tone.\n",
|
|
encoding="utf-8",
|
|
)
|
|
|
|
manager = SkillsManager(tmp_path / "skills")
|
|
ok, installed_key = manager.install_skill_from_source(str(source_dir), skill_name="humanizer_zh")
|
|
|
|
assert ok
|
|
assert installed_key == "humanizer_zh"
|
|
installed_dir = tmp_path / "skills" / "humanizer_zh"
|
|
assert (installed_dir / "skill.json").exists()
|
|
assert (installed_dir / "main.py").exists()
|
|
assert (installed_dir / "SKILL.md").exists()
|
|
|
|
main_code = (installed_dir / "main.py").read_text(encoding="utf-8")
|
|
assert "read_skill_doc" in main_code
|
|
skill_text = (installed_dir / "SKILL.md").read_text(encoding="utf-8")
|
|
assert "Humanizer-zh" in skill_text
|
|
|
|
|
|
def test_install_skill_from_github_git_url_uses_repo_zip_and_markdown_adapter(
|
|
tmp_path: Path, monkeypatch
|
|
):
|
|
manager = SkillsManager(tmp_path / "skills")
|
|
zip_bytes = _build_codex_skill_zip_bytes(
|
|
"# Humanizer-zh\n\nUse natural and human-like Chinese tone.\n"
|
|
)
|
|
captured_urls = []
|
|
|
|
def fake_download(url: str, output_zip: Path):
|
|
captured_urls.append(url)
|
|
output_zip.write_bytes(zip_bytes)
|
|
|
|
monkeypatch.setattr(manager, "_download_zip", fake_download)
|
|
|
|
ok, installed_key = manager.install_skill_from_source(
|
|
"https://github.com/op7418/Humanizer-zh.git"
|
|
)
|
|
|
|
assert ok
|
|
assert installed_key == "humanizer_zh"
|
|
assert captured_urls == [
|
|
"https://codeload.github.com/op7418/Humanizer-zh/zip/refs/heads/main"
|
|
]
|
|
assert (tmp_path / "skills" / "humanizer_zh" / "SKILL.md").exists()
|