Files
capcut-mate/tests/test_video_task_draft_duration.py
2026-07-20 13:12:10 +08:00

95 lines
3.4 KiB
Python
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
"""云渲染草稿时长校验:低于 3 秒视为空草稿。"""
import json
import os
import tempfile
from datetime import datetime
from unittest.mock import patch
import pytest
from src.utils.video_task_manager import (
MIN_DRAFT_EXPORT_DURATION_US,
TaskStatus,
VideoGenTask,
VideoGenTaskManager,
)
def _task(draft_id: str = "d_test") -> VideoGenTask:
return VideoGenTask(
draft_url=f"http://example/openapi?draft_id={draft_id}",
draft_id=draft_id,
status=TaskStatus.PENDING,
created_at=datetime.now(),
)
@pytest.fixture
def draft_home():
with tempfile.TemporaryDirectory() as td:
yield td
class TestCheckDraftDuration:
def test_below_three_seconds_returns_false(self, draft_home) -> None:
did = "below_three"
root = os.path.join(draft_home, did)
os.makedirs(root, exist_ok=True)
path = os.path.join(root, "draft_content.json")
with open(path, "w", encoding="utf-8") as f:
json.dump({"duration": MIN_DRAFT_EXPORT_DURATION_US - 1}, f)
with patch("src.utils.video_task_manager.config") as cfg:
cfg.DRAFT_SAVE_PATH = draft_home
assert VideoGenTaskManager()._check_draft_duration(_task(did)) is False
def test_exactly_three_seconds_returns_true(self, draft_home) -> None:
did = "exact_three"
root = os.path.join(draft_home, did)
os.makedirs(root, exist_ok=True)
path = os.path.join(root, "draft_content.json")
with open(path, "w", encoding="utf-8") as f:
json.dump({"duration": MIN_DRAFT_EXPORT_DURATION_US}, f)
with patch("src.utils.video_task_manager.config") as cfg:
cfg.DRAFT_SAVE_PATH = draft_home
assert VideoGenTaskManager()._check_draft_duration(_task(did)) is True
def test_zero_duration_returns_false(self, draft_home) -> None:
did = "zero_d"
root = os.path.join(draft_home, did)
os.makedirs(root, exist_ok=True)
path = os.path.join(root, "draft_content.json")
with open(path, "w", encoding="utf-8") as f:
json.dump({"duration": 0}, f)
with patch("src.utils.video_task_manager.config") as cfg:
cfg.DRAFT_SAVE_PATH = draft_home
assert VideoGenTaskManager()._check_draft_duration(_task(did)) is False
class TestPhaseDownloadPrepareMessage:
"""时长不通过时,阶段函数返回带 draft_id 的提示文案。"""
@patch("src.utils.video_task_manager.sys.platform", "win32")
@patch.object(VideoGenTaskManager, "_ensure_local_draft_ready", return_value="")
@patch.object(VideoGenTaskManager, "_download_draft", return_value="")
def test_phase_returns_duration_too_short_message(
self, m_dl, m_ready, draft_home
) -> None:
did = "phase_short"
root = os.path.join(draft_home, did)
os.makedirs(root, exist_ok=True)
path = os.path.join(root, "draft_content.json")
with open(path, "w", encoding="utf-8") as f:
json.dump({"duration": 1000}, f)
with patch("src.utils.video_task_manager.config") as cfg:
cfg.DRAFT_SAVE_PATH = draft_home
cfg.DRAFT_DIR = draft_home
out = VideoGenTaskManager()._phase_download_and_prepare(_task(did))
assert (
out
== f"草稿中视频时长不大于3秒请检查草稿内容: {did}"
)