Files
xiaoxia-saas/tests/unit/test_edit_template_domain.py
T
xiaoxia df38101bd9
CI/CD Pipeline / Check if frontend-only change (push) Has been skipped
CI/CD Pipeline / Build Production API Image (push) Has been skipped
CI/CD Pipeline / Build Production Worker Image (push) Has been skipped
CI/CD Pipeline / Build Production Web Image (push) Has been skipped
CI/CD Pipeline / Deploy Production (push) Has been skipped
CI/CD Pipeline / Production Browser E2E (push) Has been skipped
CI/CD Pipeline / Build Staging Web Image (push) Successful in 40s
CI/CD Pipeline / Frontend Lint (push) Successful in 2m26s
CI/CD Pipeline / Validate Code Quality And Tests (push) Successful in 3m35s
CI/CD Pipeline / Frontend Unit Tests (push) Successful in 3m55s
CI/CD Pipeline / Unit Tests (push) Successful in 4m6s
CI/CD Pipeline / Integration Tests (push) Successful in 1m45s
CI/CD Pipeline / Build Staging API Image (push) Successful in 12m21s
CI/CD Pipeline / Build Staging Worker Image (push) Successful in 15m52s
CI/CD Pipeline / Deploy Staging (Watchtower auto-deploy) (push) Has been cancelled
CI/CD Pipeline / Staging E2E Tests (push) Has been cancelled
CI/CD Pipeline / Staging API Integration Tests (push) Has been cancelled
CI/CD Pipeline / ACR Image Cleanup (push) Has been cancelled
test(unit): P3-1 核心模块单元测试覆盖率提升 - 新增12个模块400+测试 (#661)
Co-authored-by: xiaoxia <dev@xiaoxiajianji.com>
Co-committed-by: xiaoxia <dev@xiaoxiajianji.com>
2026-07-21 00:21:37 +08:00

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