This commit is contained in:
@@ -2,7 +2,8 @@ from __future__ import annotations
|
||||
|
||||
import asyncio
|
||||
import uuid
|
||||
from types import SimpleNamespace
|
||||
|
||||
from dramatiq.middleware.time_limit import TimeLimitExceeded
|
||||
|
||||
from cpv3.infrastructure.storage.types import FileInfo
|
||||
from cpv3.modules.media import service as media_service
|
||||
@@ -91,3 +92,39 @@ def test_media_convert_actor_emits_precise_progress_updates(monkeypatch) -> None
|
||||
(99.0, "Сохранение результата"),
|
||||
(100.0, "Завершено"),
|
||||
]
|
||||
|
||||
|
||||
def test_media_convert_actor_marks_job_failed_on_time_limit(monkeypatch) -> None:
|
||||
sent_events: list[task_service.TaskWebhookEvent] = []
|
||||
|
||||
async def fake_convert_to_mp4(
|
||||
_storage: object,
|
||||
*,
|
||||
file_key: str,
|
||||
out_folder: str,
|
||||
on_progress,
|
||||
) -> FileInfo:
|
||||
_ = (file_key, out_folder, on_progress)
|
||||
raise TimeLimitExceeded
|
||||
|
||||
monkeypatch.setattr(media_service, "convert_to_mp4", fake_convert_to_mp4)
|
||||
monkeypatch.setattr(task_service, "_run_async", asyncio.run)
|
||||
monkeypatch.setattr(task_service, "_raise_if_job_cancelled", lambda _job_id: None)
|
||||
monkeypatch.setattr(task_service, "_get_storage_service", lambda: object())
|
||||
monkeypatch.setattr(
|
||||
task_service,
|
||||
"_send_webhook_event",
|
||||
lambda _url, event: sent_events.append(event),
|
||||
)
|
||||
|
||||
task_service.media_convert_actor.fn(
|
||||
job_id=str(uuid.uuid4()),
|
||||
webhook_url="http://backend.test/api/tasks/webhook/job-1/",
|
||||
file_key="uploads/source.mkv",
|
||||
out_folder="projects/1",
|
||||
output_format="mp4",
|
||||
)
|
||||
|
||||
assert sent_events[-1].status == "FAILED"
|
||||
assert sent_events[-1].current_message == "Задача превысила лимит времени"
|
||||
assert sent_events[-1].error_message == "Задача превысила лимит времени"
|
||||
|
||||
Reference in New Issue
Block a user