import pytest from app.core.process_steps import StepName from app.domains.rendering.workflow_node_registry import ( get_node_definition, list_node_definitions, ) def test_node_registry_covers_all_step_names(): registered_steps = {definition.step for definition in list_node_definitions()} expected_steps = {step.value for step in StepName} assert registered_steps == expected_steps def test_turntable_node_definition_exposes_expected_schema(): definition = get_node_definition(StepName.BLENDER_TURNTABLE) assert definition is not None assert definition.node_type == "renderFramesNode" assert definition.defaults["fps"] == 24 assert definition.defaults["duration_s"] == 5 assert {field.key for field in definition.fields} >= { "render_engine", "samples", "width", "height", "fps", "duration_s", "rotation_z", } @pytest.mark.asyncio async def test_node_definitions_endpoint_returns_registry(client, auth_headers): response = await client.get("/api/workflows/node-definitions", headers=auth_headers) assert response.status_code == 200 body = response.json() assert len(body["definitions"]) == len(StepName) blender_still = next( definition for definition in body["definitions"] if definition["step"] == StepName.BLENDER_STILL.value ) assert blender_still["node_type"] == "renderNode" assert blender_still["defaults"]["render_engine"] == "cycles" @pytest.mark.asyncio async def test_workflow_crud_roundtrip_preserves_execution_mode(client, auth_headers): create_response = await client.post( "/api/workflows", headers=auth_headers, json={ "name": "Shadow Workflow", "config": { "version": 1, "ui": { "preset": "custom", "execution_mode": "shadow", }, "nodes": [ { "id": "setup", "step": StepName.ORDER_LINE_SETUP.value, "params": {}, } ], "edges": [], }, "is_active": True, }, ) assert create_response.status_code == 201 created = create_response.json() assert created["config"]["ui"]["execution_mode"] == "shadow" get_response = await client.get(f"/api/workflows/{created['id']}", headers=auth_headers) assert get_response.status_code == 200 fetched = get_response.json() assert fetched["config"]["ui"]["execution_mode"] == "shadow"