71 lines
2.3 KiB
Python
71 lines
2.3 KiB
Python
"""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) == 1
|
|
assert metas[0].id == "v1"
|
|
|
|
|
|
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"
|