Files
xiaoxia-saas/tests/unit/domain/test_template_version.py
T
xiaoxia 63d4048354
CI/CD Pipeline / Check if frontend-only change (push) Has been cancelled
CI/CD Pipeline / Validate - Code Quality (push) Has been cancelled
CI/CD Pipeline / Validate - Type Check (mypy) (push) Has been cancelled
CI/CD Pipeline / Validate - Migration (alembic) (push) Has been cancelled
CI/CD Pipeline / Unit Tests (push) Has been cancelled
CI/CD Pipeline / Integration Tests (push) Has been cancelled
CI/CD Pipeline / Frontend Lint (push) Has been cancelled
CI/CD Pipeline / Frontend Unit Tests (push) Has been cancelled
CI/CD Pipeline / PR Build API Image (push) Has been cancelled
CI/CD Pipeline / PR Build Web Image (push) Has been cancelled
CI/CD Pipeline / PR Build Worker Image (push) Has been cancelled
CI/CD Pipeline / Build Staging API Image (push) Has been cancelled
CI/CD Pipeline / Build Staging Web Image (push) Has been cancelled
CI/CD Pipeline / Build Staging Worker Image (push) Has been cancelled
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 / Build Production API Image (push) Has been cancelled
CI/CD Pipeline / Build Production Web Image (push) Has been cancelled
CI/CD Pipeline / Build Production Worker Image (push) Has been cancelled
CI/CD Pipeline / Deploy Production (push) Has been cancelled
CI/CD Pipeline / Production Browser E2E (push) Has been cancelled
CI/CD Pipeline / ACR Image Cleanup (push) Has been cancelled
CI/CD Pipeline / Canary Release to Production (push) Has been cancelled
CI/CD Pipeline / CI Gate (push) Has been cancelled
test(domain): wave196 小模块批量单测 +74 (#1160)
2026-07-30 00:25:01 +08:00

135 lines
4.5 KiB
Python
Executable File

"""EditTemplateVersion 单元测试."""
from __future__ import annotations
from datetime import datetime, timezone
import pytest
from domain.template_version import EditTemplateVersion
class TestEditTemplateVersionCreate:
"""create() 工厂方法测试."""
def test_create_basic(self):
v = EditTemplateVersion.create("tmpl_001", 1)
assert v.id is not None
assert len(v.id) == 32
assert v.template_id == "tmpl_001"
assert v.version == 1
assert v.name == ""
assert v.editing_mode == "one_take"
assert v.config == {}
assert v.clip_configs == []
assert v.change_note == ""
assert v.published_by == ""
assert v.created_at is not None
def test_create_with_all_fields(self):
v = EditTemplateVersion.create(
"tmpl_001",
3,
name="第三版",
editing_mode="pip",
config={"bgm": True},
clip_configs=[{"id": "c1", "type": "video"}],
change_note="优化剪辑逻辑",
published_by="user_123",
)
assert v.template_id == "tmpl_001"
assert v.version == 3
assert v.name == "第三版"
assert v.editing_mode == "pip"
assert v.config == {"bgm": True}
assert v.clip_configs == [{"id": "c1", "type": "video"}]
assert v.change_note == "优化剪辑逻辑"
assert v.published_by == "user_123"
def test_create_config_none_defaults_to_empty(self):
v = EditTemplateVersion.create("t1", 1, config=None)
assert v.config == {}
def test_create_clip_configs_none_defaults_to_empty(self):
v = EditTemplateVersion.create("t1", 1, clip_configs=None)
assert v.clip_configs == []
def test_create_unique_ids(self):
v1 = EditTemplateVersion.create("t1", 1)
v2 = EditTemplateVersion.create("t1", 1)
assert v1.id != v2.id
def test_create_sets_created_at(self):
before = datetime.now(timezone.utc)
v = EditTemplateVersion.create("t1", 1)
after = datetime.now(timezone.utc)
assert before <= v.created_at <= after
class TestEditTemplateVersionConstruction:
"""直接构造测试."""
def test_direct_construction(self):
now = datetime(2026, 1, 1, tzinfo=timezone.utc)
v = EditTemplateVersion(
id="v1",
template_id="t1",
version=5,
name="v5",
editing_mode="voice_over",
config={"key": "value"},
clip_configs=[{"a": 1}, {"b": 2}],
change_note="test",
published_by="admin",
created_at=now,
)
assert v.id == "v1"
assert v.template_id == "t1"
assert v.version == 5
assert v.name == "v5"
assert v.editing_mode == "voice_over"
assert v.config == {"key": "value"}
assert v.clip_configs == [{"a": 1}, {"b": 2}]
assert v.change_note == "test"
assert v.published_by == "admin"
assert v.created_at == now
def test_default_values(self):
v = EditTemplateVersion(id="v1", template_id="t1", version=1)
assert v.name == ""
assert v.editing_mode == "one_take"
assert v.config == {}
assert v.clip_configs == []
assert v.change_note == ""
assert v.published_by == ""
class TestEditTemplateVersionSlots:
"""slots 测试."""
def test_slots_no_extra_attrs(self):
v = EditTemplateVersion.create("t1", 1)
with pytest.raises((AttributeError, TypeError)):
v.new_field = "value" # type: ignore[attr-defined]
class TestEditTemplateVersionEquality:
"""相等性测试."""
def test_equal_same_id_and_version(self):
now = datetime(2026, 1, 1, tzinfo=timezone.utc)
v1 = EditTemplateVersion(id="same", template_id="t1", version=1, created_at=now)
v2 = EditTemplateVersion(id="same", template_id="t1", version=1, created_at=now)
assert v1 == v2
def test_not_equal_different_id(self):
now = datetime(2026, 1, 1, tzinfo=timezone.utc)
v1 = EditTemplateVersion(id="v1", template_id="t1", version=1, created_at=now)
v2 = EditTemplateVersion(id="v2", template_id="t1", version=1, created_at=now)
assert v1 != v2
def test_not_equal_different_version(self):
now = datetime(2026, 1, 1, tzinfo=timezone.utc)
v1 = EditTemplateVersion(id="same", template_id="t1", version=1, created_at=now)
v2 = EditTemplateVersion(id="same", template_id="t1", version=2, created_at=now)
assert v1 != v2