"""Tests del AgentRegistry.""" import shutil from datetime import UTC, datetime from pathlib import Path from forja_core.domain.agent import AgentDefinition, LLMConfig from forja_core.registry.repository import FileSystemAgentRegistry FIXTURES = Path(__file__).parent.parent / "fixtures" / "agents" def test_get_agent_carga_version_activa() -> None: r = FileSystemAgentRegistry(FIXTURES) a = r.get_agent("test_agent") assert a.name == "test_agent" assert a.version == "v1" def test_list_versions_devuelve_metadata() -> None: r = FileSystemAgentRegistry(FIXTURES) metas = r.list_versions("test_agent") assert len(metas) == 2 assert {m.id for m in metas} == {"v1", "v2"} def test_upsert_crea_nueva_version_y_actualiza_index(tmp_path: Path) -> None: # Copiamos el fixture a tmp para no contaminar el repo shutil.copytree(FIXTURES / "test_agent", tmp_path / "test_agent") r = FileSystemAgentRegistry(tmp_path) new_def = AgentDefinition( name="test_agent", version="v2", owner="Juan", purpose="añade lógica", state="active", guardrails=["test_policy"], llm=LLMConfig(temperature=0.3), system_prompt="Eres un agente actualizado.", output_schema={"type": "object"}, updated_at=datetime.now(UTC), ) meta = r.upsert_version("test_agent", new_def, message="bump temp", author="Juan") assert meta.id == "v2" assert (tmp_path / "test_agent" / "versions" / "v2.yaml").exists() # active_version debe haber cambiado a = r.get_agent("test_agent") assert a.version == "v2" def test_diff_versions_retorna_unified_diff(tmp_path: Path) -> None: shutil.copytree(FIXTURES / "test_agent", tmp_path / "test_agent") r = FileSystemAgentRegistry(tmp_path) new_def = AgentDefinition( name="test_agent", version="v2", owner="Juan", purpose="distinto", state="active", guardrails=["test_policy"], llm=LLMConfig(), system_prompt="otro prompt", output_schema={"type": "object"}, updated_at=datetime.now(UTC), ) r.upsert_version("test_agent", new_def, message="change", author="Juan") diff = r.diff_versions("test_agent", "v1", "v2") assert "purpose" in diff.unified_diff assert diff.from_version == "v1" assert diff.to_version == "v2"