mirror of
https://github.com/jxxghp/MoviePilot.git
synced 2026-08-29 03:56:43 +08:00
59 lines
2.1 KiB
Python
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)
|