mirror of
https://github.com/jxxghp/MoviePilot.git
synced 2026-10-28 19:06:36 +08:00
44 lines
1.5 KiB
Python
44 lines
1.5 KiB
Python
"""
|
||
验证 RSS 工作流动作的输入解析与结果输出。
|
||
"""
|
||
|
||
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
|
||
|
||
|
||
def test_execute_builds_core_torrent_info_for_downstream_workflow() -> None:
|
||
"""
|
||
工作流产出的种子信息应使用 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
|
||
assert isinstance(torrent_info, TorrentInfo)
|
||
assert torrent_info.category is None
|
||
assert callable(getattr(torrent_info, "to_dict", None))
|
||
assert "2026-05-19 08:30:00" == torrent_info.pubdate
|