Files
HartOMat/backend/tests/domains/test_workflow_node_registry.py
T

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"