style: auto-format with black + isort + ruff + prettier [skip ci-format-check]
CI/CD Pipeline / Check if frontend-only change (pull_request) Successful in 2s
CI/CD Pipeline / Dedup Check - skip PR tests when covered by push pipeline (pull_request) Successful in 2s
CI/CD Pipeline / PR Build API Image (pull_request) Successful in 10s
Preview Deploy / Deploy Preview Environment (pull_request) Successful in 1m10s
CI/CD Pipeline / Integration Tests (pull_request) Successful in 2m23s
CI/CD Pipeline / Validate - Python (mypy + alembic) (pull_request) Successful in 2m40s
CI/CD Pipeline / Validate - Style (pull_request) Successful in 3m5s
PR Automation / Auto Approve on CI Green (pull_request) Successful in 3m13s
CI/CD Pipeline / PR Build Worker Image (pull_request) Successful in 3m56s
AI Code Review / AI Code Review (pull_request) Successful in 6m23s
CI/CD Pipeline / Validate - Security (pull_request) Successful in 7m1s
CI/CD Pipeline / Unit Tests (pull_request) Failing after 7m2s
CI/CD Pipeline / CI Gate (pull_request) Failing after 6s
CI/CD Pipeline / Production Browser E2E (pull_request) Has been skipped
PR Automation / Auto Merge on CI Green + Approved (pull_request) Successful in 5m33s
CI/CD Pipeline / Staging E2E Tests (pull_request) Failing after 25h36m59s
CI/CD Pipeline / Build Staging API Image (pull_request) Failing after 25h37m10s
CI/CD Pipeline / Deploy Staging (Watchtower auto-deploy) (pull_request) Failing after 25h36m25s
CI/CD Pipeline / Retag skipped Staging Worker Image (pull_request) Failing after 25h36m29s
CI/CD Pipeline / Retag skipped Staging Web Image (pull_request) Failing after 25h36m29s
CI/CD Pipeline / Build Staging Worker Image (pull_request) Failing after 25h36m32s
CI/CD Pipeline / Build Staging Web Image (pull_request) Failing after 25h36m32s
CI/CD Pipeline / PR Build Web Image (pull_request) Failing after 25h36m42s
CI/CD Pipeline / Check push changed paths (pull_request) Failing after 25h36m57s
CI/CD Pipeline / Deploy Production (pull_request) Failing after 25h28m13s
CI/CD Pipeline / Build Production Worker Image (pull_request) Failing after 25h28m29s
CI/CD Pipeline / Build Production API Image (pull_request) Failing after 25h28m30s
CI/CD Pipeline / Build Production Web Image (pull_request) Failing after 25h28m30s
CI/CD Pipeline / ACR Image Cleanup (pull_request) Failing after 25h36m20s
CI/CD Pipeline / Canary Release to Production (pull_request) Failing after 25h28m12s
CI/CD Pipeline / Staging API Integration Tests (pull_request) Failing after 25h36m20s
CI/CD Pipeline / Frontend Unit Tests (pull_request) Failing after 25h36m42s
CI/CD Pipeline / Frontend Lint (pull_request) Failing after 25h36m42s
CI/CD Pipeline / Retag skipped Staging API Image (pull_request) Failing after 26h12m6s

