feat: extract workflow bbox services phase 3
This commit is contained in:
@@ -17,6 +17,7 @@ from app.domains.products.models import CadFile, Product
|
||||
from app.domains.rendering.models import OutputType, RenderTemplate
|
||||
from app.domains.rendering.workflow_runtime_services import (
|
||||
auto_populate_materials_for_cad,
|
||||
resolve_cad_bbox,
|
||||
prepare_order_line_render_context,
|
||||
resolve_order_line_material_map,
|
||||
resolve_order_line_template_context,
|
||||
@@ -365,3 +366,68 @@ def test_auto_populate_materials_for_cad_skips_when_materials_already_present(sy
|
||||
{"part_name": "InnerRing", "material": "Steel raw"},
|
||||
{"part_name": "OuterRing", "material": "Steel raw"},
|
||||
]
|
||||
|
||||
|
||||
def test_resolve_cad_bbox_prefers_glb_over_step(monkeypatch):
|
||||
monkeypatch.setattr(
|
||||
"app.domains.rendering.workflow_runtime_services.extract_bbox_from_glb",
|
||||
lambda path: {
|
||||
"dimensions_mm": {"x": 10.0, "y": 20.0, "z": 30.0},
|
||||
"bbox_center_mm": {"x": 1.0, "y": 2.0, "z": 3.0},
|
||||
},
|
||||
)
|
||||
monkeypatch.setattr(
|
||||
"app.domains.rendering.workflow_runtime_services.extract_bbox_from_step_cadquery",
|
||||
lambda path: {
|
||||
"dimensions_mm": {"x": 100.0, "y": 200.0, "z": 300.0},
|
||||
"bbox_center_mm": {"x": 10.0, "y": 20.0, "z": 30.0},
|
||||
},
|
||||
)
|
||||
|
||||
result = resolve_cad_bbox("/tmp/model.step", glb_path="/tmp/model_thumbnail.glb")
|
||||
|
||||
assert result.source_kind == "glb"
|
||||
assert result.bbox_data == {
|
||||
"dimensions_mm": {"x": 10.0, "y": 20.0, "z": 30.0},
|
||||
"bbox_center_mm": {"x": 1.0, "y": 2.0, "z": 3.0},
|
||||
}
|
||||
|
||||
|
||||
def test_resolve_cad_bbox_falls_back_to_step(monkeypatch):
|
||||
monkeypatch.setattr(
|
||||
"app.domains.rendering.workflow_runtime_services.extract_bbox_from_glb",
|
||||
lambda path: None,
|
||||
)
|
||||
monkeypatch.setattr(
|
||||
"app.domains.rendering.workflow_runtime_services.extract_bbox_from_step_cadquery",
|
||||
lambda path: {
|
||||
"dimensions_mm": {"x": 100.0, "y": 200.0, "z": 300.0},
|
||||
"bbox_center_mm": {"x": 10.0, "y": 20.0, "z": 30.0},
|
||||
},
|
||||
)
|
||||
|
||||
result = resolve_cad_bbox("/tmp/model.step", glb_path="/tmp/model_thumbnail.glb")
|
||||
|
||||
assert result.source_kind == "step"
|
||||
assert result.bbox_data == {
|
||||
"dimensions_mm": {"x": 100.0, "y": 200.0, "z": 300.0},
|
||||
"bbox_center_mm": {"x": 10.0, "y": 20.0, "z": 30.0},
|
||||
}
|
||||
|
||||
|
||||
def test_extract_metadata_bbox_wrappers_delegate_to_runtime_services(monkeypatch):
|
||||
from app.domains.pipeline.tasks.extract_metadata import _bbox_from_glb, _bbox_from_step_cadquery
|
||||
|
||||
monkeypatch.setattr(
|
||||
"app.domains.rendering.workflow_runtime_services.extract_bbox_from_glb",
|
||||
lambda path: {"dimensions_mm": {"x": 1.0, "y": 2.0, "z": 3.0}},
|
||||
)
|
||||
monkeypatch.setattr(
|
||||
"app.domains.rendering.workflow_runtime_services.extract_bbox_from_step_cadquery",
|
||||
lambda path: {"dimensions_mm": {"x": 4.0, "y": 5.0, "z": 6.0}},
|
||||
)
|
||||
|
||||
assert _bbox_from_glb("/tmp/a.glb") == {"dimensions_mm": {"x": 1.0, "y": 2.0, "z": 3.0}}
|
||||
assert _bbox_from_step_cadquery("/tmp/a.step") == {
|
||||
"dimensions_mm": {"x": 4.0, "y": 5.0, "z": 6.0}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user