Files
MoviePilot/tests/test_workflow_fetch_rss.py
T

44 lines
1.6 KiB
Python

import unittest
from datetime import datetime
from unittest.mock import patch
from app.domain.context import TorrentInfo
from app.schemas.workflow import ActionContext
from app.workflow.actions.fetch_rss import FetchRssAction
class FetchRssActionTest(unittest.TestCase):
"""
RSS 工作流动作测试。
"""
def test_execute_builds_core_torrent_info_for_downstream_workflow(self):
"""
工作流产出的种子信息应使用 core TorrentInfo,避免下载事件下游收到缺少运行时接口的 schema 对象。
"""
rss_items = [
{
"title": "Example RSS Torrent",
"enclosure": "https://example.com/example.torrent",
"link": "https://example.com/details",
"size": 1024,
"pubdate": datetime(2026, 5, 19, 8, 30, 0),
}
]
with patch("app.workflow.actions.fetch_rss.RssHelper") as rss_helper, \
patch("app.workflow.actions.fetch_rss.runtime_stop_state.is_workflow_stopped", return_value=False):
rss_helper.return_value.parse.return_value = rss_items
context = FetchRssAction("fetch-rss").execute(
workflow_id=1,
params={"url": "https://example.com/rss.xml"},
context=ActionContext(),
)
torrent_info = context.torrents[0].torrent_info
self.assertIsInstance(torrent_info, TorrentInfo)
self.assertIsNone(torrent_info.category)
self.assertTrue(callable(getattr(torrent_info, "to_dict", None)))
self.assertEqual("2026-05-19 08:30:00", torrent_info.pubdate)