import json import tempfile import unittest from pathlib import Path from uuid import UUID from B03_FileInput.B03_FileInput_Router import ( _missing_required_file_types, _write_stage_metadata, ) from B03_FileInput.B03_FileInput_Schema import UploadedFileResult class B03RouterHelperTest(unittest.TestCase): def test_required_file_types_include_planned_route(self) -> None: self.assertEqual( _missing_required_file_types({"las", "prj", "tfw"}), ["csv"], ) self.assertEqual( _missing_required_file_types({"csv", "laz", "prj", "tfw"}), [], ) def test_stage_metadata_preserves_existing_files(self) -> None: project_id = UUID("acb9170b-9ac8-49b3-82a0-51cfa32bb42d") with tempfile.TemporaryDirectory() as temporary_dir: stage_root = Path(temporary_dir) (stage_root / "metadata.json").write_text( json.dumps( { "project_id": str(project_id), "files": [ { "original_filename": "terrain.las", "relative_path": "B03_FileInput/input/las/terrain.las", } ], } ), encoding="utf-8", ) route = UploadedFileResult( input_file_id=100, original_filename="planned_route.csv", file_type="csv", relative_path="B03_FileInput/input/csv/planned_route.csv", size_bytes=1000, metadata={"purpose": "planned_route", "epsg": 5187}, ) _write_stage_metadata(stage_root, project_id, [route]) payload = json.loads((stage_root / "metadata.json").read_text(encoding="utf-8")) self.assertEqual(len(payload["files"]), 2) self.assertEqual(payload["files"][1]["metadata"]["purpose"], "planned_route") if __name__ == "__main__": unittest.main()