62 lines
2.1 KiB
Python
62 lines
2.1 KiB
Python
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
|
|
|
|
|
|
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 = (root / "frontend" / "src" / "App.tsx").read_text(encoding="utf-8")
|
|
geomap = (root / "frontend" / "src" / "components" / "GeoMap.tsx").read_text(encoding="utf-8")
|
|
map_workspace = (root / "frontend" / "src" / "components" / "map" / "MapWorkspace.tsx").read_text(encoding="utf-8")
|
|
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 "AOI" in map_workspace
|
|
assert "area-fill" in geomap
|
|
assert "area-line" in geomap
|
|
assert "onSelectMapArea" in area_panel
|
|
assert "Show on map" in area_panel
|