mirror of
https://github.com/jxxghp/MoviePilot.git
synced 2026-06-12 11:10:50 +08:00
test: 测试套件自隔离与全量离线化(collection 清零 + 杜绝真实网络) (#5873)
This commit is contained in:
@@ -3,6 +3,7 @@
|
||||
Telegram模块单元测试
|
||||
"""
|
||||
import unittest
|
||||
from unittest.mock import MagicMock, patch
|
||||
|
||||
from app.core.context import MediaInfo, Context, TorrentInfo
|
||||
from app.core.metainfo import MetaInfo
|
||||
@@ -13,13 +14,30 @@ from app.schemas.types import MediaType
|
||||
class TestTelegram(unittest.TestCase):
|
||||
|
||||
def setUp(self):
|
||||
"""测试前准备"""
|
||||
# 创建Telegram实例,使用虚假的token和chat_id防止真实发送
|
||||
self.telegram = Telegram(TELEGRAM_TOKEN='', TELEGRAM_CHAT_ID='')
|
||||
"""测试前准备。
|
||||
|
||||
模拟 telebot.TeleBot 以避免真实 API 调用:空 token 会让 Telegram.__init__ 提前返回、
|
||||
属性未初始化导致 send_* 抛错;这里用假 bot 让初始化完整且消息发送走内存桩。
|
||||
"""
|
||||
self.telebot_patcher = patch("app.modules.telegram.telegram.TeleBot")
|
||||
mock_telebot_cls = self.telebot_patcher.start()
|
||||
self.mock_bot_instance = MagicMock()
|
||||
# get_me 用于初始化 bot 用户名,需返回带 username 的对象
|
||||
self.mock_bot_instance.get_me.return_value = MagicMock(username="test_bot")
|
||||
mock_telebot_cls.return_value = self.mock_bot_instance
|
||||
|
||||
# send_medias/send_msg 发图时会经 ImageHelper().fetch_image 按 poster_path 真实下载海报,
|
||||
# 单测必须打桩,否则对 raw.githubusercontent.com 等外链发起真实 HTTP(外部 IO 不可接受且拖慢用例)。
|
||||
self.image_patcher = patch("app.modules.telegram.telegram.ImageHelper")
|
||||
mock_image_cls = self.image_patcher.start()
|
||||
mock_image_cls.return_value.fetch_image.return_value = b"fake-image-bytes"
|
||||
|
||||
self.telegram = Telegram(TELEGRAM_TOKEN="fake_token", TELEGRAM_CHAT_ID="fake_chat_id")
|
||||
|
||||
def tearDown(self):
|
||||
"""测试后清理"""
|
||||
pass
|
||||
"""测试后清理:停止 TeleBot 与 ImageHelper 打桩。"""
|
||||
self.telebot_patcher.stop()
|
||||
self.image_patcher.stop()
|
||||
|
||||
def test_send_msg_success(self):
|
||||
"""测试发送普通消息成功"""
|
||||
@@ -30,7 +48,7 @@ class TestTelegram(unittest.TestCase):
|
||||
)
|
||||
|
||||
# 验证返回值
|
||||
self.assertTrue(result is True)
|
||||
self.assertTrue(result)
|
||||
|
||||
def test_send_msg_with_longtext(self):
|
||||
"""测试发送长消息"""
|
||||
@@ -65,7 +83,7 @@ class TestTelegram(unittest.TestCase):
|
||||
title="推荐媒体列表"
|
||||
)
|
||||
|
||||
self.assertTrue(result is True)
|
||||
self.assertTrue(result)
|
||||
|
||||
def test_send_medias_msg_without_vote_average(self):
|
||||
"""测试发送无评分的媒体列表消息"""
|
||||
@@ -83,13 +101,13 @@ class TestTelegram(unittest.TestCase):
|
||||
title="推荐媒体列表"
|
||||
)
|
||||
|
||||
self.assertTrue(result is True)
|
||||
self.assertTrue(result)
|
||||
|
||||
def test_send_medias_msg_with_link_and_buttons(self):
|
||||
"""测试发送带链接和按钮的媒体列表消息"""
|
||||
media1 = MediaInfo()
|
||||
media1.type = MediaType.MOVIE
|
||||
media1.title = "测试*-|\.电影1"
|
||||
media1.title = r"测试*-|\.电影1"
|
||||
media1.year = "2023"
|
||||
media1.vote_average = 8.5
|
||||
media1.poster_path = "https://raw.githubusercontent.com/jxxghp/MoviePilot-Frontend/refs/heads/v2/public/logo.png"
|
||||
@@ -108,7 +126,7 @@ class TestTelegram(unittest.TestCase):
|
||||
buttons=buttons
|
||||
)
|
||||
|
||||
self.assertTrue(result is True)
|
||||
self.assertTrue(result)
|
||||
|
||||
|
||||
|
||||
@@ -122,7 +140,7 @@ class TestTelegram(unittest.TestCase):
|
||||
media_info.poster_path = "https://raw.githubusercontent.com/jxxghp/MoviePilot-Frontend/refs/heads/v2/public/logo.png"
|
||||
|
||||
torrent_info = TorrentInfo()
|
||||
torrent_info.site_name = "测试*-|\.站点"
|
||||
torrent_info.site_name = r"测试*-|\.站点"
|
||||
torrent_info.title = "唐朝诡事录"
|
||||
torrent_info.description = "唐朝诡事录之长安3 / 唐朝诡事录3 / 唐朝诡事录 第三部 / 唐朝诡事录·长安 / 唐诡3 / Horror Stories of Tang Dynasty Ⅲ / Strange Legend of Tang Dynasty Ⅲ 第3季 第31-32集 | 主演: 杨旭文 杨志刚 郜思雯 [内封简繁英多国软字幕] 【去头尾广告纯享版】[非伪去头] *发现未去净的广告或片头片尾,奖励魔力1W"
|
||||
torrent_info.page_url = "http://example.com/torrent"
|
||||
@@ -145,7 +163,7 @@ class TestTelegram(unittest.TestCase):
|
||||
title="种子列表"
|
||||
)
|
||||
|
||||
self.assertTrue(result is True)
|
||||
self.assertTrue(result)
|
||||
|
||||
def test_send_torrents_msg_with_link_and_buttons(self):
|
||||
"""测试发送带链接和按钮的种子列表消息"""
|
||||
@@ -185,7 +203,7 @@ class TestTelegram(unittest.TestCase):
|
||||
buttons=buttons
|
||||
)
|
||||
|
||||
self.assertTrue(result is True)
|
||||
self.assertTrue(result)
|
||||
|
||||
def test_send_msg_with_buttons_and_link(self):
|
||||
"""测试发送带按钮和链接的消息"""
|
||||
@@ -201,7 +219,7 @@ class TestTelegram(unittest.TestCase):
|
||||
)
|
||||
|
||||
# 验证返回值
|
||||
self.assertTrue(result is True)
|
||||
self.assertTrue(result)
|
||||
|
||||
def test_send_msg_with_url_buttons(self):
|
||||
"""测试发送带URL按钮的消息"""
|
||||
@@ -216,7 +234,7 @@ class TestTelegram(unittest.TestCase):
|
||||
)
|
||||
|
||||
# 验证返回值
|
||||
self.assertTrue(result is True)
|
||||
self.assertTrue(result)
|
||||
|
||||
|
||||
def test_send_msg_markdown_escaping(self):
|
||||
@@ -227,7 +245,4 @@ class TestTelegram(unittest.TestCase):
|
||||
)
|
||||
|
||||
# 验证返回值
|
||||
self.assertTrue(result is True)
|
||||
|
||||
if __name__ == '__main__':
|
||||
unittest.main()
|
||||
self.assertTrue(result)
|
||||
|
||||
Reference in New Issue
Block a user