Files
MoviePilot/tests/test_transfer_queue_count.py
DDSRem 2de976f6b3 Merge pull request #7050 from DDSRem-Dev/codex-comment-migration
docs: 统一全项目中文注释和结构化契约说明
2026-10-17 19:26:29 +08:00

69 lines
2.3 KiB
Python

"""
整理队列批次计数口径测试。
背景:作业视图中的任务完成后仅标记终态,作业要等关联任务全部终态才整体移除,
因此追更/分批场景下已完成任务会跨批次残留。批次开始日志与进度分母若用全量
total(),会把历史任务计入「当前共 N 个文件」(如实际只处理 2 个却显示 8 个),
且进度百分比永远走不满。批次统计必须只数未终态任务。
"""
from app.application.transfer.workflow import JobManager
from tests.test_transfer_job_manager import make_task
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() -> None:
"""
total() 保持全量语义(供作业视图展示),包含已完成任务。
"""
jobview = _build_jobview_with_stale_tasks()
assert jobview.total() == 8
def test_pending_total_excludes_terminal_tasks() -> None:
"""
pending_total() 只数未终态任务,不受跨批次残留影响。
"""
jobview = _build_jobview_with_stale_tasks()
assert jobview.pending_total() == 2
def test_pending_total_excludes_failed_tasks() -> None:
"""
失败任务同为终态,不应计入待处理数。
"""
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)
assert jobview.pending_total() == 1
def test_pending_total_counts_running_tasks() -> None:
"""
运行中的任务属于本批,必须计入。
"""
jobview = JobManager()
running_task = make_task(1)
assert jobview.add_task(running_task)
jobview.running_task(running_task)
assert jobview.pending_total() == 1