Files
MoviePilot/tests/test_agent_add_subscribe_tool.py

109 lines
3.8 KiB
Python
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
import asyncio
import unittest
from types import SimpleNamespace
from unittest.mock import AsyncMock, patch
from app.agent.tools.impl.add_subscribe import AddSubscribeTool
from app.schemas.types import NotificationChannel
class TestAgentAddSubscribeTool(unittest.TestCase):
def test_tool_message_displays_special_season_zero(self):
"""Agent 提示必须把显式季 0 显示为特别季,而不是默认第一季。"""
tool = AddSubscribeTool(session_id="session-1", user_id="10001")
message = tool.get_tool_message(title="测试剧", media_type="tv", season=0)
self.assertIn("第0季", message)
self.assertNotIn("第1季(默认)", message)
def test_tv_subscription_without_season_reports_default_first_season(self):
tool = AddSubscribeTool(
session_id="session-1",
user_id="10001",
data=SimpleNamespace(
users=SimpleNamespace(
find_name_by_bindings=lambda _bindings: "moviepilot-user"
)
),
)
tool.set_message_attr(
channel=NotificationChannel.Telegram.value,
source="telegram-main",
username="tg_display_name",
)
with patch(
"app.agent.tools.impl.add_subscribe.SubscribeChain.async_add",
new=AsyncMock(return_value=(1, "")),
) as async_add:
result = asyncio.run(
tool.run(
title="Breaking Bad",
year="2008",
media_type="tv",
)
)
self.assertEqual(async_add.await_args.kwargs["username"], "moviepilot-user")
self.assertIn("第1季", result)
self.assertIn("默认按第一季订阅", result)
def test_subscription_falls_back_to_channel_username_when_no_binding_exists(self):
tool = AddSubscribeTool(
session_id="session-1",
user_id="10001",
data=SimpleNamespace(
users=SimpleNamespace(find_name_by_bindings=lambda _bindings: None)
),
)
tool.set_message_attr(
channel=NotificationChannel.Telegram.value,
source="telegram-main",
username="tg_display_name",
)
with patch(
"app.agent.tools.impl.add_subscribe.SubscribeChain.async_add",
new=AsyncMock(return_value=(1, "")),
) as async_add:
result = asyncio.run(
tool.run(
title="The Matrix",
year="1999",
media_type="movie",
)
)
self.assertEqual(async_add.await_args.kwargs["username"], "tg_display_name")
self.assertIn("成功添加订阅:The Matrix (1999)", result)
def test_feishu_subscription_uses_pre_resolved_username_when_openid_lookup_misses(self):
tool = AddSubscribeTool(
session_id="session-1",
user_id="ou_feishu_user",
data=SimpleNamespace(
users=SimpleNamespace(find_name_by_bindings=lambda _bindings: None)
),
)
tool.set_message_attr(
channel=NotificationChannel.Feishu.value,
source="feishu-main",
username="moviepilot-user",
)
with patch(
"app.agent.tools.impl.add_subscribe.SubscribeChain.async_add",
new=AsyncMock(return_value=(1, "")),
) as async_add:
result = asyncio.run(
tool.run(
title="The Matrix",
year="1999",
media_type="movie",
)
)
self.assertEqual(async_add.await_args.kwargs["username"], "moviepilot-user")
self.assertIn("成功添加订阅:The Matrix (1999)", result)