Files
HartOMat/backend/tests/test_export_glb_task.py
T

64 lines
2.0 KiB
Python

from __future__ import annotations
import uuid
from pathlib import Path
import app.models # noqa: F401 Ensures SQLAlchemy relationships are registered.
from app.domains.media.models import MediaAsset, MediaAssetType
from app.domains.pipeline.tasks.export_glb import _usd_cache_hit_refresh_reason
from app.domains.products.models import CadFile
def _build_cad_file() -> CadFile:
return CadFile(
id=uuid.uuid4(),
original_name="bearing.step",
stored_path="/tmp/bearing.step",
file_hash=f"hash-{uuid.uuid4().hex}",
resolved_material_assignments={
"inner_ring": {
"source_name": "InnerRing",
"prim_path": "/Root/Assembly/inner_ring",
"canonical_material": "HARTOMAT_010101_Steel-Bare",
}
},
)
def _build_usd_asset() -> MediaAsset:
return MediaAsset(
id=uuid.uuid4(),
cad_file_id=uuid.uuid4(),
asset_type=MediaAssetType.usd_master,
storage_key="step_files/bearing_master.usd",
render_config={
"cache_key": "stephash:0.03:0.05:20.0:materialhash:scriptfingerprint",
},
)
def test_usd_cache_hit_refresh_reason_accepts_binary_usd_without_literal_hartomat_tokens(tmp_path: Path):
cad_file = _build_cad_file()
usd_asset = _build_usd_asset()
usd_path = tmp_path / "bearing_master.usd"
usd_path.write_text("#usda 1.0\n", encoding="utf-8")
refresh_reason = _usd_cache_hit_refresh_reason(cad_file, usd_asset, usd_path)
assert refresh_reason is None
def test_usd_cache_hit_refresh_reason_accepts_current_hartomat_usd(tmp_path: Path):
cad_file = _build_cad_file()
usd_asset = _build_usd_asset()
usd_path = tmp_path / "bearing_master.usd"
usd_path.write_text(
"hartomat:canonicalMaterialName\nhartomat:partKey\n",
encoding="utf-8",
)
refresh_reason = _usd_cache_hit_refresh_reason(cad_file, usd_asset, usd_path)
assert refresh_reason is None