| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150 |
- /**
- * 书籍生成流程集成测试
- * 测试预估→检测类型→创建→进度完整流程
- */
- import { describe, it, expect, beforeAll } from 'vitest';
- import { apiPost, apiGet, apiPut, setAuthToken, initHttpClient, createTestUser } from '../../integration/http-client';
- describe('书籍生成流程集成测试', () => {
- let authToken: string;
- let userId: string;
- beforeAll(async () => {
- // 创建测试用户
- try {
- const user = await createTestUser();
- authToken = user.token;
- userId = user.userId;
- setAuthToken(authToken);
- } catch (e) {
- console.log('创建测试用户失败,跳过部分测试');
- }
- });
- describe('Step 1: 预估 API', () => {
- it('预估字数和时长', async () => {
- if (!authToken) return;
- const res = await apiPost('/api/book-generator/langgraph/estimate', {
- topic: '人工智能发展史',
- wordCount: 50000
- });
- expect(res.code).toBe(0);
- expect(res.data?.estimatedCost).toBeGreaterThan(0);
- expect(res.data?.estimatedDuration).toBeGreaterThan(0);
- });
- it('无效字数返回错误', async () => {
- if (!authToken) return;
- const res = await apiPost('/api/book-generator/langgraph/estimate', {
- topic: '测试',
- wordCount: -100
- });
- expect(res.code).not.toBe(0);
- });
- });
- describe('Step 2: 检测书籍类型', () => {
- it('检测书籍类型成功', async () => {
- if (!authToken) return;
- const res = await apiPost('/api/book-generator/langgraph/detect-book-type', {
- topic: '人工智能简史'
- });
- expect(res.code).toBe(0);
- expect(['技术', '科普', '学术', '其他']).toContain(res.data?.bookType);
- });
- it('空主题返回错误', async () => {
- if (!authToken) return;
- const res = await apiPost('/api/book-generator/langgraph/detect-book-type', {
- topic: ''
- });
- expect(res.code).not.toBe(0);
- });
- });
- describe('Step 3: 创建书籍', () => {
- it('创建书籍成功', async () => {
- if (!authToken) return;
- const res = await apiPost('/api/book-generator/langgraph/create', {
- title: `测试书籍_${Date.now()}`,
- topic: '人工智能发展史',
- wordCount: 50000,
- strategy: 'deep-plan-parallel'
- });
- expect(res.code).toBe(0);
- expect(res.data?.bookId).toBeDefined();
- });
- it('配额不足时返回错误', async () => {
- if (!authToken) return;
- // 尝试超额创建
- const res = await apiPost('/api/book-generator/langgraph/create', {
- title: '超配额测试',
- topic: '测试',
- wordCount: 1000000 // 远超配额
- });
- // 应该返回配额不足错误
- expect(res.code).toBeGreaterThan(0);
- });
- });
- describe('Step 4: 查询书籍列表', () => {
- it('获取用户的书籍列表', async () => {
- if (!authToken) return;
- const res = await apiGet('/api/book-generator/langgraph/books');
- expect(res.code).toBe(0);
- expect(Array.isArray(res.data?.books)).toBe(true);
- });
- it('获取书籍详情', async () => {
- if (!authToken) return;
- // 先创建一本书
- const createRes = await apiPost('/api/book-generator/langgraph/create', {
- title: `详情测试书籍_${Date.now()}`,
- topic: '测试',
- wordCount: 30000
- });
- const bookId = createRes.data?.bookId;
- if (!bookId) return;
- const res = await apiGet(`/api/book-generator/langgraph/books/${bookId}`);
- expect(res.code).toBe(0);
- expect(res.data?.id).toBe(bookId);
- });
- });
- describe('Step 5: 章节生成进度', () => {
- it('查询章节生成状态', async () => {
- if (!authToken) return;
- // 先创建一本书
- const createRes = await apiPost('/api/book-generator/langgraph/create', {
- title: `章节测试书籍_${Date.now()}`,
- topic: '测试',
- wordCount: 20000
- });
- const bookId = createRes.data?.bookId;
- if (!bookId) return;
- const res = await apiGet(`/api/book-generator/langgraph/books/${bookId}/chapters`);
- expect(res.code).toBe(0);
- });
- });
- });
|