Ctrl K
ComunidadGuías…

tests/test_agent_runs_terminal_order.py

Rama dev · réplica de lectura del repositorio original.

Archivo original ↗Preguntar a KiBot
import asyncio

from src import agent_runs


def test_done_is_published_only_after_generator_cleanup():
    async def scenario():
        session_id = "terminal-order-test"
        cleanup_finished = asyncio.Event()

        async def stream():
            yield 'data: {"delta":"answer"}\n\n'
            yield "data: [DONE]\n\n"
            await asyncio.sleep(0)
            cleanup_finished.set()

        run = agent_runs.start(session_id, stream())
        received = []
        async for event in agent_runs.subscribe(session_id, run):
            received.append(event)
            if event.strip() == "data: [DONE]":
                assert cleanup_finished.is_set()

        assert [event.strip() for event in received] == [
            'data: {"delta":"answer"}',
            "data: [DONE]",
        ]
        agent_runs._RUNS.pop(session_id, None)

    asyncio.run(scenario())


def test_finish_request_is_bound_to_the_exact_active_run():
    async def scenario():
        session_id = 'finish-editor-run-test'
        gate = asyncio.Event()

        async def stream():
            await gate.wait()
            yield 'data: [DONE]\n\n'

        run = agent_runs.start(session_id, stream())
        await asyncio.sleep(0)
        assert not agent_runs.request_finish(session_id, 'stale-run-id')
        assert not agent_runs.should_finish(session_id)
        assert agent_runs.request_finish(session_id, run.run_id)
        assert agent_runs.should_finish(session_id)
        gate.set()
        async for _ in agent_runs.subscribe(session_id, run):
            pass
        assert not agent_runs.should_finish(session_id)
        agent_runs._RUNS.pop(session_id, None)

    asyncio.run(scenario())