0c84ec2cf6
- wechat_sync_use_case: 0% → 100%(14个测试) - jwt_handler: 45% → 100%(8个测试) - password_handler: 46% → 100%(6个测试) - job领域模型: 0% → 96%(53个测试) - quota配额系统: 0% → 100%(61个测试) - generation_task领域模型: 0% → 97%(50个测试) - feature_flags基础设施层: 0% → 100%(39个测试) - subtitle字幕领域模型: 0% → 98%(48个测试) - duplication查重记录: 0% → 100%(31个测试) - tts_config配音配置: 0% → 100%(35个测试) - edit_template剪辑模板: 0% → 93%(17个测试) - voice_clone_profile音色克隆: 0% → 95%(51个测试) 全量单元测试:3026 passed, 8 skipped(0失败) 新增测试用例约391个
155 lines
5.7 KiB
Python
Executable File
155 lines
5.7 KiB
Python
Executable File
"""
|
|
EditTemplate 剪辑模板领域模型单元测试
|
|
"""
|
|
|
|
import pytest
|
|
|
|
from packages.domain.edit_template import EditTemplate, EditTemplateStatus
|
|
from packages.domain.editing_mode import EditingMode
|
|
|
|
|
|
class TestEditTemplateStatus:
|
|
"""EditTemplateStatus 枚举测试"""
|
|
|
|
def test_status_values(self):
|
|
assert EditTemplateStatus.ACTIVE == "active"
|
|
assert EditTemplateStatus.INACTIVE == "inactive"
|
|
|
|
|
|
class TestEditTemplateCreate:
|
|
"""create 工厂方法测试"""
|
|
|
|
def test_create_minimal(self):
|
|
template = EditTemplate.create(name="测试模板")
|
|
assert template.id is not None
|
|
assert len(template.id) == 32
|
|
assert template.name == "测试模板"
|
|
assert template.description == ""
|
|
assert template.template_type == "default"
|
|
assert template.editing_mode == EditingMode.ONE_TAKE.value
|
|
assert template.config == {}
|
|
assert template.preview_url == ""
|
|
assert template.sort_weight == 0
|
|
assert template.status == EditTemplateStatus.ACTIVE
|
|
assert template.version == 1
|
|
assert template.created_at is not None
|
|
assert template.updated_at is not None
|
|
|
|
def test_create_with_all_fields(self):
|
|
template = EditTemplate.create(
|
|
name="口播模板",
|
|
description="适合口播类视频",
|
|
template_type="talking_head",
|
|
editing_mode=EditingMode.VOICE_OVER.value,
|
|
config={"aspect_ratio": "9:16", "duration": 60},
|
|
preview_url="https://example.com/preview.mp4",
|
|
sort_weight=100,
|
|
status=EditTemplateStatus.INACTIVE,
|
|
version=3,
|
|
)
|
|
assert template.name == "口播模板"
|
|
assert template.description == "适合口播类视频"
|
|
assert template.template_type == "talking_head"
|
|
assert template.editing_mode == EditingMode.VOICE_OVER.value
|
|
assert template.config == {"aspect_ratio": "9:16", "duration": 60}
|
|
assert template.preview_url == "https://example.com/preview.mp4"
|
|
assert template.sort_weight == 100
|
|
assert template.status == EditTemplateStatus.INACTIVE
|
|
assert template.version == 3
|
|
|
|
def test_create_strips_whitespace(self):
|
|
template = EditTemplate.create(
|
|
name=" 我的模板 ",
|
|
description=" 描述 ",
|
|
template_type=" ",
|
|
editing_mode=" ",
|
|
preview_url=" url ",
|
|
)
|
|
assert template.name == "我的模板"
|
|
assert template.description == "描述"
|
|
assert template.template_type == "default" # 空字符串回退到default
|
|
assert template.editing_mode == EditingMode.ONE_TAKE.value # 空回退
|
|
assert template.preview_url == "url"
|
|
|
|
def test_create_empty_name_raises(self):
|
|
with pytest.raises(ValueError, match="模板名称不能为空"):
|
|
EditTemplate.create(name=" ")
|
|
|
|
def test_create_invalid_editing_mode_raises(self):
|
|
with pytest.raises(ValueError, match="无效的 editing_mode"):
|
|
EditTemplate.create(name="测试", editing_mode="invalid_mode")
|
|
|
|
def test_create_config_none(self):
|
|
template = EditTemplate.create(name="test", config=None)
|
|
assert template.config == {}
|
|
# 两个模板不共享同一个 dict
|
|
t2 = EditTemplate.create(name="test2")
|
|
assert template.config is not t2.config
|
|
|
|
def test_create_all_editing_modes(self):
|
|
"""所有合法 editing_mode 都能创建"""
|
|
for mode in EditingMode:
|
|
template = EditTemplate.create(name=f"test_{mode.value}", editing_mode=mode.value)
|
|
assert template.editing_mode == mode.value
|
|
|
|
|
|
class TestEditTemplateActivateDeactivate:
|
|
"""激活/停用测试"""
|
|
|
|
def test_activate_from_inactive(self):
|
|
template = EditTemplate.create(name="test", status=EditTemplateStatus.INACTIVE)
|
|
old_updated = template.updated_at
|
|
template.activate()
|
|
assert template.status == EditTemplateStatus.ACTIVE
|
|
assert template.updated_at >= old_updated
|
|
|
|
def test_activate_from_active(self):
|
|
template = EditTemplate.create(name="test")
|
|
template.activate()
|
|
assert template.status == EditTemplateStatus.ACTIVE
|
|
|
|
def test_deactivate_from_active(self):
|
|
template = EditTemplate.create(name="test")
|
|
template.deactivate()
|
|
assert template.status == EditTemplateStatus.INACTIVE
|
|
|
|
def test_deactivate_from_inactive(self):
|
|
template = EditTemplate.create(name="test", status=EditTemplateStatus.INACTIVE)
|
|
template.deactivate()
|
|
assert template.status == EditTemplateStatus.INACTIVE
|
|
|
|
|
|
class TestEditTemplateIsActive:
|
|
"""is_active 属性测试"""
|
|
|
|
def test_is_active_true(self):
|
|
template = EditTemplate.create(name="test")
|
|
assert template.is_active is True
|
|
|
|
def test_is_active_false(self):
|
|
template = EditTemplate.create(name="test", status=EditTemplateStatus.INACTIVE)
|
|
assert template.is_active is False
|
|
|
|
|
|
class TestEditTemplateBumpVersion:
|
|
"""版本号递增测试"""
|
|
|
|
def test_bump_version_increments(self):
|
|
template = EditTemplate.create(name="test", version=1)
|
|
old_updated = template.updated_at
|
|
template.bump_version()
|
|
assert template.version == 2
|
|
assert template.updated_at >= old_updated
|
|
|
|
def test_bump_version_multiple(self):
|
|
template = EditTemplate.create(name="test", version=5)
|
|
template.bump_version()
|
|
template.bump_version()
|
|
assert template.version == 7
|
|
|
|
def test_bump_version_updates_timestamp(self):
|
|
template = EditTemplate.create(name="test")
|
|
old_updated = template.updated_at
|
|
template.bump_version()
|
|
assert template.updated_at > old_updated or template.updated_at == old_updated
|