eeb8a05b69
CI/CD Pipeline / Check push changed paths (pull_request) Has been skipped
CI/CD Pipeline / Dedup Check - skip PR tests when covered by push pipeline (pull_request) Successful in 2s
CI/CD Pipeline / Check if frontend-only change (pull_request) Successful in 2s
CI/CD Pipeline / Build Staging API Image (pull_request) Has been skipped
CI/CD Pipeline / Build Staging Web Image (pull_request) Has been skipped
CI/CD Pipeline / Build Staging Worker Image (pull_request) Has been skipped
CI/CD Pipeline / Frontend Lint (pull_request) Has been skipped
CI/CD Pipeline / Frontend Unit Tests (pull_request) Has been skipped
CI/CD Pipeline / PR Build Web Image (pull_request) Has been skipped
CI/CD Pipeline / PR Build API Image (pull_request) Successful in 1m4s
CI/CD Pipeline / Retag skipped Staging API Image (pull_request) Has been skipped
CI/CD Pipeline / Retag skipped Staging Web Image (pull_request) Has been skipped
CI/CD Pipeline / Retag skipped Staging Worker Image (pull_request) Has been skipped
CI/CD Pipeline / Deploy Staging (Watchtower auto-deploy) (pull_request) Has been skipped
CI/CD Pipeline / Staging E2E Tests (pull_request) Has been skipped
CI/CD Pipeline / Staging API Integration Tests (pull_request) Has been skipped
CI/CD Pipeline / ACR Image Cleanup (pull_request) Has been skipped
PR Automation / Auto Approve on CI Green (pull_request) Successful in 3m23s
CI/CD Pipeline / PR Build Worker Image (pull_request) Successful in 3m31s
Preview Deploy / Deploy Preview Environment (pull_request) Successful in 4m11s
AI Code Review / AI Code Review (pull_request) Successful in 8m48s
PR Automation / Auto Merge on CI Green + Approved (pull_request) Successful in 10m46s
CI/CD Pipeline / Integration Tests (pull_request) Successful in 24m20s
CI/CD Pipeline / Validate - Style (pull_request) Has been cancelled
CI/CD Pipeline / Unit Tests (pull_request) Has been cancelled
CI/CD Pipeline / Build Production API Image (pull_request) Has been cancelled
CI/CD Pipeline / Build Production Web Image (pull_request) Has been cancelled
CI/CD Pipeline / Build Production Worker Image (pull_request) Has been cancelled
CI/CD Pipeline / Deploy Production (pull_request) Has been cancelled
CI/CD Pipeline / Production Browser E2E (pull_request) Has been cancelled
CI/CD Pipeline / Canary Release to Production (pull_request) Has been cancelled
CI/CD Pipeline / CI Gate (pull_request) Has been cancelled
CI/CD Pipeline / Validate - Security (pull_request) Has been cancelled
CI/CD Pipeline / Validate - Python (mypy + alembic) (pull_request) Has been cancelled
- 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
|