from __future__ import annotations from uuid import uuid4 from geoalchemy2.shape import from_shape from shapely.geometry import MultiPolygon, Polygon from app.models import Area from app.services.area_service import AreaService from tests.frontend_contract import read_feature def test_area_serializer_exposes_geojson_geometry_for_map_overlay() -> None: project_id = uuid4() area = Area( id=uuid4(), project_id=project_id, name="Map AOI", original_crs="EPSG:4326", area_m2=100.0, geometry=from_shape( MultiPolygon( [ Polygon( [ (4.35, 51.28), (4.36, 51.28), (4.36, 51.29), (4.35, 51.29), (4.35, 51.28), ], ), ], ), srid=4326, ), ) payload = AreaService.serialize_area(area) assert payload["id"] == area.id assert payload["project_id"] == project_id assert payload["geometry"]["type"] == "MultiPolygon" assert payload["geometry"]["coordinates"][0][0][0] == (4.35, 51.28) def test_frontend_wires_selected_area_map_overlay_contract() -> None: root = __import__("pathlib").Path(__file__).resolve().parents[2] app = read_feature("shell") geomap = (root / "frontend" / "src" / "components" / "GeoMap.tsx").read_text(encoding="utf-8") map_workspace = read_feature("map_workspace") area_panel = (root / "frontend" / "src" / "components" / "project" / "AreaPanel.tsx").read_text(encoding="utf-8") assert "selectedMapAreaId" in app assert "areaFeatureCollection" in app assert "areaFeatureCollection={areaFeatureCollection}" in app assert "areaData={areaFeatureCollection}" in map_workspace assert "Werkgebied" in map_workspace assert "area-fill" in geomap assert "area-line" in geomap assert "onSelectMapArea" in area_panel assert "Toon op kaart" in area_panel