/** * 测试 Notebook API 和 Note API 扩展 * 使用方法:需要先启动服务器,然后运行此脚本 * node test-notebook-api.js */ const axios = require('axios'); const BASE_URL = 'http://localhost:3000'; let authToken = ''; let testUserId = ''; // 测试用户登录(需要先有一个测试用户) async function login() { try { // 这里需要替换为实际的测试用户手机号和验证码 // 或者使用已有的 token console.log('⚠️ 请先手动获取 token,或修改此脚本使用实际的登录接口'); console.log(' 示例:使用 Postman 或 curl 登录后获取 token'); return null; } catch (error) { console.error('登录失败:', error.message); return null; } } // 测试创建笔记本 async function testCreateNotebook() { console.log('\n📝 测试 1: 创建笔记本'); try { const response = await axios.post( `${BASE_URL}/api/notebooks`, { title: '测试笔记本', description: '这是一个测试笔记本', }, { headers: { 'Authorization': `Bearer ${authToken}`, 'Content-Type': 'application/json', }, } ); console.log('✅ 创建笔记本成功'); console.log(' 响应:', JSON.stringify(response.data, null, 2)); return response.data.data.notebook; } catch (error) { console.error('❌ 创建笔记本失败:', error.response?.data || error.message); return null; } } // 测试获取笔记本列表 async function testGetNotebooks() { console.log('\n📚 测试 2: 获取笔记本列表'); try { const response = await axios.get( `${BASE_URL}/api/notebooks`, { headers: { 'Authorization': `Bearer ${authToken}`, }, } ); console.log('✅ 获取笔记本列表成功'); console.log(' 笔记本数量:', response.data.data.total); console.log(' 笔记本列表:', JSON.stringify(response.data.data.notebooks, null, 2)); return response.data.data.notebooks; } catch (error) { console.error('❌ 获取笔记本列表失败:', error.response?.data || error.message); return null; } } // 测试创建笔记(带笔记本) async function testCreateNoteWithNotebook(notebookId) { console.log('\n📄 测试 3: 创建笔记(带笔记本)'); try { const response = await axios.post( `${BASE_URL}/api/notes`, { notebook_id: notebookId, type: 'thought', content: '这是一条测试想法笔记', // 不提供 course_id 和 node_id,测试独立笔记 }, { headers: { 'Authorization': `Bearer ${authToken}`, 'Content-Type': 'application/json', }, } ); console.log('✅ 创建笔记成功'); console.log(' 响应:', JSON.stringify(response.data, null, 2)); return response.data; } catch (error) { console.error('❌ 创建笔记失败:', error.response?.data || error.message); return null; } } // 测试获取笔记(按笔记本过滤) async function testGetNotesByNotebook(notebookId) { console.log('\n🔍 测试 4: 获取笔记(按笔记本过滤)'); try { const response = await axios.get( `${BASE_URL}/api/notes?notebook_id=${notebookId}`, { headers: { 'Authorization': `Bearer ${authToken}`, }, } ); console.log('✅ 获取笔记成功'); console.log(' 笔记数量:', response.data.data.total); console.log(' 笔记列表:', JSON.stringify(response.data.data.notes, null, 2)); return response.data.data.notes; } catch (error) { console.error('❌ 获取笔记失败:', error.response?.data || error.message); return null; } } // 测试删除笔记本(级联删除笔记) async function testDeleteNotebook(notebookId) { console.log('\n🗑️ 测试 5: 删除笔记本(级联删除笔记)'); try { const response = await axios.delete( `${BASE_URL}/api/notebooks/${notebookId}`, { headers: { 'Authorization': `Bearer ${authToken}`, }, } ); console.log('✅ 删除笔记本成功'); console.log(' 响应:', JSON.stringify(response.data, null, 2)); return true; } catch (error) { console.error('❌ 删除笔记本失败:', error.response?.data || error.message); return false; } } // 主测试函数 async function runTests() { console.log('🚀 开始测试 Notebook API 和 Note API 扩展\n'); console.log('⚠️ 注意:此测试需要:'); console.log(' 1. 服务器正在运行 (npm run dev)'); console.log(' 2. 有效的认证 token'); console.log(' 3. 测试用户已存在\n'); // 提示用户输入 token if (!authToken) { console.log('请提供认证 token(或修改脚本中的 authToken 变量)'); console.log('示例:从浏览器开发者工具或 Postman 中获取 token\n'); return; } // 测试流程 const notebook = await testCreateNotebook(); if (!notebook) { console.log('\n❌ 测试失败:无法创建笔记本'); return; } const notebooks = await testGetNotebooks(); if (!notebooks || notebooks.length === 0) { console.log('\n❌ 测试失败:无法获取笔记本列表'); return; } const note = await testCreateNoteWithNotebook(notebook.id); if (!note) { console.log('\n❌ 测试失败:无法创建笔记'); return; } const notes = await testGetNotesByNotebook(notebook.id); if (!notes || notes.length === 0) { console.log('\n❌ 测试失败:无法获取笔记列表'); return; } // 清理:删除测试数据 await testDeleteNotebook(notebook.id); console.log('\n✅ 所有测试完成!'); } // 运行测试 if (require.main === module) { runTests().catch(console.error); } module.exports = { runTests };