Files
geointel/backend/tests/test_raster_service.py
T
Codex 6ea3586a3e
GeoIntel CI / docs-smoke (push) Has been cancelled
GeoIntel CI / contract-smoke (push) Has been cancelled
Initial GeoIntel V1 foundation
2026-06-16 23:36:32 +02:00

68 lines
2.2 KiB
Python

from app.core.errors import AppError
from app.services.raster_service import extract_raster_metadata
def test_extract_raster_metadata_returns_dependency_aware_error(monkeypatch, tmp_path) -> None:
monkeypatch.setattr("app.services.raster_service._import_rasterio", lambda: (_ for _ in ()).throw(ImportError("rasterio not installed")))
file_path = tmp_path / "missing.tif"
file_path.write_bytes(b"\x00\x01\x02")
try:
extract_raster_metadata(str(file_path))
except AppError as exc:
assert exc.code == "RASTER_PROCESSING_UNAVAILABLE"
else:
raise AssertionError("Missing rasterio should raise AppError code RASTER_PROCESSING_UNAVAILABLE")
def test_extract_raster_metadata_maps_basic_profile_fields(monkeypatch, tmp_path) -> None:
file_path = tmp_path / "sample.tif"
file_path.write_bytes(b"fake")
class FakeDataset:
width = 1024
height = 768
count = 4
driver = "GTiff"
crs = "EPSG:31370"
bounds = (100.0, 200.0, 500.0, 800.0)
res = (0.25, 0.25)
dtypes = ["uint16", "uint16", "uint16", "uint16"]
nodata = -9999
class transform:
@staticmethod
def to_gdal():
return (0.25, 0.0, 100.0, 0.0, -0.25, 800.0, 0.0, 0.0, 1.0)
def __enter__(self):
return self
def __exit__(self, exc_type, exc, tb):
return None
class FakeRasterio:
class errors:
class RasterioIOError(Exception):
...
def open(self, *_):
return FakeDataset()
class FakeErrors:
RasterioIOError = FakeRasterio.errors.RasterioIOError
monkeypatch.setattr("app.services.raster_service._import_rasterio", lambda: (FakeRasterio(), FakeErrors()))
metadata = extract_raster_metadata(str(file_path))
assert metadata["driver"] == "GTiff"
assert metadata["width"] == 1024
assert metadata["height"] == 768
assert metadata["band_count"] == 4
assert metadata["crs"] == "EPSG:31370"
assert metadata["bounds"] == [100.0, 200.0, 500.0, 800.0]
assert metadata["resolution"] == [0.25, 0.25]
assert metadata["dtype"] == ["uint16", "uint16", "uint16", "uint16"]
assert metadata["nodata"] == -9999.0