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:
Antoine Jacquin
2026-09-27 19:35:28 +02:00
parent 72c50dca99
commit efabf06bc7
6 changed files with 101 additions and 26 deletions

View File

@ -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