chore: snapshot workflow migration progress
This commit is contained in:
@@ -0,0 +1,203 @@
|
||||
from types import SimpleNamespace
|
||||
|
||||
from app.services.part_key_service import build_scene_manifest, get_effective_assignments
|
||||
|
||||
|
||||
def test_build_scene_manifest_prefers_canonical_material_from_resolved_assignments():
|
||||
cad_file = SimpleNamespace(
|
||||
id="cad-1",
|
||||
resolved_material_assignments={
|
||||
"roller_part": {
|
||||
"source_name": "KERO_Z-575693-QP-DRH_ISB_1_1",
|
||||
"prim_path": "/Root/Assembly/roller_part",
|
||||
"canonical_material": "HARTOMAT_010101_Steel-Bare",
|
||||
}
|
||||
},
|
||||
manual_material_overrides=None,
|
||||
source_material_assignments=None,
|
||||
parsed_objects=None,
|
||||
)
|
||||
|
||||
manifest = build_scene_manifest(cad_file)
|
||||
|
||||
assert manifest["parts"] == [
|
||||
{
|
||||
"part_key": "roller_part",
|
||||
"source_name": "KERO_Z-575693-QP-DRH_ISB_1_1",
|
||||
"prim_path": "/Root/Assembly/roller_part",
|
||||
"effective_material": "HARTOMAT_010101_Steel-Bare",
|
||||
"assignment_provenance": "auto",
|
||||
"is_unassigned": False,
|
||||
}
|
||||
]
|
||||
assert manifest["unassigned_parts"] == []
|
||||
assert get_effective_assignments(cad_file) == {
|
||||
"roller_part": "HARTOMAT_010101_Steel-Bare",
|
||||
}
|
||||
|
||||
|
||||
def test_build_scene_manifest_normalizes_legacy_schaeffler_material_names():
|
||||
cad_file = SimpleNamespace(
|
||||
id="cad-legacy",
|
||||
resolved_material_assignments={
|
||||
"roller_part": {
|
||||
"source_name": "KERO_Z-575693-QP-DRH_ISB_1_1",
|
||||
"prim_path": "/Root/Assembly/roller_part",
|
||||
"canonical_material": "SCHAEFFLER_010101_Steel-Bare",
|
||||
}
|
||||
},
|
||||
manual_material_overrides={"manual_part": "SCHAEFFLER_020101_Durotect-Blue"},
|
||||
source_material_assignments={"roller": "SCHAEFFLER_030103_Elastomer-Black"},
|
||||
parsed_objects=None,
|
||||
)
|
||||
|
||||
manifest = build_scene_manifest(cad_file)
|
||||
|
||||
assert manifest["parts"] == [
|
||||
{
|
||||
"part_key": "roller_part",
|
||||
"source_name": "KERO_Z-575693-QP-DRH_ISB_1_1",
|
||||
"prim_path": "/Root/Assembly/roller_part",
|
||||
"effective_material": "HARTOMAT_010101_Steel-Bare",
|
||||
"assignment_provenance": "auto",
|
||||
"is_unassigned": False,
|
||||
}
|
||||
]
|
||||
assert get_effective_assignments(cad_file) == {
|
||||
"roller_part": "HARTOMAT_010101_Steel-Bare",
|
||||
}
|
||||
|
||||
|
||||
def test_build_scene_manifest_adds_semantic_alias_for_deduplicated_instance_keys():
|
||||
cad_file = SimpleNamespace(
|
||||
id="cad-alias",
|
||||
resolved_material_assignments={
|
||||
"roller_part_2": {
|
||||
"source_name": "RollerPart",
|
||||
"prim_path": "/Root/Assembly/roller_part_2",
|
||||
"canonical_material": "HARTOMAT_010101_Steel-Bare",
|
||||
}
|
||||
},
|
||||
manual_material_overrides=None,
|
||||
source_material_assignments=None,
|
||||
parsed_objects=None,
|
||||
)
|
||||
|
||||
manifest = build_scene_manifest(cad_file)
|
||||
|
||||
assert manifest["parts"] == [
|
||||
{
|
||||
"part_key": "roller_part_2",
|
||||
"source_name": "RollerPart",
|
||||
"prim_path": "/Root/Assembly/roller_part_2",
|
||||
"effective_material": "HARTOMAT_010101_Steel-Bare",
|
||||
"assignment_provenance": "auto",
|
||||
"is_unassigned": False,
|
||||
},
|
||||
{
|
||||
"part_key": "roller_part",
|
||||
"source_name": "RollerPart",
|
||||
"prim_path": "/Root/Assembly/roller_part_2",
|
||||
"effective_material": "HARTOMAT_010101_Steel-Bare",
|
||||
"assignment_provenance": "auto",
|
||||
"is_unassigned": False,
|
||||
},
|
||||
]
|
||||
assert manifest["unassigned_parts"] == []
|
||||
assert get_effective_assignments(cad_file) == {
|
||||
"roller_part_2": "HARTOMAT_010101_Steel-Bare",
|
||||
"roller_part": "HARTOMAT_010101_Steel-Bare",
|
||||
}
|
||||
|
||||
|
||||
def test_build_scene_manifest_skips_alias_when_canonical_key_already_exists():
|
||||
cad_file = SimpleNamespace(
|
||||
id="cad-existing-alias",
|
||||
resolved_material_assignments={
|
||||
"roller_part": {
|
||||
"source_name": "RollerPart",
|
||||
"prim_path": "/Root/Assembly/roller_part",
|
||||
"canonical_material": "HARTOMAT_010101_Steel-Bare",
|
||||
},
|
||||
"roller_part_2": {
|
||||
"source_name": "RollerPart",
|
||||
"prim_path": "/Root/Assembly/roller_part_2",
|
||||
"canonical_material": "HARTOMAT_020202_Steel-Bare",
|
||||
},
|
||||
},
|
||||
manual_material_overrides=None,
|
||||
source_material_assignments=None,
|
||||
parsed_objects=None,
|
||||
)
|
||||
|
||||
manifest = build_scene_manifest(cad_file)
|
||||
|
||||
assert [part["part_key"] for part in manifest["parts"]] == [
|
||||
"roller_part",
|
||||
"roller_part_2",
|
||||
]
|
||||
assert get_effective_assignments(cad_file) == {
|
||||
"roller_part": "HARTOMAT_010101_Steel-Bare",
|
||||
"roller_part_2": "HARTOMAT_020202_Steel-Bare",
|
||||
}
|
||||
|
||||
|
||||
def test_build_scene_manifest_alias_inherits_leaf_manual_override():
|
||||
cad_file = SimpleNamespace(
|
||||
id="cad-manual-alias",
|
||||
resolved_material_assignments={
|
||||
"roller_part_3": {
|
||||
"source_name": "RollerPart",
|
||||
"prim_path": "/Root/Assembly/roller_part_3",
|
||||
"canonical_material": "HARTOMAT_010101_Steel-Bare",
|
||||
}
|
||||
},
|
||||
manual_material_overrides={
|
||||
"roller_part_3": "SCHAEFFLER_020101_Durotect-Blue",
|
||||
},
|
||||
source_material_assignments=None,
|
||||
parsed_objects=None,
|
||||
)
|
||||
|
||||
manifest = build_scene_manifest(cad_file)
|
||||
alias_part = next(part for part in manifest["parts"] if part["part_key"] == "roller_part")
|
||||
|
||||
assert alias_part == {
|
||||
"part_key": "roller_part",
|
||||
"source_name": "RollerPart",
|
||||
"prim_path": "/Root/Assembly/roller_part_3",
|
||||
"effective_material": "HARTOMAT_020101_Durotect-Blue",
|
||||
"assignment_provenance": "manual",
|
||||
"is_unassigned": False,
|
||||
}
|
||||
assert get_effective_assignments(cad_file) == {
|
||||
"roller_part_3": "HARTOMAT_020101_Durotect-Blue",
|
||||
"roller_part": "HARTOMAT_020101_Durotect-Blue",
|
||||
}
|
||||
|
||||
|
||||
def test_build_scene_manifest_adds_semantic_alias_for_exporter_af_suffix_keys():
|
||||
cad_file = SimpleNamespace(
|
||||
id="cad-af-alias",
|
||||
resolved_material_assignments={
|
||||
"kero_z_575693_qp_drh_isb_1_af6": {
|
||||
"source_name": "KERO_Z-575693-QP-DRH_ISB_1_AF6_",
|
||||
"prim_path": "/Root/Assembly/kero_z_575693_qp_drh_isb_1_af6",
|
||||
"canonical_material": "HARTOMAT_010101_Steel-Bare",
|
||||
}
|
||||
},
|
||||
manual_material_overrides=None,
|
||||
source_material_assignments=None,
|
||||
parsed_objects=None,
|
||||
)
|
||||
|
||||
manifest = build_scene_manifest(cad_file)
|
||||
|
||||
assert [part["part_key"] for part in manifest["parts"]] == [
|
||||
"kero_z_575693_qp_drh_isb_1_af6",
|
||||
"kero_z_575693_qp_drh_isb_1",
|
||||
]
|
||||
assert get_effective_assignments(cad_file) == {
|
||||
"kero_z_575693_qp_drh_isb_1_af6": "HARTOMAT_010101_Steel-Bare",
|
||||
"kero_z_575693_qp_drh_isb_1": "HARTOMAT_010101_Steel-Bare",
|
||||
}
|
||||
Reference in New Issue
Block a user