830b1379d3
- viral_video_jobs: 爆款视频任务主表(含 v1.3 reference_video/style_strength/style_guide 字段) - viral_video_style_templates: 风格模板配置(seed 4 个系统模板) - viral_video_prompt_templates: Prompt 模板(由 #2040 seed,7 种 prompt_type) - 单元测试 4 个,覆盖三表 CRUD 与默认值
100 lines
3.0 KiB
Python
100 lines
3.0 KiB
Python
"""爆款视频 DB 模型单元测试(#2039 PR1:DB + migration)。
|
||
|
||
验证:
|
||
- 3 张新表可在内存 SQLite 上创建
|
||
- 默认值与基本 CRUD 正常
|
||
"""
|
||
|
||
from __future__ import annotations
|
||
|
||
from sqlalchemy import create_engine
|
||
from sqlalchemy.orm import sessionmaker
|
||
|
||
from packages.adapters.sqlalchemy_impl.models import (
|
||
Base,
|
||
ViralVideoJobModel,
|
||
ViralVideoPromptTemplateModel,
|
||
ViralVideoStyleTemplateModel,
|
||
)
|
||
|
||
|
||
def _make_session():
|
||
engine = create_engine("sqlite:///:memory:")
|
||
Base.metadata.create_all(engine)
|
||
return sessionmaker(bind=engine)()
|
||
|
||
|
||
class TestViralVideoJobModel:
|
||
def test_create_and_get(self):
|
||
session = _make_session()
|
||
job = ViralVideoJobModel(
|
||
id="job-001",
|
||
user_id="user-001",
|
||
images=["https://img.com/1.jpg"],
|
||
industry="美妆",
|
||
duration=60,
|
||
)
|
||
session.add(job)
|
||
session.commit()
|
||
|
||
fetched = session.query(ViralVideoJobModel).filter_by(id="job-001").one()
|
||
assert fetched.user_id == "user-001"
|
||
assert fetched.images == ["https://img.com/1.jpg"]
|
||
assert fetched.industry == "美妆"
|
||
assert fetched.duration == 60
|
||
|
||
def test_default_values(self):
|
||
session = _make_session()
|
||
job = ViralVideoJobModel(id="job-002", user_id="user-002")
|
||
session.add(job)
|
||
session.commit()
|
||
|
||
fetched = session.get(ViralVideoJobModel, "job-002")
|
||
assert fetched.images == []
|
||
assert fetched.fusion_level == "ai_polish"
|
||
assert fetched.style_strength == "medium"
|
||
assert fetched.status == "pending"
|
||
assert fetched.credits_cost == 0
|
||
assert fetched.retry_count == 0
|
||
assert fetched.style_guide is None
|
||
assert fetched.intent_result is None
|
||
|
||
|
||
class TestViralVideoStyleTemplateModel:
|
||
def test_create_and_get(self):
|
||
session = _make_session()
|
||
tpl = ViralVideoStyleTemplateModel(
|
||
id="tpl-001",
|
||
name="快节奏",
|
||
style_config={"cut_speed": "fast"},
|
||
sort_order=1,
|
||
)
|
||
session.add(tpl)
|
||
session.commit()
|
||
|
||
fetched = session.get(ViralVideoStyleTemplateModel, "tpl-001")
|
||
assert fetched.name == "快节奏"
|
||
assert fetched.style_config == {"cut_speed": "fast"}
|
||
assert fetched.sort_order == 1
|
||
|
||
|
||
class TestViralVideoPromptTemplateModel:
|
||
def test_create_and_get(self):
|
||
session = _make_session()
|
||
tpl = ViralVideoPromptTemplateModel(
|
||
id="pt-001",
|
||
prompt_type="image_analysis",
|
||
name="图片分析模板",
|
||
content="请分析图片:{image_url}",
|
||
variables=["image_url"],
|
||
)
|
||
session.add(tpl)
|
||
session.commit()
|
||
|
||
fetched = session.get(ViralVideoPromptTemplateModel, "pt-001")
|
||
assert fetched.prompt_type == "image_analysis"
|
||
assert fetched.content == "请分析图片:{image_url}"
|
||
assert fetched.variables == ["image_url"]
|
||
assert fetched.version == 1
|
||
assert fetched.is_active is True
|