64 lines
2.0 KiB
Python
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
|