"""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