diff options
| author | Felix Morgner <felix.morgner@gmail.com> | 2026-10-17 12:52:42 +0200 |
|---|---|---|
| committer | Felix Morgner <felix.morgner@gmail.com> | 2026-10-17 12:52:42 +0200 |
| commit | 5edb6e2fd048f369828984aaae6f7ce83d683201 (patch) | |
| tree | 50de87735605b4936d0378754c3d51602e8f0c20 /tests/test_generate.py | |
| parent | 3f88638e4d1c380d730274f46bac6670b1c6a35e (diff) | |
| download | comfier-5edb6e2fd048f369828984aaae6f7ce83d683201.tar.xz comfier-5edb6e2fd048f369828984aaae6f7ce83d683201.zip | |
claude: improved dev-setup
Diffstat (limited to 'tests/test_generate.py')
| -rw-r--r-- | tests/test_generate.py | 93 |
1 files changed, 93 insertions, 0 deletions
diff --git a/tests/test_generate.py b/tests/test_generate.py new file mode 100644 index 0000000..37dda32 --- /dev/null +++ b/tests/test_generate.py @@ -0,0 +1,93 @@ +import asyncio +from collections.abc import Callable +from types import SimpleNamespace +from typing import Any + +import pytest + +from tests.conftest import FakeComfy + + +async def _run(tools: Any, **kw: Any) -> tuple[dict[str, Any], list[dict[str, Any]]]: + events: list[dict[str, Any]] = [] + + async def emit(e: dict[str, Any]) -> None: + events.append(e) + + result = await tools.comfier_generate_image( + positive_prompt="a marble", + seed="5", + size="64x64", + __request__=SimpleNamespace(), + __user__={"id": "u"}, + __event_emitter__=emit, + **kw, + ) + return result, events + + +async def test_success(make_tools: Callable[[], Any], comfy: FakeComfy) -> None: + tools, env = make_tools() + result, events = await _run(tools) + assert result["status"] == "success" + assert len(result["images"]) == 1 and len(env.stored) == 1 + assert comfy.submitted[0]["520:517"]["inputs"]["seed"] == 5 + assert comfy.submitted[0]["520:518"]["inputs"]["value"] == 64 + assert events[-1]["type"] == "files" + + +async def test_execution_error(make_tools: Callable[[], Any], comfy: FakeComfy) -> None: + comfy.script = [ + { + "type": "execution_error", + "data": {"prompt_id": "pid-1", "exception_message": "boom"}, + } + ] + tools, _ = make_tools() + with pytest.raises(RuntimeError, match="boom"): + await _run(tools) + + +async def test_ws_drop_retry_declined( + make_tools: Callable[[], Any], comfy: FakeComfy +) -> None: + comfy.drop_ws = True + tools, _ = make_tools() + asked: list[dict[str, Any]] = [] + + async def call(e: dict[str, Any]) -> bool: + asked.append(e) + return False + + with pytest.raises(ConnectionError): + await _run(tools, __event_call__=call) + assert len(asked) == 1 + + +async def test_ws_drop_retry_accepted( + make_tools: Callable[[], Any], comfy: FakeComfy +) -> None: + comfy.drop_ws = True + tools, _ = make_tools() + + async def call(e: dict[str, Any]) -> bool: + comfy.drop_ws = False + return True + + result, _ = await _run(tools, __event_call__=call) + assert result["status"] == "success" + + +async def test_cancel_interrupts_backend( + make_tools: Callable[[], Any], comfy: FakeComfy +) -> None: + comfy.hang = True + tools, _ = make_tools() + task = asyncio.create_task(_run(tools)) + while not comfy.submitted: + await asyncio.sleep(0.05) + await asyncio.sleep(0.1) + task.cancel() + with pytest.raises(asyncio.CancelledError): + await task + assert comfy.interrupts == [{"prompt_id": "pid-1"}] |
