"""Tests for generation cover route — schema validation and import checks.""" from __future__ import annotations import pytest from pydantic import ValidationError def test_generation_cover_router_importable(): """新路由模块可以正确导入""" from app.api.routes.generation_cover import router assert router is not None # tags 应该是 Generation assert "Generation" in router.tags def test_generation_cover_route_path(): """路由路径应为 /generate-cover""" from app.api.routes.generation_cover import router paths = [route.path for route in router.routes] assert "/generate-cover" in paths def test_generation_cover_schemas_importable(): """Schema 可以从新模块导入""" from app.api.routes.generation_cover import GenerateCoverRequest, GenerateCoverResponse # 验证请求 schema 默认值 req = GenerateCoverRequest() assert req.asset_ids == [] assert req.cover_type == "ai_frame" assert req.frame_time is None # 验证响应 schema resp = GenerateCoverResponse(plan_id="p1", cover={"image_url": "http://x"}) assert resp.plan_id == "p1" assert resp.cover["image_url"] == "http://x" def test_generation_cover_schemas_not_in_templates_editor(): """旧的 templates_editor/schemas.py 不再包含封面 schema""" from app.api.routes.templates_editor import schemas as te_schemas assert not hasattr(te_schemas, "GenerateCoverRequest") assert not hasattr(te_schemas, "GenerateCoverResponse") def test_templates_editor_no_cover_router(): """templates_editor 不再包含 cover_router""" from app.api.routes.templates_editor import _sub_routers # cover_router 应该已被移除 for sub in _sub_routers: for route in sub.routes: assert "generate-cover" not in getattr(route, "path", ""), "templates_editor 不应再有 generate-cover 路由" def test_api_router_has_generation_cover(): """api_router 应该包含 /api/v1/generation/generate-cover 路径""" from app.api.router import api_router all_paths = [] for route in api_router.routes: if hasattr(route, "path"): all_paths.append(route.path) # 嵌套 router if hasattr(route, "routes"): for sub_route in route.routes: if hasattr(sub_route, "path"): all_paths.append(sub_route.path) # 应该能找到 generate-cover 路径 cover_paths = [p for p in all_paths if "generate-cover" in p] assert len(cover_paths) > 0, f"未找到 generate-cover 路由, 所有路径: {all_paths[:20]}" def test_generation_cover_request_validation(): """验证请求 schema 的字段约束""" from app.api.routes.generation_cover import GenerateCoverRequest # frame_time 不允许负数 with pytest.raises(ValidationError): GenerateCoverRequest(frame_time=-1.0) # 合法的 frame_time req = GenerateCoverRequest(frame_time=5.5) assert req.frame_time == 5.5 # 自定义 cover_type req2 = GenerateCoverRequest(cover_type="upload", asset_ids=["a1", "a2"]) assert req2.cover_type == "upload" assert req2.asset_ids == ["a1", "a2"]