test: 更新 AgentScope 相关单元测试与集成测试

- 重命名 test_react_runner.py 为 test_runner.py
- 新增 test_utils.py 测试工具函数
- 更新现有测试用例适配新架构
This commit is contained in:
qzl
2026-03-16 16:11:06 +08:00
parent 36b104fa37
commit e55f12cdc1
15 changed files with 753 additions and 717 deletions
+67 -4
View File
@@ -45,6 +45,12 @@ async def test_snapshot_message_returns_raw_db_columns() -> None:
seq=7,
role=AgentChatMessageRole.TOOL,
content='{"offloaded":true}',
model_code=None,
tool_name=None,
input_tokens=0,
output_tokens=0,
cost=0,
latency_ms=None,
metadata_json={"tool_call_id": "call-1"},
created_at=now,
)
@@ -71,8 +77,7 @@ async def test_persist_user_message_sets_session_title_when_empty() -> None:
await repository.persist_user_message(
session_id=session_id,
run_id="run-1",
content_text=" 请帮我安排明天下午开会 ",
content=" 请帮我安排明天下午开会 ",
metadata=None,
)
@@ -94,10 +99,68 @@ async def test_persist_user_message_keeps_existing_session_title() -> None:
await repository.persist_user_message(
session_id=session_id,
run_id="run-2",
content_text="新的消息内容",
content="新的消息内容",
metadata=None,
)
assert session_row.title == "已有标题"
assert session_row.message_count == 2
class _ScalarRows:
def __init__(self, rows: list[object]) -> None:
self._rows = rows
def all(self) -> list[object]:
return self._rows
class _ExecuteRowsResult:
def __init__(self, rows: list[object]) -> None:
self._rows = rows
def scalars(self) -> _ScalarRows:
return _ScalarRows(self._rows)
class _FakeHistorySession:
def __init__(self) -> None:
self._execute_count = 0
async def execute(self, stmt): # noqa: ANN001
del stmt
self._execute_count += 1
if self._execute_count == 1:
return _ExecuteResult(datetime(2026, 3, 16, 11, 0, tzinfo=timezone.utc))
if self._execute_count == 2:
message = SimpleNamespace(
id=uuid4(),
seq=1,
role=AgentChatMessageRole.USER,
content="hello",
model_code=None,
tool_name=None,
input_tokens=0,
output_tokens=0,
cost=0,
latency_ms=None,
metadata_json=None,
created_at=datetime(2026, 3, 16, 11, 0, tzinfo=timezone.utc),
)
return _ExecuteRowsResult([message])
return _ExecuteResult(uuid4())
@pytest.mark.asyncio
async def test_get_history_day_uses_target_day_queries_only() -> None:
session = _FakeHistorySession()
repository = AgentRepository(session=session) # type: ignore[arg-type]
payload = await repository.get_history_day(session_id=str(uuid4()), before=None)
assert payload is not None
assert payload["day"] == "2026-03-16"
assert payload["hasMore"] is True
messages = payload["messages"]
assert isinstance(messages, list)
assert len(messages) == 1
+14 -9
View File
@@ -1,6 +1,7 @@
from __future__ import annotations
from datetime import date
from typing import cast
from urllib.parse import quote
from uuid import UUID
@@ -11,6 +12,7 @@ import pytest
import v1.agent.service as agent_service_module
from core.auth.models import CurrentUser
from core.config.settings import config
from schemas.messages.chat_message import AgentChatMessageMetadata
from v1.agent.service import AgentService
@@ -50,15 +52,13 @@ class _FakeRepository:
self,
*,
session_id: str,
run_id: str,
content_text: str,
metadata: dict[str, object] | None,
content: str,
metadata: AgentChatMessageMetadata | None,
) -> None:
self.persisted_user_messages.append(
{
"session_id": session_id,
"run_id": run_id,
"content_text": content_text,
"content": content,
"metadata": metadata,
}
)
@@ -199,12 +199,17 @@ async def test_enqueue_run_persists_attachment_and_queue_without_user_token(
assert accepted.task_id == "task-1"
persisted = repository.persisted_user_messages[0]
metadata = persisted["metadata"]
assert isinstance(metadata, dict)
attachment = metadata["user_message_attachments"]
assert attachment["bucket"] == "agent-test-bucket"
metadata = cast(AgentChatMessageMetadata | None, persisted["metadata"])
assert metadata is not None
attachment = metadata.user_message_attachments
assert attachment is not None
assert attachment.bucket == "agent-test-bucket"
command = queue.commands[0]
assert "user_token" not in command
run_input = command["run_input"]
assert isinstance(run_input, dict)
assert run_input["threadId"] == "00000000-0000-0000-0000-000000000001"
assert run_input["runId"] == "run-1"
@pytest.mark.asyncio
+50
View File
@@ -0,0 +1,50 @@
from __future__ import annotations
from datetime import datetime, timezone
from uuid import uuid4
from v1.agent.utils import convert_message_to_history
class _FakeMessage:
def __init__(self, *, role: str, metadata: dict[str, object] | None) -> None:
self.id = uuid4()
self.seq = 1
self.role = role
self.content = "content"
self.metadata = metadata
self.timestamp = datetime.now(timezone.utc)
def test_convert_message_to_history_uses_ui_schema_key_for_tool_message() -> None:
message = _FakeMessage(
role="tool",
metadata={
"tool_agent_output": {
"ui_schema": {"version": "2.0", "root": {"type": "stack"}}
}
},
)
result = convert_message_to_history(message) # type: ignore[arg-type]
assert "ui_schema" in result
assert "uiSchema" not in result
assert result["ui_schema"] == {"version": "2.0", "root": {"type": "stack"}}
def test_convert_message_to_history_uses_ui_schema_key_for_assistant_message() -> None:
message = _FakeMessage(
role="assistant",
metadata={
"worker_agent_output": {
"ui_schema": {"version": "2.0", "root": {"type": "stack"}}
}
},
)
result = convert_message_to_history(message) # type: ignore[arg-type]
assert "ui_schema" in result
assert "uiSchema" not in result
assert result["ui_schema"] == {"version": "2.0", "root": {"type": "stack"}}