"""爆款视频 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