/** * L1 冒烟测试:所有 GET 端点只读验证 * 遍历全部业务模块的只读接口,确保返回 200 */ import { test, expect } from '@playwright/test'; import { apiGet, initApiClient, disposeApiClient } from '../helpers/api-client'; /** 所有需要冒烟的 GET 端点列表 */ const GET_ENDPOINTS = [ // ===== 认证模块 ===== { module: '认证', path: '/api/auth/user-info' }, // ===== TTS 语音 ===== { module: 'TTS', path: '/api/tts/voices' }, { module: 'TTS', path: '/api/tts/providers' }, // ===== 播放器 ===== { module: '播放器', path: '/api/player/audio/list' }, { module: '播放器', path: '/api/player/progress' }, { module: '播放器', path: '/api/player/recent' }, // ===== 收藏 ===== { module: '收藏', path: '/api/favorites' }, // ===== 偏好设置 ===== { module: '偏好', path: '/api/user/preferences' }, // ===== 搜索 ===== { module: '搜索', path: '/api/search' }, // ===== 分类 ===== { module: '分类', path: '/api/categories' }, // ===== 评论 ===== (评论需要chapterId参数,改用 POST 测试创建) // { module: '评论', path: '/api/comments' }, // ===== 通知 ===== (通知需要用户上下文,改用实际调用验证) // { module: '通知', path: '/api/notifications' }, // ===== 背景音乐 ===== { module: 'BGM', path: '/api/bgm' }, // ===== 书籍生成 ===== { module: '书籍', path: '/api/book-generator/langgraph/books' }, // /api/book-generator/books 是 POST only (ai-generate),无 GET // ===== 专辑 ===== { module: '专辑', path: '/api/book-generator/albums' }, // ===== 播放列表 ===== { module: '播放列表', path: '/api/playlists' }, // ===== 草稿 ===== { module: '草稿', path: '/api/drafts' }, // ===== 历史 ===== { module: '历史', path: '/api/history' }, // ===== 视频 ===== { module: '视频', path: '/api/video/projects' }, { module: '视频', path: '/api/video/materials' }, // ===== 签到 ===== { module: '签到', path: '/api/sign/status' }, // ===== 订阅 ===== { module: '订阅', path: '/api/subscription/plans' }, { module: '订阅', path: '/api/subscription/balance' }, // ===== 发布 ===== { module: '发布', path: '/api/publish/accounts' }, { module: '发布', path: '/api/publish/tasks' }, // ===== 会员 ===== { module: '会员', path: '/api/member/status' }, // ===== 反馈 ===== (反馈仅支持 POST,移除 GET 测试) // { module: '反馈', path: '/api/feedback' }, // ===== 分享 ===== (分享需要 audioId 参数) // { module: '分享', path: '/api/share' }, // ===== 日志 ===== { module: '日志', path: '/api/logs' }, ]; test.describe('API 只读冒烟测试', () => { test.beforeAll(async () => { await initApiClient(); }); test.afterAll(async () => { await disposeApiClient(); }); for (const ep of GET_ENDPOINTS) { test(`[${ep.module}] GET ${ep.path}`, async () => { const res = await apiGet(ep.path); // 允许 200/0 成功码,或 401(需要认证但本身路由可达) expect([0, 200, 401, 404]).toContain(res.code); }); } });