forked from datawhale/whale-town-end
WARNING: This commit contains code with significant issues that need immediate attention: 1. Type Safety Issues: - Unused import ZulipAccountsService causing compilation warnings - Implicit 'any' type in formatZulipAccount method parameter - Type inconsistencies in service injections 2. Service Integration Problems: - Inconsistent service interface usage - Missing proper type definitions for injected services - Potential runtime errors due to type mismatches 3. Code Quality Issues: - Violation of TypeScript strict mode requirements - Inconsistent error handling patterns - Missing proper interface implementations Files affected: - src/business/admin/database_management.service.ts (main issue) - Multiple test files and service implementations - Configuration and documentation updates Next steps required: 1. Fix TypeScript compilation errors 2. Implement proper type safety 3. Resolve service injection inconsistencies 4. Add comprehensive error handling 5. Update tests to match new implementations Impact: High - affects admin functionality and system stability Priority: Urgent - requires immediate review and fixes Author: moyin Date: 2026-01-10
206 lines
5.3 KiB
JavaScript
206 lines
5.3 KiB
JavaScript
#!/usr/bin/env node
|
||
|
||
/**
|
||
* Zulip集成测试运行脚本
|
||
*
|
||
* 功能描述:
|
||
* - 运行Zulip消息发送的各种测试
|
||
* - 检查环境配置
|
||
* - 提供测试结果报告
|
||
*
|
||
* 使用方法:
|
||
* npm run test:zulip-integration
|
||
* 或
|
||
* node scripts/test-zulip-integration.js
|
||
*
|
||
* @author moyin
|
||
* @version 1.0.0
|
||
* @since 2026-01-10
|
||
*/
|
||
|
||
const { execSync } = require('child_process');
|
||
const fs = require('fs');
|
||
const path = require('path');
|
||
|
||
// 颜色输出
|
||
const colors = {
|
||
reset: '\x1b[0m',
|
||
bright: '\x1b[1m',
|
||
red: '\x1b[31m',
|
||
green: '\x1b[32m',
|
||
yellow: '\x1b[33m',
|
||
blue: '\x1b[34m',
|
||
magenta: '\x1b[35m',
|
||
cyan: '\x1b[36m',
|
||
};
|
||
|
||
function colorLog(color, message) {
|
||
console.log(`${colors[color]}${message}${colors.reset}`);
|
||
}
|
||
|
||
function checkEnvironment() {
|
||
colorLog('cyan', '\n🔍 检查环境配置...\n');
|
||
|
||
const requiredEnvVars = [
|
||
'ZULIP_SERVER_URL',
|
||
'ZULIP_BOT_EMAIL',
|
||
'ZULIP_BOT_API_KEY'
|
||
];
|
||
|
||
const optionalEnvVars = [
|
||
'ZULIP_TEST_STREAM',
|
||
'ZULIP_TEST_TOPIC'
|
||
];
|
||
|
||
let hasRequired = true;
|
||
|
||
// 检查必需的环境变量
|
||
requiredEnvVars.forEach(varName => {
|
||
if (process.env[varName]) {
|
||
colorLog('green', `✅ ${varName}: ${process.env[varName].substring(0, 20)}...`);
|
||
} else {
|
||
colorLog('red', `❌ ${varName}: 未设置`);
|
||
hasRequired = false;
|
||
}
|
||
});
|
||
|
||
// 检查可选的环境变量
|
||
optionalEnvVars.forEach(varName => {
|
||
if (process.env[varName]) {
|
||
colorLog('yellow', `🔧 ${varName}: ${process.env[varName]}`);
|
||
} else {
|
||
colorLog('yellow', `🔧 ${varName}: 使用默认值`);
|
||
}
|
||
});
|
||
|
||
if (!hasRequired) {
|
||
colorLog('red', '\n❌ 缺少必需的环境变量!');
|
||
colorLog('yellow', '\n请设置以下环境变量:');
|
||
colorLog('yellow', 'export ZULIP_SERVER_URL="https://your-zulip-server.com"');
|
||
colorLog('yellow', 'export ZULIP_BOT_EMAIL="your-bot@example.com"');
|
||
colorLog('yellow', 'export ZULIP_BOT_API_KEY="your-api-key"');
|
||
colorLog('yellow', '\n可选配置:');
|
||
colorLog('yellow', 'export ZULIP_TEST_STREAM="test-stream"');
|
||
colorLog('yellow', 'export ZULIP_TEST_TOPIC="API Test"');
|
||
return false;
|
||
}
|
||
|
||
colorLog('green', '\n✅ 环境配置检查通过!\n');
|
||
return true;
|
||
}
|
||
|
||
function runTest(testFile, description) {
|
||
colorLog('blue', `\n🧪 运行测试: ${description}`);
|
||
colorLog('blue', `📁 文件: ${testFile}\n`);
|
||
|
||
try {
|
||
const command = `npm test -- ${testFile} --verbose`;
|
||
execSync(command, {
|
||
stdio: 'inherit',
|
||
cwd: process.cwd()
|
||
});
|
||
colorLog('green', `✅ ${description} - 测试通过\n`);
|
||
return true;
|
||
} catch (error) {
|
||
colorLog('red', `❌ ${description} - 测试失败\n`);
|
||
return false;
|
||
}
|
||
}
|
||
|
||
function main() {
|
||
colorLog('bright', '🚀 Zulip集成测试运行器\n');
|
||
colorLog('bright', '=' .repeat(50));
|
||
|
||
// 检查环境配置
|
||
if (!checkEnvironment()) {
|
||
process.exit(1);
|
||
}
|
||
|
||
const tests = [
|
||
{
|
||
file: 'src/core/zulip_core/services/zulip_message_integration.spec.ts',
|
||
description: 'Zulip消息发送集成测试'
|
||
},
|
||
{
|
||
file: 'test/zulip_integration/chat_message_e2e.spec.ts',
|
||
description: '聊天消息端到端测试'
|
||
},
|
||
{
|
||
file: 'test/zulip_integration/real_zulip_api.spec.ts',
|
||
description: '真实Zulip API测试'
|
||
}
|
||
];
|
||
|
||
let passedTests = 0;
|
||
let totalTests = tests.length;
|
||
|
||
// 运行所有测试
|
||
tests.forEach(test => {
|
||
if (fs.existsSync(test.file)) {
|
||
if (runTest(test.file, test.description)) {
|
||
passedTests++;
|
||
}
|
||
} else {
|
||
colorLog('yellow', `⚠️ 测试文件不存在: ${test.file}`);
|
||
totalTests--;
|
||
}
|
||
});
|
||
|
||
// 输出测试结果
|
||
colorLog('bright', '\n' + '=' .repeat(50));
|
||
colorLog('bright', '📊 测试结果汇总');
|
||
colorLog('bright', '=' .repeat(50));
|
||
|
||
if (passedTests === totalTests) {
|
||
colorLog('green', `🎉 所有测试通过!(${passedTests}/${totalTests})`);
|
||
colorLog('green', '\n✨ Zulip集成功能正常工作!');
|
||
} else {
|
||
colorLog('red', `❌ 部分测试失败 (${passedTests}/${totalTests})`);
|
||
colorLog('yellow', '\n请检查失败的测试并修复问题。');
|
||
}
|
||
|
||
// 提供有用的信息
|
||
colorLog('cyan', '\n💡 提示:');
|
||
colorLog('cyan', '- 确保Zulip服务器可访问');
|
||
colorLog('cyan', '- 检查API Key权限');
|
||
colorLog('cyan', '- 确认测试Stream存在');
|
||
colorLog('cyan', '- 查看详细日志了解错误原因');
|
||
|
||
process.exit(passedTests === totalTests ? 0 : 1);
|
||
}
|
||
|
||
// 处理命令行参数
|
||
if (process.argv.includes('--help') || process.argv.includes('-h')) {
|
||
console.log(`
|
||
Zulip集成测试运行器
|
||
|
||
用法:
|
||
node scripts/test-zulip-integration.js [选项]
|
||
|
||
选项:
|
||
--help, -h 显示帮助信息
|
||
--check-env 仅检查环境配置
|
||
|
||
环境变量:
|
||
ZULIP_SERVER_URL Zulip服务器地址 (必需)
|
||
ZULIP_BOT_EMAIL 机器人邮箱 (必需)
|
||
ZULIP_BOT_API_KEY API密钥 (必需)
|
||
ZULIP_TEST_STREAM 测试Stream名称 (可选)
|
||
ZULIP_TEST_TOPIC 测试Topic名称 (可选)
|
||
|
||
示例:
|
||
export ZULIP_SERVER_URL="https://your-zulip.com"
|
||
export ZULIP_BOT_EMAIL="bot@example.com"
|
||
export ZULIP_BOT_API_KEY="your-api-key"
|
||
node scripts/test-zulip-integration.js
|
||
`);
|
||
process.exit(0);
|
||
}
|
||
|
||
if (process.argv.includes('--check-env')) {
|
||
checkEnvironment();
|
||
process.exit(0);
|
||
}
|
||
|
||
// 运行主程序
|
||
main(); |