77 lines
2.6 KiB
Python
77 lines
2.6 KiB
Python
import asyncio
|
|
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()
|
|
|
|
assert asyncio.run(manager.load_skill("humanizer_zh"))
|
|
tools = manager.get_all_tools()
|
|
assert "humanizer_zh.read_skill_doc" in tools
|
|
text = asyncio.run(tools["humanizer_zh.read_skill_doc"]())
|
|
assert "Humanizer-zh" in 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()
|