"""Tests for pipeline orchestration.""" import pytest from pathlib import Path class TestVizSteps: def test_viz_steps_not_empty(self): from lidar_pipeline.pipeline import VIZ_STEPS assert len(VIZ_STEPS) > 0 def test_viz_steps_have_callable_functions(self): from lidar_pipeline.pipeline import VIZ_STEPS for name, func in VIZ_STEPS: assert callable(func), f"VIZ_STEPS entry '{name}' is not callable" def test_viz_steps_names_unique(self): from lidar_pipeline.pipeline import VIZ_STEPS names = [name for name, _ in VIZ_STEPS] assert len(names) == len(set(names)), "VIZ_STEPS has duplicate names" def test_no_solar_in_viz_steps(self): """Solar visualization was removed.""" from lidar_pipeline.pipeline import VIZ_STEPS names = [name for name, _ in VIZ_STEPS] assert "solar" not in names def test_expected_visualization_count(self): """Should have 17 visualizations (15 terrain + ortho + topo).""" from lidar_pipeline.pipeline import VIZ_STEPS assert len(VIZ_STEPS) == 17 def test_ortho_and_topo_present(self): from lidar_pipeline.pipeline import VIZ_STEPS names = [name for name, _ in VIZ_STEPS] assert "ortho" in names assert "topo" in names class TestLidarArchaeoPipeline: def test_init_creates_dirs(self, tmp_path): from lidar_pipeline.pipeline import LidarArchaeoPipeline input_dir = tmp_path / "input" input_dir.mkdir() output_dir = tmp_path / "output" pipeline = LidarArchaeoPipeline(str(input_dir), str(output_dir)) assert (tmp_path / "output").exists() assert (tmp_path / "output" / "DTM").exists() assert (tmp_path / "output" / "visualisations").exists() assert (tmp_path / "output" / "rapports").exists() def test_init_raises_on_missing_input(self, tmp_path): from lidar_pipeline.pipeline import LidarArchaeoPipeline with pytest.raises(ValueError, match="introuvable"): LidarArchaeoPipeline("/nonexistent/path", str(tmp_path / "output")) def test_find_laz_files_empty(self, tmp_path): from lidar_pipeline.pipeline import LidarArchaeoPipeline input_dir = tmp_path / "input" input_dir.mkdir() pipeline = LidarArchaeoPipeline(str(input_dir), str(tmp_path / "output")) files = pipeline.find_laz_files() assert files == [] def test_find_laz_files(self, tmp_path): from lidar_pipeline.pipeline import LidarArchaeoPipeline input_dir = tmp_path / "input" input_dir.mkdir() (input_dir / "test.laz").touch() (input_dir / "other.las").touch() (input_dir / "readme.txt").touch() pipeline = LidarArchaeoPipeline(str(input_dir), str(tmp_path / "output")) files = pipeline.find_laz_files() names = [f.name for f in files] assert "test.laz" in names assert "other.las" in names assert "readme.txt" not in names