85 lines
2.6 KiB
Python
85 lines
2.6 KiB
Python
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"
|