Files

72 lines
3.1 KiB
Python

"""Focused tests for the built-in public-document agent seed."""
from __future__ import annotations
def _make_seed(monkeypatch, tmp_path):
from app.gateway.routers import _gongwen_seed as seed
class FakePaths:
def agent_dir(self, agent_id: str):
return tmp_path / "agents" / agent_id
monkeypatch.setattr(seed, "get_paths", lambda: FakePaths())
monkeypatch.setattr(seed, "_skills_public_dir", lambda: tmp_path / "skills" / "public")
return seed
def test_gongwen_seed_installs_agent_and_workflow_skill(tmp_path, monkeypatch):
seed = _make_seed(monkeypatch, tmp_path)
assert seed.ensure_gongwen_agent() is True
assert (tmp_path / "agents" / seed.GONGWEN_AGENT_ID / "config.yaml").is_file()
skill = tmp_path / "skills" / "public" / seed.GONGWEN_WORKFLOW_SKILL / "SKILL.md"
assert skill.is_file()
assert "gongwen-assistant" in skill.read_text(encoding="utf-8")
# A same-version restart keeps deployed copies untouched.
assert seed.ensure_gongwen_agent() is False
def test_gongwen_seed_installs_the_engine_skill(tmp_path, monkeypatch):
seed = _make_seed(monkeypatch, tmp_path)
assert seed.ensure_gongwen_agent() is True
engine = tmp_path / "skills" / "public" / seed.GONGWEN_ENGINE_SKILL
assert (engine / "SKILL.md").is_file()
assert (engine / "scripts" / "run_gongwen.py").is_file()
assert (engine / "scripts" / "delivery.py").is_file()
assert (engine / "references" / "word-corrections.md").is_file()
assert (engine / "vendor" / "docx" / "__init__.py").is_file()
# Bytecode caches must never ship with the seed.
assert not list(engine.rglob("__pycache__"))
assert not list(engine.rglob("*.pyc"))
# The deployed copy records the seed version it was written from.
version = (engine / ".gongwen-seed-version").read_text(encoding="utf-8").strip()
assert version == str(seed._SEED_VERSION)
def test_gongwen_seed_refreshes_only_when_the_version_bumps(tmp_path, monkeypatch):
seed = _make_seed(monkeypatch, tmp_path)
assert seed.ensure_gongwen_agent() is True
workflow = tmp_path / "skills" / "public" / seed.GONGWEN_WORKFLOW_SKILL / "SKILL.md"
original = workflow.read_text(encoding="utf-8")
# On-site edits at the same seed version survive a restart.
workflow.write_text("on-site edit", encoding="utf-8")
assert seed.ensure_gongwen_agent() is False
assert workflow.read_text(encoding="utf-8") == "on-site edit"
# A pre-versioning deployment (no marker file) refreshes to the shipped
# seed, which is the upgrade path for already-installed copies.
(tmp_path / "skills" / "public" / seed.GONGWEN_WORKFLOW_SKILL / ".gongwen-seed-version").unlink()
assert seed.ensure_gongwen_agent() is False
assert workflow.read_text(encoding="utf-8") == original
# Bumping the seed version replaces stale deployed copies as well.
workflow.write_text("stale edit", encoding="utf-8")
monkeypatch.setattr(seed, "_SEED_VERSION", seed._SEED_VERSION + 1)
assert seed.ensure_gongwen_agent() is True
assert workflow.read_text(encoding="utf-8") == original