mirror of
https://github.com/jxxghp/MoviePilot.git
synced 2026-05-21 07:26:49 +00:00
48 lines
1.7 KiB
Python
48 lines
1.7 KiB
Python
import unittest
|
||
from datetime import datetime
|
||
from unittest.mock import patch
|
||
|
||
from app.core.context import TorrentInfo
|
||
from app.schemas 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.global_vars.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)
|
||
|
||
|
||
if __name__ == "__main__":
|
||
unittest.main()
|