feat: extract workflow bbox services phase 3

This commit is contained in:
2026-04-07 09:42:06 +02:00
parent 8f8d2e68b7
commit 9c93ecef49
6 changed files with 172 additions and 54 deletions
@@ -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}
}