From d6bcedd3e09fae7b72e309e35f5d29a6dc17cf40 Mon Sep 17 00:00:00 2001 From: jxxghp Date: Fri, 11 Sep 2026 16:40:16 +0800 Subject: [PATCH] test(agent): cover default API session header --- tests/test_agent_api_executor.py | 22 ++++++++++++++++++++++ 1 file changed, 22 insertions(+) diff --git a/tests/test_agent_api_executor.py b/tests/test_agent_api_executor.py index ea0864eef..4b69c023f 100644 --- a/tests/test_agent_api_executor.py +++ b/tests/test_agent_api_executor.py @@ -5,6 +5,7 @@ from unittest.mock import AsyncMock, MagicMock, patch from app.agent.api.executor import ApiExecutionContext, MoviePilotApiExecutor from app.agent.tools.base import format_tool_result_for_agent +from app.agent.tools.manager import MoviePilotToolsManager from app.schemas.types import NotificationChannel @@ -81,6 +82,27 @@ def test_executor_keeps_non_collection_payload_unchanged_without_headers() -> No close.assert_awaited_once() +def test_manager_default_session_id_is_http_header_compatible() -> None: + """HTTP API 工具管理器生成的默认会话标识必须是可发送的字符串。""" + manager = MoviePilotToolsManager(user_id="1") + executor = MoviePilotApiExecutor( + context=ApiExecutionContext( + user_id="1", + username="admin", + is_admin=True, + session_id=manager.session_id, + ) + ) + + with patch("app.agent.api.executor.create_access_token", return_value="token"): + headers = executor._build_headers() + + session_header = headers["X-MoviePilot-Agent-Session"] + assert isinstance(manager.session_id, str) + assert isinstance(session_header, str) + assert session_header == manager.session_id + + def test_executor_keeps_collection_total_visible_in_truncated_tool_preview() -> None: """列表内容过大时,精确总数必须位于截断预览开头供 Agent 直接使用。""" response = SimpleNamespace(