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)
