Promouvoir une dalle voisine déjà téléchargée au lieu de la retélécharger, nettoyer les doublons existants
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
This commit is contained in:
@ -146,6 +146,66 @@ def test_fetch_tiles_downloads_incomplete_tile(tmp_path, monkeypatch):
|
||||
assert [p.name for p in result] == [fetch_ign.tile_filename(1054, 6882)]
|
||||
|
||||
|
||||
def test_fetch_tiles_promotes_edge_neighbor_copy(tmp_path, monkeypatch):
|
||||
"""Une dalle déjà téléchargée comme voisine est déplacée dans input/ sans réseau."""
|
||||
from lidar_pipeline import fetch_ign
|
||||
|
||||
input_dir = tmp_path / "input"
|
||||
input_dir.mkdir()
|
||||
edge_dir = input_dir / "edge_neighbors"
|
||||
edge_dir.mkdir()
|
||||
name = fetch_ign.tile_filename(1055, 6882)
|
||||
neighbor_copy = edge_dir / name
|
||||
neighbor_copy.write_bytes(b"laz-voisine")
|
||||
|
||||
def fail(*args, **kwargs):
|
||||
raise AssertionError("ne doit pas être appelé (pas de réseau attendu)")
|
||||
|
||||
monkeypatch.setattr(fetch_ign, "find_tile_url", fail)
|
||||
monkeypatch.setattr(fetch_ign, "download_file", fail)
|
||||
|
||||
result = fetch_ign.fetch_tiles(input_dir, [(1055, 6882)])
|
||||
|
||||
assert not neighbor_copy.exists()
|
||||
assert (input_dir / name).read_bytes() == b"laz-voisine"
|
||||
assert result == [] # promotion = "skip", comme le cas déjà-présent
|
||||
|
||||
|
||||
def test_fetch_tiles_does_not_promote_when_called_on_edge_dir(tmp_path, monkeypatch):
|
||||
"""Appel avec input_dir=edge_dir (cas _fetch_edge_neighbors) : jamais de promotion."""
|
||||
from lidar_pipeline import fetch_ign
|
||||
|
||||
edge_dir = tmp_path / "input" / "edge_neighbors"
|
||||
edge_dir.mkdir(parents=True)
|
||||
inner_edge = edge_dir / "edge_neighbors"
|
||||
name = fetch_ign.tile_filename(1055, 6882)
|
||||
# Même si un dossier edge_neighbors/edge_neighbors/<name> existait par
|
||||
# accident, il ne doit jamais être déplacé vers edge_dir/<name>.
|
||||
inner_edge.mkdir()
|
||||
(inner_edge / name).write_bytes(b"ne-doit-pas-bouger")
|
||||
|
||||
calls = []
|
||||
|
||||
def fake_find_tile_url(col, row, timeout=20):
|
||||
calls.append((col, row))
|
||||
return "https://example.org/dalle.copc.laz"
|
||||
|
||||
def fake_download(url, dest, timeout=120, chunk=1024 * 1024):
|
||||
from pathlib import Path
|
||||
Path(dest).write_bytes(b"laz")
|
||||
return 3
|
||||
|
||||
monkeypatch.setattr(fetch_ign, "find_tile_url", fake_find_tile_url)
|
||||
monkeypatch.setattr(fetch_ign, "download_file", fake_download)
|
||||
|
||||
result = fetch_ign.fetch_tiles(edge_dir, [(1055, 6882)])
|
||||
|
||||
assert calls == [(1055, 6882)] # téléchargée normalement, pas promue
|
||||
assert (inner_edge / name).read_bytes() == b"ne-doit-pas-bouger"
|
||||
assert (edge_dir / name).read_bytes() == b"laz"
|
||||
assert len(result) == 1
|
||||
|
||||
|
||||
def test_fetch_tiles_force_downloads_complete(tmp_path, monkeypatch):
|
||||
"""force=True télécharge même une tuile complète (régénération avec --force)."""
|
||||
from pathlib import Path
|
||||
|
||||
Reference in New Issue
Block a user