This commit is contained in:
CI Bot
2026-09-15 05:46:06 +00:00
parent 08cad1f1ee
commit 8d7546ac0b
+29 -7
View File
@@ -15,13 +15,12 @@ from datetime import datetime, timezone
from unittest.mock import MagicMock, patch
import pytest
from app.main import app
from fastapi.testclient import TestClient
from app.main import app
# ── helpers ──────────────────────────────────────────────────────────────
def _make_script(**overrides):
"""构造一个模拟 ScriptModel 对象."""
defaults = dict(
@@ -33,7 +32,13 @@ def _make_script(**overrides):
tags=["测试"],
title_text="开场大标题",
title_category="片头",
title_config={"text": "开场大标题", "font": "思源黑体", "font_size": 48, "font_color": "#FFFFFF", "position": "top"},
title_config={
"text": "开场大标题",
"font": "思源黑体",
"font_size": 48,
"font_color": "#FFFFFF",
"position": "top",
},
created_at=datetime(2026, 9, 1, tzinfo=timezone.utc),
updated_at=datetime(2026, 9, 1, tzinfo=timezone.utc),
)
@@ -43,11 +48,13 @@ def _make_script(**overrides):
# ── TestScriptModelNewFields ─────────────────────────────────────────────
class TestScriptModelNewFields:
"""验证 ScriptModel 新增字段的定义."""
def test_model_has_title_text_column(self):
from packages.adapters.sqlalchemy_impl.models import ScriptModel
assert hasattr(ScriptModel, "title_text")
col = ScriptModel.__table__.columns["title_text"]
assert col is not None
@@ -55,6 +62,7 @@ class TestScriptModelNewFields:
def test_model_has_title_category_column(self):
from packages.adapters.sqlalchemy_impl.models import ScriptModel
assert hasattr(ScriptModel, "title_category")
col = ScriptModel.__table__.columns["title_category"]
assert col is not None
@@ -62,6 +70,7 @@ class TestScriptModelNewFields:
def test_model_has_title_config_column(self):
from packages.adapters.sqlalchemy_impl.models import ScriptModel
assert hasattr(ScriptModel, "title_config")
col = ScriptModel.__table__.columns["title_config"]
assert col is not None
@@ -69,6 +78,7 @@ class TestScriptModelNewFields:
def test_model_defaults(self):
"""新字段默认值为空字符串/空 dict."""
from packages.adapters.sqlalchemy_impl.models import ScriptModel
s = ScriptModel(id="x", user_id="u", title="t")
# 检查 default 值
assert ScriptModel.__table__.columns["title_text"].default.arg == ""
@@ -77,6 +87,7 @@ class TestScriptModelNewFields:
# ── TestScriptServiceTitleConfig ─────────────────────────────────────────
class TestScriptServiceTitleConfig:
"""验证 ScriptService 新方法 get_title_config_for_script."""
@@ -137,6 +148,7 @@ class TestScriptServiceTitleConfig:
# ── TestScriptServiceCreateWithNewFields ─────────────────────────────────
class TestScriptServiceCreateWithNewFields:
"""验证 create_script 和 update_script 支持新字段."""
@@ -184,6 +196,7 @@ class TestScriptServiceCreateWithNewFields:
# ── TestScriptsRoutesNewFields ───────────────────────────────────────────
class TestScriptsRoutesNewFields:
"""验证 scripts API 路由正确处理新字段."""
@@ -245,6 +258,7 @@ class TestScriptsRoutesNewFields:
# ── TestTitleLibraryDeprecated ───────────────────────────────────────────
class TestTitleLibraryDeprecated:
"""验证 title_libraries API 返回 deprecated Warning header."""
@@ -267,10 +281,18 @@ class TestTitleLibraryDeprecated:
def test_get_title_has_warning_header(self, mock_auth, mock_repo_dep):
mock_auth.return_value = MagicMock(user=MagicMock(id="user-001"))
from packages.domain.title_library import TitleLibraryItem
mock_item = TitleLibraryItem(
id="t1", user_id="user-001", name="测试", text="标题文字",
category="通用", description="", tags=[], usage_count=0,
is_active=True, created_at=datetime(2026, 1, 1, tzinfo=timezone.utc),
id="t1",
user_id="user-001",
name="测试",
text="标题文字",
category="通用",
description="",
tags=[],
usage_count=0,
is_active=True,
created_at=datetime(2026, 1, 1, tzinfo=timezone.utc),
updated_at=datetime(2026, 1, 1, tzinfo=timezone.utc),
)
mock_repo = MagicMock()