mirror of
https://github.com/jxxghp/MoviePilot.git
synced 2026-08-14 18:24:42 +08:00
* wip(v3): 移植监控与整理韧性修复到 v3 基线 包含:监控看门狗隔离/挂载探测、整理队列持久化、文件系统子进程代理、 写入原子化。迁移重挂到 v3 链 8a4c7e1d2f90 -> 7f5c1d2e3a4b -> e3d9f4b7c806。 tmdb 相关测试尚未通过,待定位。 * fix(v3): 修正移植引入的 16 项测试失败 - poller.py:合并时我方保留的行仍用旧变量名 merged_snapshot,而 v3 已统一 改名为 current_snapshot,导致 NameError 被外层 except 吞掉、快照从未保存 - smb.py:采纳 f-string 拆分写法,恢复 Python 3.11 可解析 - dispatcher 测试:历史查重由 _should_skip_by_history 统一承担,mock 点随之调整 - tmdb 缓存测试:补充 v3 新增的 media_source/media_id 字段 - tmdb 重试测试:为 fake 补充 match_multi/async_match_multi 尚余 3 项与 v3 识别流程的连接失败处理有关,待单独判断。 * fix(v3): 测试适配 v3 的 media_source/media_id 重构 v3 将媒体标识从 tmdbid 统一重构为 media_source + media_id,recognize_media 的 tmdbid 参数已被 **kwargs 静默吞掉——传了也不生效,流程会误降级到名称搜索。 tmdb 重试用例改用新参数后恢复正确路径。 同时修正 fake 的 match_multi 语义:真实实现(tmdbapi.match_multi)吞掉所有 异常并返回 None,连接失败与「未找到」在该路径上本就不可区分,fake 需保持一致。 至此移植引入的 19 项失败全部清零。 --------- Co-authored-by: Aqr-K <Aqr-K@users.noreply.github.com>
66 lines
2.6 KiB
Python
66 lines
2.6 KiB
Python
"""
|
|
整理队列批次计数口径测试。
|
|
|
|
背景:作业视图中的任务完成后仅标记终态,作业要等关联任务全部终态才整体移除,
|
|
因此追更/分批场景下已完成任务会跨批次残留。批次开始日志与进度分母若用全量
|
|
total(),会把历史任务计入「当前共 N 个文件」(如实际只处理 2 个却显示 8 个),
|
|
且进度百分比永远走不满。批次统计必须只数未终态任务。
|
|
"""
|
|
import unittest
|
|
|
|
from app.chain.transfer import JobManager
|
|
|
|
from tests.test_transfer_job_manager import make_task
|
|
|
|
|
|
class TransferQueueCountTest(unittest.TestCase):
|
|
|
|
@staticmethod
|
|
def _build_jobview_with_stale_tasks() -> JobManager:
|
|
"""
|
|
构造用户实测的 8→2 场景:同一作业 8 个任务,6 个已完成(作业因
|
|
仍有未终态任务不会被移除),2 个等待处理。
|
|
"""
|
|
jobview = JobManager()
|
|
completed = [make_task(episode) for episode in range(1, 7)]
|
|
waiting = [make_task(episode) for episode in range(7, 9)]
|
|
for task in completed + waiting:
|
|
assert jobview.add_task(task)
|
|
for task in completed:
|
|
jobview.finish_task(task)
|
|
# 作业尚有未终态任务,不会被移除,已完成任务随作业残留
|
|
jobview.try_remove_job(task)
|
|
return jobview
|
|
|
|
def test_total_still_counts_terminal_tasks(self):
|
|
"""total() 保持全量语义(供作业视图展示),包含已完成任务。"""
|
|
jobview = self._build_jobview_with_stale_tasks()
|
|
self.assertEqual(jobview.total(), 8)
|
|
|
|
def test_pending_total_excludes_terminal_tasks(self):
|
|
"""pending_total() 只数未终态任务,不受跨批次残留影响。"""
|
|
jobview = self._build_jobview_with_stale_tasks()
|
|
self.assertEqual(jobview.pending_total(), 2)
|
|
|
|
def test_pending_total_excludes_failed_tasks(self):
|
|
"""失败任务同为终态,不应计入待处理数。"""
|
|
jobview = JobManager()
|
|
failed_task = make_task(1)
|
|
waiting_task = make_task(2)
|
|
assert jobview.add_task(failed_task)
|
|
assert jobview.add_task(waiting_task)
|
|
jobview.fail_task(failed_task)
|
|
self.assertEqual(jobview.pending_total(), 1)
|
|
|
|
def test_pending_total_counts_running_tasks(self):
|
|
"""运行中的任务属于本批,必须计入。"""
|
|
jobview = JobManager()
|
|
running_task = make_task(1)
|
|
assert jobview.add_task(running_task)
|
|
jobview.running_task(running_task)
|
|
self.assertEqual(jobview.pending_total(), 1)
|
|
|
|
|
|
if __name__ == "__main__":
|
|
unittest.main()
|