mirror of
https://github.com/bytedance/deer-flow.git
synced 2026-05-11 03:08:37 +00:00
126 lines
3.7 KiB
Python
126 lines
3.7 KiB
Python
"""Tests for paginated list_messages_by_run across all RunEventStore backends."""
|
|
|
|
import pytest
|
|
|
|
from deerflow.runtime.events.store.memory import MemoryRunEventStore
|
|
|
|
|
|
@pytest.fixture
|
|
def base_store():
|
|
return MemoryRunEventStore()
|
|
|
|
|
|
@pytest.mark.anyio
|
|
async def test_list_messages_by_run_default_returns_all(base_store):
|
|
store = base_store
|
|
for i in range(7):
|
|
await store.put(
|
|
thread_id="t1",
|
|
run_id="run-a",
|
|
event_type="human_message" if i % 2 == 0 else "ai_message",
|
|
category="message",
|
|
content=f"msg-a-{i}",
|
|
)
|
|
for i in range(3):
|
|
await store.put(
|
|
thread_id="t1",
|
|
run_id="run-b",
|
|
event_type="human_message",
|
|
category="message",
|
|
content=f"msg-b-{i}",
|
|
)
|
|
await store.put(thread_id="t1", run_id="run-a", event_type="tool_call", category="trace", content="trace")
|
|
|
|
msgs = await store.list_messages_by_run("t1", "run-a")
|
|
assert len(msgs) == 7
|
|
assert all(m["category"] == "message" for m in msgs)
|
|
assert all(m["run_id"] == "run-a" for m in msgs)
|
|
|
|
|
|
@pytest.mark.anyio
|
|
async def test_list_messages_by_run_with_limit(base_store):
|
|
store = base_store
|
|
for i in range(7):
|
|
await store.put(
|
|
thread_id="t1",
|
|
run_id="run-a",
|
|
event_type="human_message" if i % 2 == 0 else "ai_message",
|
|
category="message",
|
|
content=f"msg-a-{i}",
|
|
)
|
|
|
|
msgs = await store.list_messages_by_run("t1", "run-a", limit=3)
|
|
assert len(msgs) == 3
|
|
seqs = [m["seq"] for m in msgs]
|
|
assert seqs == sorted(seqs)
|
|
|
|
|
|
@pytest.mark.anyio
|
|
async def test_list_messages_by_run_after_seq(base_store):
|
|
store = base_store
|
|
for i in range(7):
|
|
await store.put(
|
|
thread_id="t1",
|
|
run_id="run-a",
|
|
event_type="human_message" if i % 2 == 0 else "ai_message",
|
|
category="message",
|
|
content=f"msg-a-{i}",
|
|
)
|
|
|
|
all_msgs = await store.list_messages_by_run("t1", "run-a")
|
|
cursor_seq = all_msgs[2]["seq"]
|
|
msgs = await store.list_messages_by_run("t1", "run-a", after_seq=cursor_seq, limit=50)
|
|
assert all(m["seq"] > cursor_seq for m in msgs)
|
|
assert len(msgs) == 4
|
|
|
|
|
|
@pytest.mark.anyio
|
|
async def test_list_messages_by_run_before_seq(base_store):
|
|
store = base_store
|
|
for i in range(7):
|
|
await store.put(
|
|
thread_id="t1",
|
|
run_id="run-a",
|
|
event_type="human_message" if i % 2 == 0 else "ai_message",
|
|
category="message",
|
|
content=f"msg-a-{i}",
|
|
)
|
|
|
|
all_msgs = await store.list_messages_by_run("t1", "run-a")
|
|
cursor_seq = all_msgs[4]["seq"]
|
|
msgs = await store.list_messages_by_run("t1", "run-a", before_seq=cursor_seq, limit=50)
|
|
assert all(m["seq"] < cursor_seq for m in msgs)
|
|
assert len(msgs) == 4
|
|
|
|
|
|
@pytest.mark.anyio
|
|
async def test_list_messages_by_run_does_not_include_other_run(base_store):
|
|
store = base_store
|
|
for i in range(7):
|
|
await store.put(
|
|
thread_id="t1",
|
|
run_id="run-a",
|
|
event_type="human_message",
|
|
category="message",
|
|
content=f"msg-a-{i}",
|
|
)
|
|
for i in range(3):
|
|
await store.put(
|
|
thread_id="t1",
|
|
run_id="run-b",
|
|
event_type="human_message",
|
|
category="message",
|
|
content=f"msg-b-{i}",
|
|
)
|
|
|
|
msgs = await store.list_messages_by_run("t1", "run-b")
|
|
assert len(msgs) == 3
|
|
assert all(m["run_id"] == "run-b" for m in msgs)
|
|
|
|
|
|
@pytest.mark.anyio
|
|
async def test_list_messages_by_run_empty_run(base_store):
|
|
store = base_store
|
|
msgs = await store.list_messages_by_run("t1", "nonexistent")
|
|
assert msgs == []
|