Files
xiaoxia-saas/tests/unit/test_editing_mode_and_template_version.py
T

106 lines
3.9 KiB
Python
Executable File

"""剪辑模式枚举 & 模板版本 单元测试。"""
from __future__ import annotations
from domain.editing_mode import EditingMode
from domain.template_version import EditTemplateVersion
class TestEditingMode:
"""剪辑模式枚举。"""
def test_one_take_value(self):
assert EditingMode.ONE_TAKE == "one_take"
def test_pip_value(self):
assert EditingMode.PIP == "pip"
def test_voice_over_value(self):
assert EditingMode.VOICE_OVER == "voice_over"
def test_voice_pip_value(self):
assert EditingMode.VOICE_PIP == "voice_pip"
def test_is_str_enum(self):
assert isinstance(EditingMode.ONE_TAKE, str)
assert EditingMode.ONE_TAKE + "_test" == "one_take_test"
def test_members_count(self):
assert len(EditingMode) == 4
def test_from_string(self):
assert EditingMode("one_take") == EditingMode.ONE_TAKE
assert EditingMode("pip") == EditingMode.PIP
assert EditingMode("voice_over") == EditingMode.VOICE_OVER
assert EditingMode("voice_pip") == EditingMode.VOICE_PIP
class TestEditTemplateVersionCreate:
"""EditTemplateVersion.create 工厂方法。"""
def test_create_minimal(self):
v = EditTemplateVersion.create(template_id="tpl-1", version=1)
assert v.template_id == "tpl-1"
assert v.version == 1
assert v.id # 自动生成
assert v.name == ""
assert v.editing_mode == "one_take"
assert v.config == {}
assert v.clip_configs == []
assert v.change_note == ""
assert v.published_by == ""
def test_create_with_name(self):
v = EditTemplateVersion.create(template_id="tpl-1", version=2, name="v2")
assert v.name == "v2"
assert v.version == 2
def test_create_with_editing_mode(self):
v = EditTemplateVersion.create(template_id="tpl-1", version=1, editing_mode="pip")
assert v.editing_mode == "pip"
def test_create_with_config(self):
config = {"duration": 30, "resolution": "1080p"}
v = EditTemplateVersion.create(template_id="tpl-1", version=1, config=config)
assert v.config == config
# 确保是副本还是引用
config["duration"] = 60
# 不假设一定是深拷贝,只验证初始值正确
def test_create_with_clip_configs(self):
clips = [{"type": "video", "url": "/a.mp4"}, {"type": "text", "text": "hi"}]
v = EditTemplateVersion.create(template_id="tpl-1", version=1, clip_configs=clips)
assert len(v.clip_configs) == 2
assert v.clip_configs[0]["type"] == "video"
def test_create_with_change_note(self):
v = EditTemplateVersion.create(template_id="tpl-1", version=1, change_note="Initial version")
assert v.change_note == "Initial version"
def test_create_with_published_by(self):
v = EditTemplateVersion.create(template_id="tpl-1", version=1, published_by="user-1")
assert v.published_by == "user-1"
def test_create_none_config_defaults_to_empty(self):
v = EditTemplateVersion.create(template_id="tpl-1", version=1, config=None)
assert v.config == {}
def test_create_none_clip_configs_defaults_to_empty(self):
v = EditTemplateVersion.create(template_id="tpl-1", version=1, clip_configs=None)
assert v.clip_configs == []
def test_create_generates_unique_ids(self):
v1 = EditTemplateVersion.create(template_id="tpl-1", version=1)
v2 = EditTemplateVersion.create(template_id="tpl-1", version=2)
assert v1.id != v2.id
def test_create_id_is_hex(self):
v = EditTemplateVersion.create(template_id="tpl-1", version=1)
int(v.id, 16) # 合法 hex
def test_created_at_is_set(self):
v = EditTemplateVersion.create(template_id="tpl-1", version=1)
assert v.created_at is not None
# 应该是 UTC 时间
assert v.created_at.tzinfo is not None