feat: turntable + blend export smoke test coverage

- build_graph_turntable_config: accept render_params kwarg so smoke can
  use low settings (512x512, 24 frames) without touching golden case defaults
- add smoke naming + template functions for turntable and blend
- add ensure_workflow_turntable_smoke_resources() — provisions output type
  (mp4/turntable_video) + workflow graph, binds to
  Blender_Studio_Schadowcatcher_Anim template
- add ensure_workflow_blend_smoke_resources() — provisions output type
  (blend/blend_asset) + workflow graph, binds to BlenderStudio template
- add test_workflow_turntable_smoke() — preflight + dispatch + run tracking
- add test_workflow_blend_smoke() — preflight + dispatch + blend node check
- 6 new harness unit tests (17 total, all passing), using real asset:
  cad_file_id 8dd73335 (81113-l_cut.stp, has USD master + GLB)

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
This commit is contained in:
2026-07-22 10:17:47 +02:00
co-authored by Claude Sonnet 4.6
parent 44b52d05cc
commit c87857f836
2 changed files with 493 additions and 9 deletions
@@ -227,6 +227,63 @@ def test_workflow_smoke_template_name_maps_supported_modes_to_blenderstudio():
assert module.workflow_smoke_template_name("turntable") is None
def test_smoke_turntable_output_type_name_includes_variant_and_mode():
module = _load_render_pipeline_script()
name = module.smoke_turntable_output_type_name("graph")
assert "Turntable" in name
assert "Graph" in name
assert name.startswith("[Workflow Smoke]")
def test_workflow_smoke_turntable_template_name_returns_animation_template_for_graph():
module = _load_render_pipeline_script()
assert module.workflow_smoke_turntable_template_name("graph") == "Blender_Studio_Schadowcatcher_Anim"
assert module.workflow_smoke_turntable_template_name("shadow") == "Blender_Studio_Schadowcatcher_Anim"
assert module.workflow_smoke_turntable_template_name("legacy") is None
def test_workflow_smoke_blend_template_name_returns_blenderstudio():
module = _load_render_pipeline_script()
assert module.workflow_smoke_blend_template_name() == "BlenderStudio"
def test_build_graph_turntable_config_accepts_render_params_override():
module = _load_render_pipeline_script()
config = module.build_graph_turntable_config(
execution_mode="graph",
render_params={"width": 512, "height": 512, "fps": 12, "duration_s": 2, "samples": 16},
)
turntable_node = next(node for node in config["nodes"] if node["id"] == "turntable")
assert turntable_node["params"]["width"] == 512
assert turntable_node["params"]["height"] == 512
assert turntable_node["params"]["fps"] == 12
assert turntable_node["params"]["duration_s"] == 2
assert turntable_node["params"]["samples"] == 16
def test_build_graph_turntable_config_defaults_unchanged_without_render_params():
module = _load_render_pipeline_script()
config = module.build_graph_turntable_config(execution_mode="graph")
turntable_node = next(node for node in config["nodes"] if node["id"] == "turntable")
assert turntable_node["params"]["width"] == 768
assert turntable_node["params"]["height"] == 768
def test_smoke_blend_output_type_name_is_stable():
module = _load_render_pipeline_script()
assert module.smoke_blend_output_type_name() == "[Workflow Smoke] Blend Export"
assert module.smoke_blend_workflow_name() == "[Workflow Smoke] Blend Export"
def test_ensure_output_type_render_template_binding_moves_output_type_to_preferred_template():
module = _load_render_pipeline_script()