import json from pathlib import Path from ylff.utils.capture_bundle import CaptureBundle def test_load_detailed_annotation_returns_model(tmp_path: Path): (tmp_path / "devices" / "iphone_a").mkdir(parents=True) (tmp_path / "annotations").mkdir(parents=True) (tmp_path / "devices" / "iphone_a" / "video.mov").write_bytes(b"x") (tmp_path / "devices" / "iphone_a" / "intrinsics.json").write_text( json.dumps({"fx": 100.0, "fy": 100.0, "cx": 4.0, "cy": 4.0}) ) (tmp_path / "devices" / "iphone_a" / "timestamps.json").write_text(json.dumps({"t": []})) ann = { "schema_version": "1.0", "capture_id": "cap_001", "segments": [], "scene_metadata": {"primary_type": "RESIDENTIAL_KITCHEN"}, "quality_assessment": {"rating": "good"}, } (tmp_path / "annotations" / "detailed_annotation.json").write_text(json.dumps(ann)) manifest = { "schema_version": "1.0", "capture_id": "cap_001", "devices": [ { "device_id": "iphone_a", "device_type": "iphone", "video_path": "devices/iphone_a/video.mov", "intrinsics_path": "devices/iphone_a/intrinsics.json", "timestamps_path": "devices/iphone_a/timestamps.json", } ], "annotations": {"detailed_annotation_path": "annotations/detailed_annotation.json"}, } (tmp_path / "manifest.json").write_text(json.dumps(manifest)) bundle = CaptureBundle.load(tmp_path) loaded = bundle.load_detailed_annotation() assert loaded is not None assert loaded.capture_id == "cap_001"