49 lines
1.3 KiB
Python
49 lines
1.3 KiB
Python
from __future__ import annotations
|
|
|
|
import pytest
|
|
|
|
from agent_framework.runtime.agent_runtime import AgentRuntimeMixin
|
|
|
|
|
|
class _Observer:
|
|
def __init__(self):
|
|
self.events = []
|
|
|
|
async def emit(self, code, payload=None, **kwargs):
|
|
self.events.append((code, payload, kwargs))
|
|
|
|
|
|
class _Runtime(AgentRuntimeMixin):
|
|
name = "test_agent"
|
|
|
|
def __init__(self):
|
|
self.observer = _Observer()
|
|
|
|
|
|
@pytest.mark.asyncio
|
|
async def test_business_events_are_published_recursively_once():
|
|
runtime = _Runtime()
|
|
state = {"session_id": "s1", "intent": "x", "route": "test_agent"}
|
|
result = {
|
|
"ok": True,
|
|
"cached": False,
|
|
"result": {
|
|
"nodes": {
|
|
"a": {"business_events": ["RCT.001", {"code": "CVN.002", "payload": {"x": 1}}]},
|
|
"b": {"business_events": ["RCT.001"]},
|
|
}
|
|
},
|
|
}
|
|
await runtime._publish_business_events(result, state)
|
|
codes = [event[0] for event in runtime.observer.events]
|
|
assert codes == ["RCT.001", "CVN.002"]
|
|
|
|
|
|
@pytest.mark.asyncio
|
|
async def test_cached_tool_result_does_not_republish_business_events():
|
|
runtime = _Runtime()
|
|
await runtime._publish_business_events(
|
|
{"cached": True, "business_events": ["RCT.001"]}, {"session_id": "s1"}
|
|
)
|
|
assert runtime.observer.events == []
|