项目文件夹

文件
wehub-resource-sync 2c632336aa
CI / Viewer CI (push) Successful in 13m37s
CI / Core CI (push) Has been cancelled
chore: import upstream snapshot with attribution
2026-07-13 12:32:38 +08:00

109 行
3.9 KiB
Python

from __future__ import annotations
import pytest
from storage.materialize import (
build_materialization_summary,
build_model_source_snapshot,
compile_report_matches_model_source_snapshot,
ensure_record_artifacts_exist,
infer_materialization_status,
)
from storage.repo import StorageRepo
def test_infer_materialization_status_marks_primitive_only_success_as_available(
tmp_path,
) -> None:
repo = StorageRepo(tmp_path)
repo.ensure_layout()
record_id = "rec_primitive"
materialization_dir = repo.layout.record_materialization_dir(record_id)
materialization_dir.mkdir(parents=True, exist_ok=True)
(materialization_dir / "model.urdf").write_text(
"<robot name='primitive'><link name='base'><visual><geometry><box size='1 1 1'/></geometry></visual></link></robot>",
encoding="utf-8",
)
status = infer_materialization_status(repo, record_id)
assert status == "available"
def test_infer_materialization_status_keeps_mesh_backed_urdf_missing_without_assets(
tmp_path,
) -> None:
repo = StorageRepo(tmp_path)
repo.ensure_layout()
record_id = "rec_mesh"
materialization_dir = repo.layout.record_materialization_dir(record_id)
materialization_dir.mkdir(parents=True, exist_ok=True)
(materialization_dir / "model.urdf").write_text(
"<robot name='mesh'><link name='base'><visual><geometry><mesh filename='assets/meshes/base.obj'/></geometry></visual></link></robot>",
encoding="utf-8",
)
status = infer_materialization_status(repo, record_id)
assert status == "missing"
def test_ensure_record_artifacts_exist_raises_for_missing_canonical_files(tmp_path) -> None:
repo = StorageRepo(tmp_path)
repo.ensure_layout()
record_id = "rec_broken"
record_dir = repo.layout.record_dir(record_id)
record_dir.mkdir(parents=True, exist_ok=True)
(record_dir / "record.json").write_text(
'{"artifacts":{"model_py":"model.py","provenance_json":"provenance.json"}}',
encoding="utf-8",
)
(record_dir / "provenance.json").write_text("{}", encoding="utf-8")
with pytest.raises(FileNotFoundError, match="missing canonical artifact"):
ensure_record_artifacts_exist(
repo,
record_id,
required=("model_py", "provenance_json"),
)
def test_compile_report_matches_model_source_snapshot_round_trips(tmp_path) -> None:
model_path = tmp_path / "model.py"
model_path.write_text("object_model = None\n", encoding="utf-8")
report = {"metrics": build_model_source_snapshot(model_path=model_path)}
assert compile_report_matches_model_source_snapshot(report, model_path=model_path) is True
model_path.write_text("UPDATED = True\nobject_model = None\n", encoding="utf-8")
assert compile_report_matches_model_source_snapshot(report, model_path=model_path) is False
def test_build_materialization_summary_reports_visual_mesh_footprint(tmp_path) -> None:
repo = StorageRepo(tmp_path)
repo.ensure_layout()
record_id = "rec_summary"
materialization_dir = repo.layout.record_materialization_dir(record_id)
meshes_dir = repo.layout.record_materialization_asset_meshes_dir(record_id)
collision_dir = meshes_dir / "collision"
collision_dir.mkdir(parents=True, exist_ok=True)
meshes_dir.mkdir(parents=True, exist_ok=True)
(materialization_dir / "model.urdf").write_text(
"<robot name='mesh'><link name='base'><visual><geometry><mesh filename='assets/meshes/base.obj'/></geometry></visual></link></robot>",
encoding="utf-8",
)
(meshes_dir / "base.obj").write_text("v 0 0 0\n", encoding="utf-8")
(collision_dir / "skip.obj").write_text("v 1 1 1\n", encoding="utf-8")
summary = build_materialization_summary(repo, record_id)
assert summary["materialization_status"] == "available"
assert summary["visual_mesh_file_count"] == 1
assert summary["visual_mesh_bytes"] == len("v 0 0 0\n".encode("utf-8"))