/** * 推送消息接收服务测试脚本 */ const SupabaseDatabaseManager = require('./lib/supabase-database'); require('dotenv').config(); async function testService() { console.log('🧪 开始测试推送消息接收服务...'); const db = new SupabaseDatabaseManager(); try { // 测试 1: 数据库连接 console.log('\n📡 测试 1: 数据库连接'); await db.testConnection(); console.log('✅ 数据库连接测试通过'); // 测试 2: 插入健康数据消息 console.log('\n💊 测试 2: 健康数据消息'); const healthMessage = { pushType: 'HEALTH', userId: 'test_user_001', deviceId: 'test_device_001', H: 75, O: 98, T: 36.5, source_ip: '127.0.0.1', user_agent: 'Test Client' }; const healthResult = await db.insertPushMessage(healthMessage); console.log('✅ 健康数据消息插入成功:', healthResult.messageId); // 测试 3: 插入 SOS 消息 console.log('\n🆘 测试 3: SOS 紧急消息'); const sosMessage = { pushType: 'SOS', userId: 'test_user_002', deviceId: 'test_device_002', emergencyLevel: 'HIGH', lat: 39.9042, lng: 116.4074, source_ip: '127.0.0.1', user_agent: 'Emergency Device' }; const sosResult = await db.insertPushMessage(sosMessage); console.log('✅ SOS 消息插入成功:', sosResult.messageId); // 测试 4: 批量插入消息 console.log('\n📦 测试 4: 批量消息插入'); const batchMessages = [ { pushType: 'LOCATION', userId: 'test_user_003', deviceId: 'test_device_003', lat: 31.2304, lng: 121.4737, accuracy: 10, source_ip: '127.0.0.1', user_agent: 'GPS Device' }, { pushType: 'DEVICE_STATUS', userId: 'test_user_004', deviceId: 'test_device_004', status: 'online', batteryLevel: 85, source_ip: '127.0.0.1', user_agent: 'IoT Device' }, { pushType: 'ACTIVITY', userId: 'test_user_005', deviceId: 'test_device_005', activityType: 'running', duration: 1800, calories: 250, source_ip: '127.0.0.1', user_agent: 'Fitness Tracker' } ]; const batchResult = await db.insertPushMessagesBatch(batchMessages); console.log('✅ 批量消息插入成功:', `${batchResult.successCount}/${batchResult.totalCount}`); // 测试 5: 重复消息检测 console.log('\n🔄 测试 5: 重复消息检测'); const duplicateResult = await db.insertPushMessage(healthMessage); console.log('✅ 重复消息检测:', duplicateResult.isDuplicate ? '检测到重复' : '未检测到重复'); // 测试 6: 获取统计信息 console.log('\n📊 测试 6: 统计信息获取'); const stats = await db.getMessageStats(24); console.log('✅ 统计信息获取成功:', stats.length, '种消息类型'); stats.forEach(stat => { console.log(` - ${stat.push_type}: ${stat.total_count} 条消息`); }); // 测试 7: 获取健康状态 console.log('\n🏥 测试 7: 系统健康状态'); const health = await db.getHealthStatus(); console.log('✅ 系统健康状态:', health.database.connected ? '正常' : '异常'); console.log(` - 总消息数: ${health.database.stats.total_messages}`); console.log(` - 最近1小时: ${health.database.stats.messages_last_hour}`); // 测试 8: 获取消息列表 console.log('\n📋 测试 8: 消息列表获取'); const messages = await db.getPushMessages({ limit: 5 }); console.log('✅ 消息列表获取成功:', messages.length, '条消息'); // 测试 9: HTTP API 测试 console.log('\n🌐 测试 9: HTTP API 测试'); await testHttpAPI(); console.log('\n🎉 所有测试完成!'); } catch (error) { console.error('❌ 测试失败:', error.message); throw error; } finally { await db.close(); } } async function testHttpAPI() { try { // 测试健康检查端点 const healthResponse = await fetch('http://localhost:3001/api/health'); if (healthResponse.ok) { console.log('✅ 健康检查 API 可用'); } else { console.log('❌ 健康检查 API 不可用'); } } catch (error) { console.log('ℹ️ HTTP API 测试跳过 (服务未运行)'); } } // 运行测试 if (require.main === module) { testService() .then(() => { console.log('\n✅ 测试完成,服务运行正常!'); process.exit(0); }) .catch((error) => { console.error('\n❌ 测试失败:', error.message); process.exit(1); }); } module.exports = { testService };