Files
MoviePilot/tests/test_transfer_queue_service.py
T

59 lines
2.1 KiB
Python

from unittest.mock import Mock
from app.application.transfer import TransferQueueService
from app.schemas.file import FileItem
from tests.test_transfer_job_manager import make_task
def _service(**overrides):
"""构造可观测整理队列服务及其默认依赖。"""
dependencies = {
"register_task": Mock(return_value=True),
"enqueue": Mock(),
"before_enqueue": Mock(),
"after_enqueue": Mock(),
"remove_task": Mock(),
"list_tasks": Mock(return_value=["job"]),
"expire_tasks": Mock(),
}
dependencies.update(overrides)
return TransferQueueService(**dependencies), dependencies
def test_transfer_queue_service_put_preserves_registration_order():
"""入队必须先登记视图,再登记批次、写队列并落盘。"""
calls = []
service, _ = _service(
register_task=lambda _task: calls.append("register") or True,
before_enqueue=lambda _task: calls.append("batch"),
enqueue=lambda _item: calls.append("queue"),
after_enqueue=lambda _task: calls.append("pending"),
)
assert service.put(make_task(1), Mock()) is True
assert calls == ["register", "batch", "queue", "pending"]
def test_transfer_queue_service_rejects_duplicate_without_side_effects():
"""作业视图拒绝重复任务后不得继续产生队列副作用。"""
service, dependencies = _service(register_task=Mock(return_value=False))
assert service.put(make_task(1), Mock()) is False
dependencies["before_enqueue"].assert_not_called()
dependencies["enqueue"].assert_not_called()
dependencies["after_enqueue"].assert_not_called()
def test_transfer_queue_service_lists_and_removes_through_ports():
"""队列查询先清理失活任务,移除操作只委托作业视图。"""
service, dependencies = _service()
fileitem = FileItem(storage="local", path="/tmp/demo.mkv", type="file")
assert service.list() == ["job"]
service.remove(fileitem)
dependencies["expire_tasks"].assert_called_once_with()
dependencies["list_tasks"].assert_called_once_with()
dependencies["remove_task"].assert_called_once_with(fileitem)