Files
capcut-mate/tests/verify_get_text_effects_api.py

153 lines
4.5 KiB
Python

"""
验证 get_text_effects API 端点是否正确注册
"""
import sys
import os
# 添加项目根目录到 Python 路径
sys.path.insert(0, os.path.dirname(os.path.dirname(os.path.abspath(__file__))))
def test_imports():
"""测试所有导入是否正常"""
print("=" * 60)
print("测试 1: 检查模块导入")
print("=" * 60)
try:
from src.schemas.get_text_effects import (
GetTextEffectsRequest,
TextEffectItem,
GetTextEffectsResponse
)
print("✅ Schema 模块导入成功")
from src.service.get_text_effects import (
get_text_effects,
resolve_text_effect
)
print("✅ Service 模块导入成功")
# 检查 router 源码中是否有该端点
import inspect
from src.router import v1 as router_module
source = inspect.getsource(router_module)
if '@router.post(path="/get_text_effects"' in source:
print("✅ Router 端点注册成功:/get_text_effects")
else:
print("❌ Router 端点未在源码中找到:/get_text_effects")
return False
return True
except Exception as e:
print(f"❌ 导入失败:{str(e)}")
import traceback
traceback.print_exc()
return False
def test_schema_validation():
"""测试 Schema 验证"""
print("\n" + "=" * 60)
print("测试 2: Schema 验证")
print("=" * 60)
try:
from src.schemas.get_text_effects import GetTextEffectsRequest
# 测试默认值
req1 = GetTextEffectsRequest()
assert req1.mode == 0, "默认 mode 应该是 0"
print("✅ 默认参数验证通过")
# 测试有效值
req2 = GetTextEffectsRequest(mode=2)
assert req2.mode == 2, "mode 应该可以是 2"
print("✅ 有效参数验证通过")
# 测试无效值
try:
req3 = GetTextEffectsRequest(mode=5)
print("❌ 应该拒绝 mode=5")
return False
except Exception:
print("✅ 无效参数正确被拒绝")
return True
except Exception as e:
print(f"❌ Schema 验证失败:{str(e)}")
import traceback
traceback.print_exc()
return False
def test_service_logic():
"""测试 Service 层逻辑"""
print("\n" + "=" * 60)
print("测试 3: Service 层逻辑")
print("=" * 60)
try:
from src.service.get_text_effects import get_text_effects, resolve_text_effect
# 测试获取所有效果
effects = get_text_effects(mode=0)
assert isinstance(effects, list), "应该返回列表"
print(f"✅ 获取所有效果成功,共 {len(effects)} 个")
# 测试获取免费效果
free_effects = get_text_effects(mode=2)
assert isinstance(free_effects, list), "应该返回列表"
assert len(free_effects) <= len(effects), "免费效果数不应超过总数"
print(f"✅ 获取免费效果成功,共 {len(free_effects)} 个")
# 测试解析功能
effect_info = resolve_text_effect("红黄火焰综艺花字")
if effect_info:
assert "resource_id" in effect_info, "应该包含 resource_id"
assert "effect_id" in effect_info, "应该包含 effect_id"
print("✅ 效果解析功能正常")
else:
print("⚠️ 效果解析返回 None(可能是数据问题)")
return True
except Exception as e:
print(f"❌ Service 层测试失败:{str(e)}")
import traceback
traceback.print_exc()
return False
def main():
print("\n🚀 开始验证 get_text_effects API\n")
results = []
results.append(("模块导入", test_imports()))
results.append(("Schema 验证", test_schema_validation()))
results.append(("Service 逻辑", test_service_logic()))
print("\n" + "=" * 60)
print("验证总结")
print("=" * 60)
for name, passed in results:
status = "✅ 通过" if passed else "❌ 失败"
print(f"{status}: {name}")
all_passed = all(result[1] for result in results)
if all_passed:
print("\n🎉 所有验证通过!API 已准备就绪。")
return 0
else:
print("\n❌ 部分验证失败,请检查代码。")
return 1
if __name__ == "__main__":
exit(main())