| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778 |
- /**
- * 关键旅程 E2E 测试 05: 发布→首页可见
- * Journey: 创建内容 → 发布内容 → 验证在首页可见
- */
- import { test, expect } from '@playwright/test';
- import { apiGet, apiPost, apiPut, initApiClient, disposeApiClient, setAuthToken } from '../../../helpers/api-client';
- const FRONTEND_URL = process.env.FRONTEND_URL || 'http://localhost:5173';
- test.describe('关键旅程 05: 发布内容', () => {
- let phone: string;
- let authToken: string;
- let testBookId: number;
- test.beforeAll(async () => {
- await initApiClient();
- phone = `138${String(Date.now()).slice(-8)}`;
- await apiPost('/api/auth/send-code', { phone });
- const loginRes = await apiPost('/api/auth/login', { phone, code: '123456' });
- authToken = loginRes.data?.token;
- setAuthToken(authToken);
- });
- test.afterAll(async () => {
- await disposeApiClient();
- });
- test('C05-1: 创建测试书籍用于发布', async () => {
- const res = await apiPost('/api/book-generator/langgraph/books', {
- title: `发布测试书籍_${Date.now()}`,
- topic: '测试主题',
- wordCount: 10000,
- });
- expect(res.code).toBe(0);
- testBookId = res.data?.book?.id;
- expect(testBookId).toBeDefined();
- });
- test('C05-2: 获取发布状态', async () => {
- if (!testBookId) return test.skip();
- const res = await apiGet(`/api/book-generator/langgraph/books/${testBookId}`);
- // 刚创建的书籍应该是 draft 状态
- expect(res.code).toBe(0);
- });
- test('C05-3: 发布书籍', async () => {
- if (!testBookId) return test.skip();
- const res = await apiPut(`/api/book-generator/langgraph/books/${testBookId}/publish`);
- expect([0, 400, 409]).toContain(res.code); // 0=成功,其他=业务错误
- });
- test('C05-4: 发布页可访问', async ({ page }) => {
- await page.goto(`${FRONTEND_URL}/#/pages/publish/index`, { waitUntil: 'networkidle', timeout: 30000 });
- await page.waitForTimeout(3000);
- await expect(page.locator('#app')).toBeVisible();
- });
- test('C05-5: 首页可访问且显示内容', async ({ page }) => {
- await page.goto(`${FRONTEND_URL}/#/pages/index/index`, { waitUntil: 'networkidle', timeout: 30000 });
- await page.waitForTimeout(3000);
- await expect(page.locator('#app')).toBeVisible();
- });
- test('C05-6: 获取书籍列表验证已发布', async () => {
- const res = await apiGet('/api/book-generator/langgraph/books');
- expect(res.code).toBe(0);
- // 列表中应该包含我们创建的书籍
- const books = res.data?.books || [];
- const found = books.some((b: any) => b.id === testBookId);
- expect(found).toBe(true);
- });
- test('C05-7: 播放列表页可访问', async ({ page }) => {
- await page.goto(`${FRONTEND_URL}/#/pages/playlists/index`, { waitUntil: 'networkidle', timeout: 30000 });
- await page.waitForTimeout(3000);
- await expect(page.locator('#app')).toBeVisible();
- });
- });
|