"""Test workflow validation utilities."""
import pytest
from comfyui_mcp_server.workflow_utils import normalize_workflow, apply_dryrun_overrides
class TestNormalizeWorkflow:
"""Tests for normalize_workflow function."""
def test_raw_prompt(self):
"""Raw prompt dict should pass through unchanged."""
prompt = {"1": {"class_type": "KSampler", "inputs": {}}}
result = normalize_workflow(prompt)
assert result == prompt
def test_wrapped_prompt(self):
"""Wrapped prompt should be unwrapped."""
inner = {"1": {"class_type": "KSampler", "inputs": {}}}
wrapped = {"prompt": inner}
result = normalize_workflow(wrapped)
assert result == inner
def test_non_dict_raises(self):
"""Non-dict input should raise TypeError."""
with pytest.raises(TypeError):
normalize_workflow("not a dict")
with pytest.raises(TypeError):
normalize_workflow(None)
class TestApplyDryrunOverrides:
"""Tests for apply_dryrun_overrides function."""
def test_no_override(self):
"""With steps=None, prompt should be unchanged."""
prompt = {"1": {"class_type": "KSampler", "inputs": {"steps": 20}}}
result = apply_dryrun_overrides(prompt, steps=None)
assert result["1"]["inputs"]["steps"] == 20
def test_clamp_steps(self):
"""Steps should be clamped to override value."""
prompt = {"1": {"class_type": "KSampler", "inputs": {"steps": 20}}}
result = apply_dryrun_overrides(prompt, steps=2)
assert result["1"]["inputs"]["steps"] == 2
def test_steps_already_lower(self):
"""Steps lower than override should stay lower."""
prompt = {"1": {"class_type": "KSampler", "inputs": {"steps": 1}}}
result = apply_dryrun_overrides(prompt, steps=5)
assert result["1"]["inputs"]["steps"] == 1
def test_non_ksampler_unchanged(self):
"""Non-KSampler nodes should be unchanged."""
prompt = {"1": {"class_type": "CLIPTextEncode", "inputs": {"text": "hello"}}}
result = apply_dryrun_overrides(prompt, steps=2)
assert result == prompt
def test_does_not_mutate_original(self):
"""Original prompt should not be mutated."""
prompt = {"1": {"class_type": "KSampler", "inputs": {"steps": 20}}}
result = apply_dryrun_overrides(prompt, steps=2)
assert prompt["1"]["inputs"]["steps"] == 20
assert result["1"]["inputs"]["steps"] == 2