Remplacer le mode « les deux » par « comparer » et servir le texte « Comment lire » à la carte et au PDF
Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
This commit is contained in:
@ -148,6 +148,24 @@ def test_pdf_text_replaces_unencodable():
|
||||
assert _pdf_text("Relief orienté — 1:2 000 ≥ 🚀") == "Relief orienté — 1:2 000 ? ?"
|
||||
|
||||
|
||||
def test_pdf_legend_uses_reading_text(monkeypatch):
|
||||
"""La légende de la planche PDF affiche le texte « Comment lire » de
|
||||
VIZ_LEGENDS, habillé à la largeur de la boîte, plutôt que « legend »."""
|
||||
from lidar_pipeline import export_pdf
|
||||
from lidar_pipeline.index import VIZ_LEGENDS
|
||||
drawn = []
|
||||
|
||||
class FakeCanvas:
|
||||
def __getattr__(self, name):
|
||||
def rec(*a, **k):
|
||||
if name in ("drawString", "drawCentredString", "drawRightString"):
|
||||
drawn.append(a[-1])
|
||||
return rec
|
||||
export_pdf._draw_legend(FakeCanvas(), (0, 0, 80, 200), 1.0)
|
||||
first = export_pdf._pdf_text(VIZ_LEGENDS[export_pdf.LAYER]["reading"][0][:20])
|
||||
assert any(first in s for s in drawn)
|
||||
|
||||
|
||||
def _q(density, start="2023-03-15", end="2023-03-17", empty=0.1):
|
||||
return {"version": 1, "ground_density": density,
|
||||
"density_grid": [[density] * 20 for _ in range(20)],
|
||||
|
||||
@ -380,21 +380,20 @@ def test_defaults_roundtrip(tmp_path, monkeypatch):
|
||||
assert meta["default_main"] == "relief_oriente"
|
||||
assert meta["precision_layer"] == "densite_sol"
|
||||
assert meta["default_mode"] == "relief"
|
||||
assert meta["default_precision_opacity"] == 0.6
|
||||
assert "default_precision_opacity" not in meta
|
||||
|
||||
req = mapserve.DefaultsRequest(main="aspect", mode="both", precision_opacity=0.4,
|
||||
req = mapserve.DefaultsRequest(main="aspect", mode="compare",
|
||||
base={"on": True, "opacity": 0.4, "dark": False})
|
||||
assert mapserve.set_defaults(req)["enregistré"] is True
|
||||
|
||||
meta = mapserve.map_meta()
|
||||
assert meta["defaults_saved"] is True
|
||||
assert meta["default_main"] == "aspect"
|
||||
assert meta["default_mode"] == "both"
|
||||
assert meta["default_precision_opacity"] == 0.4
|
||||
assert meta["default_mode"] == "compare"
|
||||
assert meta["default_base"] == {"on": True, "opacity": 0.4, "dark": False}
|
||||
# Persisté sur disque : survit au redémarrage du conteneur
|
||||
assert (tmp_path / ".map-defaults.json").is_file()
|
||||
assert mapserve.get_defaults()["defaults"]["mode"] == "both"
|
||||
assert mapserve.get_defaults()["defaults"]["mode"] == "compare"
|
||||
|
||||
# Retrait : retour aux réglages du registre
|
||||
assert mapserve.clear_defaults()["supprimé"] is True
|
||||
@ -428,11 +427,11 @@ def test_defaults_sanitised(tmp_path, monkeypatch):
|
||||
_setup(tmp_path, monkeypatch, layers=("relief_oriente", "densite_sol"))
|
||||
monkeypatch.setattr(mapserve, "DEFAULTS_FILE", tmp_path / ".map-defaults.json")
|
||||
data = mapserve.set_defaults(mapserve.DefaultsRequest(
|
||||
main="inexistante", mode="vaudou", precision_opacity=5,
|
||||
main="inexistante", mode="vaudou",
|
||||
base={"opacity": -3}))["defaults"]
|
||||
assert data["main"] is None
|
||||
assert data["mode"] == "relief"
|
||||
assert data["precision_opacity"] == 1.0 # borné à 1
|
||||
assert "precision_opacity" not in data
|
||||
assert data["base"]["opacity"] == 0.0 # borné à 0
|
||||
data = mapserve.set_defaults(mapserve.DefaultsRequest(main="densite_sol"))["defaults"]
|
||||
assert data["main"] is None # la précision n'est pas une principale
|
||||
@ -475,6 +474,41 @@ def test_defaults_legacy_dark_true_becomes_unset(tmp_path, monkeypatch):
|
||||
assert meta["default_base"]["opacity"] == 0.85
|
||||
|
||||
|
||||
def test_view_modes_compare_and_legacy_both(tmp_path, monkeypatch):
|
||||
"""« both » (ancien mode « les deux ») disparaît de VIEW_MODES au profit de
|
||||
« compare » ; un fichier ou une requête l'envoyant encore est lu comme
|
||||
« relief » (precision_opacity accepté pour compatibilité, mais ignoré)."""
|
||||
import lidar_pipeline.mapserve as mapserve
|
||||
_setup(tmp_path, monkeypatch, layers=("relief_oriente", "densite_sol"))
|
||||
from lidar_pipeline.index import VIEW_MODES
|
||||
assert VIEW_MODES == ('relief', 'precision', 'compare')
|
||||
monkeypatch.setattr(mapserve, "DEFAULTS_FILE", tmp_path / ".map-defaults.json")
|
||||
# Ancien défaut figé « both » : lu comme relief
|
||||
mapserve.DEFAULTS_FILE.parent.mkdir(parents=True, exist_ok=True)
|
||||
mapserve.DEFAULTS_FILE.write_text('{"mode": "both", "precision_opacity": 0.6}', encoding="utf-8")
|
||||
meta = mapserve.map_meta()
|
||||
assert meta["default_mode"] == "relief"
|
||||
assert "default_precision_opacity" not in meta
|
||||
# Ancienne page encore ouverte : precision_opacity accepté, ignoré
|
||||
req = mapserve.DefaultsRequest(main=None, mode="both", precision_opacity=0.4, base={})
|
||||
assert mapserve._sanitize_defaults(req)["mode"] == "relief"
|
||||
assert "precision_opacity" not in mapserve._sanitize_defaults(req)
|
||||
req = mapserve.DefaultsRequest(main=None, mode="compare", base={})
|
||||
assert mapserve._sanitize_defaults(req)["mode"] == "compare"
|
||||
|
||||
|
||||
def test_meta_serves_reading_text(tmp_path, monkeypatch):
|
||||
"""/api/map/meta sert le texte « Comment lire » de chaque couche."""
|
||||
import lidar_pipeline.mapserve as mapserve
|
||||
_setup(tmp_path, monkeypatch, layers=("relief_oriente", "densite_sol"))
|
||||
layers = {l["key"]: l for l in mapserve.map_meta()["layers"]}
|
||||
reading = layers["relief_oriente"]["reading"]
|
||||
assert isinstance(reading, list) and len(reading) >= 3
|
||||
text = " ".join(reading)
|
||||
assert "aucun point sol" in text and "1,5" in text and "1 m" in text
|
||||
assert layers["densite_sol"]["reading"]
|
||||
|
||||
|
||||
def test_ui_applies_server_defaults():
|
||||
"""L'interface part des défauts du serveur et sait les (re)définir."""
|
||||
from lidar_pipeline.mapui import _MAP_HTML, _MAP_JS
|
||||
|
||||
Reference in New Issue
Block a user