agrovision / tests /unit /test_tools.py
alexp97's picture
feat(agent): asistente RAG con function calling + memoria (Fase 5)
9837673
Raw
History Blame Contribute Delete
1.98 kB
"""
Archivo: test_tools.py
Fecha de modificación: 03/06/2026
Autor: Equipo AgroVisión
Descripción:
Pruebas unitarias de las herramientas del agente: el esquema de function calling y el
formateo puro de la tendencia NDVI.
Ejecución:
uv run python -m pytest tests/unit/test_tools.py
"""
from __future__ import annotations
from backend.services.tools import TOOLS_SCHEMA, _describe_trend, _in_range
def test_tools_schema_define_tres_herramientas() -> None:
"""El esquema declara las 3 herramientas con `field_name` requerido."""
names = {t["function"]["name"] for t in TOOLS_SCHEMA}
assert names == {
"get_vegetation_index_trend",
"get_weather_context",
"get_field_planting_density",
}
for tool in TOOLS_SCHEMA:
assert "field_name" in tool["function"]["parameters"]["required"]
def test_describe_trend_descenso() -> None:
"""Una serie que baja se describe como 'descenso' con el delta correcto."""
series = [
{"date": "2026-01-01", "mean_ndvi": 0.80},
{"date": "2026-03-01", "mean_ndvi": 0.70},
]
out = _describe_trend("Lote A", series)
assert "descenso" in out
assert "Lote A" in out
assert "-0.10" in out
def test_describe_trend_estable() -> None:
"""Un cambio menor a 0.02 se considera 'estable'."""
series = [
{"date": "2026-01-01", "mean_ndvi": 0.70},
{"date": "2026-03-01", "mean_ndvi": 0.71},
]
assert "estable" in _describe_trend("Lote A", series)
def test_describe_trend_insuficiente() -> None:
"""Con menos de 2 observaciones se reporta datos insuficientes."""
assert "insuficientes" in _describe_trend("Lote A", [{"date": "2026-01-01", "mean_ndvi": 0.7}])
def test_in_range() -> None:
"""El filtro de rango respeta los límites ISO."""
assert _in_range("2026-03-01", "2026-01-01", "2026-12-31")
assert not _in_range("2025-12-01", "2026-01-01", None)
assert _in_range("2026-03-01", None, None)