Files
d4c-service-geo-assistant/tests/tools/test_buffer.py
T
Leo Thomas 8f0239c1c9 Tool/naip fetcher (#12)
* Add initial NAIP fetcher

* Swap to Element84's EarthSearch API for NAIP STAC search and download

* clip to bounds of aoi

* Swap to Element84's EarthSearch API for NAIP STAC search and download

* rename bands and remove dask chunking

* Add DS_Store to .gitignore

* restrict date range for naip test

* Adjust timerange for tests

* Add xarray to pyproj

* Reduce aoi size

* revert test to use tmp path

* Update return types for tool to ensure state gets updated

* Mark naip test as xfail

* Fix geom creation

---------

Co-authored-by: lillythomas <lillyelizathomas@gmail.com>
Co-authored-by: Daniel Wiesmann <yellowcap@users.noreply.github.com>
2025-12-05 08:53:04 +00:00

46 lines
1.4 KiB
Python

from pytest import fixture
from geo_assistant.agent.state import GeoAssistantState
from geo_assistant.tools.buffer import get_search_area
from geojson_pydantic import Feature, Point
from langchain_core.tools.base import ToolCall
@fixture
def geo_assistant_fixture():
place_geojson = Feature(
type="Feature",
geometry=Point(type="Point", coordinates=[-9.1393, 38.7223]),
properties={"name": "Neighbourhood Cafe Lisbon"},
)
return GeoAssistantState(
place=place_geojson,
search_area=None,
messages=[],
naip_png_path="path/to/naip.png",
)
async def test_get_search_area(geo_assistant_fixture):
# Call the underlying function directly to test the logic
# This bypasses the injection framework which is better suited for integration tests
command = await get_search_area.ainvoke(
ToolCall(
name="get_search_area",
type="tool_call",
id="test_id_search_area",
args={
"buffer_size_km": 10.0,
"state": geo_assistant_fixture,
"tool_call_id": "test_id_search_area",
},
),
)
# Verify the state was used correctly
assert "search_area" in command.update
assert "messages" in command.update
# Verify the buffer was created around the correct place
search_area = command.update["search_area"]
assert search_area.geometry.type == "Polygon"