UNPKG

erickzao-api-stats-cli

Version:

CLI oficial para configuração automática do API Stats Logger

222 lines (185 loc) 7.28 kB
#!/usr/bin/env node const axios = require('axios'); async function testAutoSetup() { console.log('🧪 Testando fluxo automático de setup...\n'); const baseUrl = process.env.API_STATS_URL || 'http://localhost:3000'; try { // Teste 1: Verificar se servidor está rodando console.log('📡 Teste 1: Conectividade com servidor'); try { const healthResponse = await axios.get(`${baseUrl}/health`, { timeout: 5000 }); console.log('✅ Servidor está rodando'); console.log(`📊 Status: ${healthResponse.status}`); } catch (error) { console.log('❌ Servidor não está rodando em', baseUrl); console.log('💡 Execute: npm run start:dev no projeto principal'); throw new Error('Servidor indisponível'); } // Teste 2: Criar projeto automaticamente console.log('\n📦 Teste 2: Criação automática de projeto'); const projectData = { name: 'test-auto-project', description: 'Projeto de teste para validar auto-criação', environment: 'test' }; const projectResponse = await axios.post(`${baseUrl}/projects`, projectData, { timeout: 10000, headers: { 'Content-Type': 'application/json' } }); const projectId = projectResponse.data._id || projectResponse.data.id; console.log('✅ Projeto criado automaticamente'); console.log(`📋 ID: ${projectId}`); console.log(`📝 Nome: ${projectResponse.data.name}`); // Teste 3: Gerar API key automaticamente console.log('\n🔑 Teste 3: Geração automática de API key'); const apiKeyData = { projectId, description: 'API key de teste gerada automaticamente' }; const apiKeyResponse = await axios.post(`${baseUrl}/api-keys/generate`, apiKeyData, { timeout: 10000, headers: { 'Content-Type': 'application/json' } }); const apiKey = apiKeyResponse.data.key; console.log('✅ API key gerada automaticamente'); console.log(`🔑 Key: ${apiKey.substring(0, 8)}...`); console.log(`📄 Descrição: ${apiKeyResponse.data.description}`); // Teste 4: Validar API key gerada console.log('\n🔍 Teste 4: Validação da API key'); const testLogData = [{ level: 'info', message: 'Teste de validação automática', service: 'test-service', environment: 'test', metadata: { test: true, timestamp: new Date().toISOString() } }]; const logResponse = await axios.post(`${baseUrl}/logs`, testLogData, { headers: { 'x-api-key': apiKey, 'Content-Type': 'application/json' }, timeout: 5000 }); console.log('✅ API key é válida e funcional'); console.log(`📊 Status: ${logResponse.status}`); // Teste 5: Limpeza (remover projeto de teste) console.log('\n🧹 Teste 5: Limpeza de dados de teste'); try { // Revogar API key await axios.delete(`${baseUrl}/api-keys/${apiKey}`, { timeout: 5000 }); console.log('✅ API key revogada'); // Deletar projeto (se endpoint existir) try { await axios.delete(`${baseUrl}/projects/${projectId}`, { timeout: 5000 }); console.log('✅ Projeto de teste removido'); } catch (deleteError) { console.log('⚠️ Projeto não removido (endpoint pode não existir)'); } } catch (cleanupError) { console.log('⚠️ Erro na limpeza (dados de teste podem permanecer)'); } // Resumo console.log('\n🎉 Todos os testes passaram!'); console.log('\n📊 Resumo dos testes:'); console.log('- ✅ Conectividade com servidor'); console.log('- ✅ Criação automática de projeto'); console.log('- ✅ Geração automática de API key'); console.log('- ✅ Validação da API key'); console.log('- ✅ Limpeza de dados de teste'); console.log('\n🚀 Fluxo automático está funcionando perfeitamente!'); console.log('\n💡 Próximos passos:'); console.log('1. Execute: npx api-stats-init'); console.log('2. Siga o wizard interativo'); console.log('3. Seu projeto será criado automaticamente'); return true; } catch (error) { console.error('\n❌ Erro no teste:', error.message); if (error.response) { console.error('📊 Status:', error.response.status); console.error('📄 Dados:', error.response.data); } console.log('\n🔧 Troubleshooting:'); console.log('1. Verifique se o servidor está rodando'); console.log('2. Confirme a URL do servidor:', baseUrl); console.log('3. Verifique as configurações de CORS/firewall'); console.log('4. Tente: export API_STATS_URL=http://localhost:3000'); return false; } } // Teste de funcionalidades específicas async function testSpecificFeatures() { console.log('\n🔬 Testando funcionalidades específicas...\n'); const baseUrl = process.env.API_STATS_URL || 'http://localhost:3000'; // Teste de múltiplos projetos console.log('📦 Teste: Múltiplos projetos'); try { const projects = []; for (let i = 1; i <= 3; i++) { const response = await axios.post(`${baseUrl}/projects`, { name: `multi-test-${i}`, description: `Projeto ${i} para teste de múltiplos projetos`, environment: 'test' }); projects.push(response.data); console.log(`✅ Projeto ${i} criado: ${response.data.name}`); } // Cleanup for (const project of projects) { try { await axios.delete(`${baseUrl}/projects/${project._id || project.id}`); } catch (e) { // Ignore cleanup errors } } console.log('✅ Teste de múltiplos projetos passou'); } catch (error) { console.log('❌ Erro no teste de múltiplos projetos:', error.message); } // Teste de API keys com diferentes descrições console.log('\n🔑 Teste: API keys com descrições'); try { const projectResponse = await axios.post(`${baseUrl}/projects`, { name: 'descriptions-test', description: 'Teste de descrições', environment: 'test' }); const projectId = projectResponse.data._id || projectResponse.data.id; const descriptions = [ 'Desenvolvimento local', 'Integração CLI', 'Produção automatizada' ]; for (const desc of descriptions) { const keyResponse = await axios.post(`${baseUrl}/api-keys/generate`, { projectId, description: desc }); console.log(`✅ API key criada: ${desc} (${keyResponse.data.key.substring(0, 8)}...)`); // Revogar key await axios.delete(`${baseUrl}/api-keys/${keyResponse.data.key}`); } // Cleanup try { await axios.delete(`${baseUrl}/projects/${projectId}`); } catch (e) { // Ignore cleanup errors } console.log('✅ Teste de descrições passou'); } catch (error) { console.log('❌ Erro no teste de descrições:', error.message); } } // Executar se chamado diretamente if (require.main === module) { (async () => { const basicTest = await testAutoSetup(); if (basicTest) { await testSpecificFeatures(); } console.log('\n🏁 Testes concluídos!'); })().catch(console.error); } module.exports = { testAutoSetup, testSpecificFeatures };