3d_model / tests /test_scene_catalog_normalization.py
Azan
Clean deployment build (Squashed)
7a87926
import json
from pathlib import Path
from ylff.services.scene_catalog import (
build_scene_catalog,
validate_scene_catalog,
write_scene_catalog_jsonl,
)
def test_scene_catalog_normalizes_common_manifest_variants(tmp_path: Path):
p = tmp_path / "capture_x"
p.mkdir()
(p / "manifest.json").write_text(
json.dumps(
{
# camelCase + alternative keys
"schemaVersion": "1.0",
"captureId": "cap_x",
"regime": "indoor_constrained",
"difficultyFlags": "mirror, glass",
# devices as dict
"devices": {
"iphone_a": {
"deviceType": "iphone",
"video_path": "devices/iphone_a/video.mov",
"intrinsics_path": "devices/iphone_a/intrinsics.json",
"timestamps_path": "devices/iphone_a/timestamps.json",
}
},
}
)
)
cat = build_scene_catalog([str(p / "manifest.json")])
assert cat.summary["num_scenes"] == 1
sc = cat.scenes[0]
assert sc.capture_id == "cap_x"
assert sc.operating_regime == "indoor_constrained"
assert set(sc.difficulty_flags) == {"mirror", "glass"}
assert sc.num_devices == 1
def test_scene_catalog_can_write_jsonl_and_report(tmp_path: Path):
b1 = tmp_path / "capture_a"
b1.mkdir()
(b1 / "manifest.json").write_text(
json.dumps({"schema_version": "1.0", "capture_id": "cap_a", "devices": []})
)
cat = build_scene_catalog([str(b1 / "manifest.json")])
out_jsonl = tmp_path / "catalog.jsonl"
write_scene_catalog_jsonl(cat, out_jsonl)
txt = out_jsonl.read_text().strip().splitlines()
assert len(txt) == 1
obj = json.loads(txt[0])
assert obj["capture_id"] == "cap_a"
report = validate_scene_catalog(cat)
assert report["num_scenes"] == 1
assert report["no_devices"] == 1
report = validate_scene_catalog(cat)
assert report["num_scenes"] == 1
assert report["no_devices"] == 1