/** * 智能项圈预警API集成测试 * @file test-smart-collar-alert-integration.js * @description 测试智能项圈预警API的完整集成 */ const axios = require('axios'); const BASE_URL = 'http://localhost:5350/api/smart-alerts/public'; // 测试数据 const testData = { collarNumber: 'TEST_COLLAR_001', alertType: 'battery', alertLevel: 'high', battery: 15, temperature: 25.5, dailySteps: 1200, longitude: 106.504962, latitude: 26.547901 }; async function testCollarAlertAPI() { console.log('🧪 开始测试智能项圈预警API集成...\n'); try { // 1. 测试获取统计数据 console.log('1. 测试获取统计数据...'); const statsResponse = await axios.get(`${BASE_URL}/collar/stats`); console.log('✅ 统计数据API正常'); console.log(' 响应:', statsResponse.data); // 2. 测试获取预警列表 console.log('\n2. 测试获取预警列表...'); const listResponse = await axios.get(`${BASE_URL}/collar`, { params: { page: 1, limit: 10 } }); console.log('✅ 预警列表API正常'); console.log(' 总数:', listResponse.data.total || 0); console.log(' 数据条数:', listResponse.data.data ? listResponse.data.data.length : 0); // 3. 测试搜索功能 console.log('\n3. 测试搜索功能...'); const searchResponse = await axios.get(`${BASE_URL}/collar`, { params: { search: 'TEST', page: 1, limit: 10 } }); console.log('✅ 搜索功能正常'); console.log(' 搜索结果数:', searchResponse.data.data ? searchResponse.data.data.length : 0); // 4. 测试预警类型筛选 console.log('\n4. 测试预警类型筛选...'); const filterResponse = await axios.get(`${BASE_URL}/collar`, { params: { alertType: 'battery', page: 1, limit: 10 } }); console.log('✅ 预警类型筛选正常'); console.log(' 筛选结果数:', filterResponse.data.data ? filterResponse.data.data.length : 0); // 5. 测试获取单个预警详情 if (listResponse.data.data && listResponse.data.data.length > 0) { const firstAlert = listResponse.data.data[0]; console.log('\n5. 测试获取单个预警详情...'); const detailResponse = await axios.get(`${BASE_URL}/collar/${firstAlert.id}`); console.log('✅ 预警详情API正常'); console.log(' 预警ID:', firstAlert.id); } // 6. 测试处理预警 if (listResponse.data.data && listResponse.data.data.length > 0) { const firstAlert = listResponse.data.data[0]; console.log('\n6. 测试处理预警...'); const handleResponse = await axios.post(`${BASE_URL}/collar/${firstAlert.id}/handle`, { action: 'acknowledged', notes: 'API测试处理', handler: 'test_user' }); console.log('✅ 处理预警API正常'); console.log(' 处理结果:', handleResponse.data); } // 7. 测试批量处理预警 if (listResponse.data.data && listResponse.data.data.length > 0) { const alertIds = listResponse.data.data.slice(0, 2).map(alert => alert.id); console.log('\n7. 测试批量处理预警...'); const batchHandleResponse = await axios.post(`${BASE_URL}/collar/batch-handle`, { alertIds: alertIds, action: 'acknowledged', notes: 'API批量测试处理', handler: 'test_user' }); console.log('✅ 批量处理预警API正常'); console.log(' 批量处理结果:', batchHandleResponse.data); } // 8. 测试导出数据 console.log('\n8. 测试导出数据...'); const exportResponse = await axios.get(`${BASE_URL}/collar/export`, { params: { format: 'json' } }); console.log('✅ 导出数据API正常'); console.log(' 导出数据条数:', exportResponse.data.data ? exportResponse.data.data.length : 0); console.log('\n🎉 所有API测试通过!'); console.log('\n📋 API端点总结:'); console.log(' - GET /collar/stats - 获取统计数据'); console.log(' - GET /collar - 获取预警列表'); console.log(' - GET /collar/{id} - 获取预警详情'); console.log(' - POST /collar/{id}/handle - 处理预警'); console.log(' - POST /collar/batch-handle - 批量处理预警'); console.log(' - GET /collar/export - 导出数据'); } catch (error) { console.error('❌ API测试失败:', error.message); if (error.response) { console.error(' 状态码:', error.response.status); console.error(' 响应数据:', error.response.data); } if (error.code === 'ECONNREFUSED') { console.log('\n💡 建议: 请确保后端服务器已启动'); console.log(' 启动命令: cd backend && npm start'); } } } // 测试前端数据服务集成 async function testFrontendIntegration() { console.log('\n🔍 测试前端数据服务集成...'); try { // 模拟前端API调用 const frontendTests = [ { name: '获取统计数据', url: `${BASE_URL}/collar/stats`, method: 'GET' }, { name: '获取预警列表', url: `${BASE_URL}/collar`, method: 'GET', params: { page: 1, limit: 10 } }, { name: '搜索预警', url: `${BASE_URL}/collar`, method: 'GET', params: { search: 'TEST', page: 1, limit: 10 } }, { name: '筛选预警', url: `${BASE_URL}/collar`, method: 'GET', params: { alertType: 'battery', page: 1, limit: 10 } } ]; for (const test of frontendTests) { try { const response = await axios({ method: test.method, url: test.url, params: test.params }); console.log(`✅ ${test.name}: 成功`); if (test.name === '获取统计数据') { console.log(` 数据:`, response.data); } else { console.log(` 数据条数:`, response.data.data ? response.data.data.length : 0); } } catch (error) { console.log(`❌ ${test.name}: 失败 - ${error.message}`); } } } catch (error) { console.error('❌ 前端集成测试失败:', error.message); } } // 主函数 async function main() { console.log('🚀 智能项圈预警API集成测试开始\n'); await testCollarAlertAPI(); await testFrontendIntegration(); console.log('\n✅ 测试完成!'); console.log('\n📖 前端页面应该能够:'); console.log(' 1. 动态显示统计数据(低电量、离线、温度、异常运动、佩戴异常)'); console.log(' 2. 显示预警列表数据'); console.log(' 3. 支持搜索和筛选功能'); console.log(' 4. 支持处理预警操作'); console.log(' 5. 支持导出数据功能'); } // 如果直接运行此脚本 if (require.main === module) { main().catch(console.error); } module.exports = { testCollarAlertAPI, testFrontendIntegration };