mirror of
https://github.com/shareAI-lab/analysis_claude_code.git
synced 2026-09-20 12:13:38 +08:00
refactor: streamline the course to 17 lessons
This commit is contained in:
95
tests/test_skill_loading.py
Normal file
95
tests/test_skill_loading.py
Normal file
@@ -0,0 +1,95 @@
|
||||
import importlib.util
|
||||
import os
|
||||
import sys
|
||||
import tempfile
|
||||
import types
|
||||
from pathlib import Path
|
||||
|
||||
|
||||
ROOT = Path(__file__).resolve().parents[1]
|
||||
LESSON = ROOT / "s07_skill_loading" / "code.py"
|
||||
|
||||
|
||||
def load_lesson(workdir: Path):
|
||||
fake_anthropic = types.ModuleType("anthropic")
|
||||
fake_dotenv = types.ModuleType("dotenv")
|
||||
|
||||
class FakeAnthropic:
|
||||
def __init__(self, *args, **kwargs):
|
||||
self.messages = types.SimpleNamespace(create=None)
|
||||
|
||||
fake_anthropic.Anthropic = FakeAnthropic
|
||||
fake_dotenv.load_dotenv = lambda override=True: None
|
||||
|
||||
previous_modules = {
|
||||
"anthropic": sys.modules.get("anthropic"),
|
||||
"dotenv": sys.modules.get("dotenv"),
|
||||
}
|
||||
previous_cwd = Path.cwd()
|
||||
previous_model = os.environ.get("MODEL_ID")
|
||||
|
||||
spec = importlib.util.spec_from_file_location("s07_skill_test", LESSON)
|
||||
assert spec is not None and spec.loader is not None
|
||||
module = importlib.util.module_from_spec(spec)
|
||||
|
||||
sys.modules["anthropic"] = fake_anthropic
|
||||
sys.modules["dotenv"] = fake_dotenv
|
||||
try:
|
||||
os.chdir(workdir)
|
||||
os.environ["MODEL_ID"] = "test-model"
|
||||
spec.loader.exec_module(module)
|
||||
return module
|
||||
finally:
|
||||
os.chdir(previous_cwd)
|
||||
if previous_model is None:
|
||||
os.environ.pop("MODEL_ID", None)
|
||||
else:
|
||||
os.environ["MODEL_ID"] = previous_model
|
||||
for name, previous in previous_modules.items():
|
||||
if previous is None:
|
||||
sys.modules.pop(name, None)
|
||||
else:
|
||||
sys.modules[name] = previous
|
||||
|
||||
|
||||
def test_catalog_stays_small_and_load_skill_returns_the_full_file() -> None:
|
||||
with tempfile.TemporaryDirectory() as tmp:
|
||||
root = Path(tmp)
|
||||
skill_dir = root / "skills" / "code-review"
|
||||
skill_dir.mkdir(parents=True)
|
||||
manifest = """---
|
||||
name: code-review
|
||||
description: |
|
||||
Review code for bugs,
|
||||
regressions, and missing tests.
|
||||
---
|
||||
|
||||
# Code Review
|
||||
|
||||
UNIQUE_FULL_INSTRUCTION
|
||||
"""
|
||||
(skill_dir / "SKILL.md").write_text(manifest)
|
||||
|
||||
lesson = load_lesson(root)
|
||||
|
||||
assert lesson.SKILL_LOADER.catalog() == (
|
||||
"- code-review: Review code for bugs, regressions, and missing tests."
|
||||
)
|
||||
assert "code-review" in lesson.SYSTEM
|
||||
assert "UNIQUE_FULL_INSTRUCTION" not in lesson.SYSTEM
|
||||
assert lesson.SKILL_LOADER.load("code-review") == manifest
|
||||
assert lesson.TOOL_HANDLERS["load_skill"]("code-review") == manifest
|
||||
|
||||
|
||||
def test_s07_exposes_only_base_tools_and_load_skill() -> None:
|
||||
with tempfile.TemporaryDirectory() as tmp:
|
||||
lesson = load_lesson(Path(tmp))
|
||||
|
||||
assert [tool["name"] for tool in lesson.TOOLS] == [
|
||||
"bash",
|
||||
"read_file",
|
||||
"write_file",
|
||||
"edit_file",
|
||||
"glob",
|
||||
"load_skill",
|
||||
]
|
||||
Reference in New Issue
Block a user