testes/Modulos Angular/scripts/test-api-analyzer.js

206 lines
6.5 KiB
JavaScript

#!/usr/bin/env node
// 🧪 TESTE DO API ANALYZER - Todas as Estratégias
// Script para testar as 4 estratégias de análise de API
const { APIAnalyzer, analyzeAPIForDomain } = require('./create-domain-v2-api-analyzer.js');
console.log('🧪 INICIANDO TESTES DO API ANALYZER...\n');
// Lista de domínios para testar
const testDomains = [
'drivers', // ✅ Existe na API
'vehicles', // ✅ Existe na API
'companies', // ✅ Existe na API
'users', // 🔍 Teste padrão
'products', // 🤖 Smart detection
'orders', // 🔄 Fallback
'testdomain' // 🔄 Fallback completo
];
async function testAllStrategies() {
const analyzer = new APIAnalyzer();
console.log('🎯 TESTANDO TODAS AS ESTRATÉGIAS...\n');
for (const domain of testDomains) {
console.log(`\n${'='.repeat(60)}`);
console.log(`🔍 TESTANDO DOMÍNIO: ${domain.toUpperCase()}`);
console.log('='.repeat(60));
try {
const result = await analyzer.analyzeAPI(domain);
if (result.success) {
console.log(`✅ SUCESSO! Estratégia usada: ${result.strategy}`);
console.log(`📊 Campos detectados: ${result.fields.length}`);
console.log(`📝 Metadados:`, JSON.stringify(result.metadata, null, 2));
// Mostrar início da interface gerada
const interfacePreview = result.interface.split('\n').slice(0, 10).join('\n');
console.log(`\n📋 Preview da Interface:`);
console.log('```typescript');
console.log(interfacePreview);
console.log('...');
console.log('```');
} else {
console.log('❌ FALHA em todas as estratégias');
}
} catch (error) {
console.log(`❌ ERRO: ${error.message}`);
}
// Pausa entre testes para não sobrecarregar a API
await sleep(2000);
}
}
async function testSpecificStrategies() {
console.log('\n🎯 TESTANDO ESTRATÉGIAS ESPECÍFICAS...\n');
const analyzer = new APIAnalyzer();
// Teste 1: OpenAPI/Swagger
console.log('📋 TESTE 1: OpenAPI/Swagger');
try {
const result = await analyzer.analyzeOpenAPI('vehicles');
console.log(`OpenAPI Result:`, result.success ? '✅ Sucesso' : '❌ Falha');
if (result.success) {
console.log(`Schema detectado: ${result.metadata.schemaName}`);
}
} catch (error) {
console.log(`OpenAPI Error: ${error.message}`);
}
// Teste 2: API Response Analysis
console.log('\n🔍 TESTE 2: API Response Analysis');
try {
const result = await analyzer.analyzeAPIResponse('drivers');
console.log(`API Response Result:`, result.success ? '✅ Sucesso' : '❌ Falha');
if (result.success) {
console.log(`Endpoint usado: ${result.metadata.endpoint}`);
console.log(`Sample size: ${result.metadata.sampleSize}`);
}
} catch (error) {
console.log(`API Response Error: ${error.message}`);
}
// Teste 3: Smart Detection
console.log('\n🤖 TESTE 3: Smart Detection');
try {
const result = await analyzer.smartDetection('vehicle');
console.log(`Smart Detection Result:`, result.success ? '✅ Sucesso' : '❌ Falha');
if (result.success) {
console.log(`Padrões detectados: ${result.metadata.patterns.join(', ')}`);
}
} catch (error) {
console.log(`Smart Detection Error: ${error.message}`);
}
// Teste 4: Intelligent Fallback
console.log('\n🔄 TESTE 4: Intelligent Fallback');
try {
const result = analyzer.intelligentFallback('customdomain');
console.log(`Fallback Result:`, result.success ? '✅ Sucesso' : '❌ Falha');
if (result.success) {
console.log(`Base fields: ${result.metadata.baseFields}`);
console.log(`Specific fields: ${result.metadata.specificFields}`);
}
} catch (error) {
console.log(`Fallback Error: ${error.message}`);
}
}
async function testPatternDetection() {
console.log('\n🎯 TESTANDO DETECÇÃO DE PADRÕES...\n');
const analyzer = new APIAnalyzer();
const testPatterns = [
'vehicle',
'car',
'truck',
'user',
'person',
'customer',
'product',
'item',
'company',
'organization',
'unknowndomain'
];
testPatterns.forEach(domain => {
const patterns = analyzer.getDomainPatterns(domain);
if (patterns.length > 0) {
console.log(`${domain}: ${patterns.length} padrões detectados`);
patterns.forEach(p => console.log(` - ${p.name} (${p.type}) - ${p.description}`));
} else {
console.log(`${domain}: Nenhum padrão detectado`);
}
console.log('');
});
}
async function testEndpoints() {
console.log('\n🔍 TESTANDO ENDPOINTS DA API...\n');
const analyzer = new APIAnalyzer();
const endpoints = [
'https://prafrota-be-bff-tenant-api.grupopra.tech/drivers?page=1&limit=1',
'https://prafrota-be-bff-tenant-api.grupopra.tech/vehicles?page=1&limit=1',
'https://prafrota-be-bff-tenant-api.grupopra.tech/companies?page=1&limit=1',
'https://prafrota-be-bff-tenant-api.grupopra.tech/api-docs',
'https://prafrota-be-bff-tenant-api.grupopra.tech/swagger.json'
];
for (const endpoint of endpoints) {
try {
console.log(`🔍 Testando: ${endpoint}`);
const data = await analyzer.fetchJSON(endpoint);
if (data) {
console.log(`✅ Sucesso! Tipo: ${Array.isArray(data) ? 'Array' : 'Object'}`);
if (data.data && Array.isArray(data.data)) {
console.log(`📊 Records: ${data.data.length}, Total: ${data.totalCount || 'N/A'}`);
} else if (data.openapi || data.swagger) {
console.log(`📋 OpenAPI/Swagger detectado: ${data.openapi || data.swagger}`);
}
} else {
console.log(`❌ Resposta vazia`);
}
} catch (error) {
console.log(`❌ Erro: ${error.message}`);
}
await sleep(1000);
}
}
function sleep(ms) {
return new Promise(resolve => setTimeout(resolve, ms));
}
// Executar todos os testes
async function runAllTests() {
console.log('🚀 API ANALYZER - TESTE COMPLETO\n');
await testSpecificStrategies();
await testPatternDetection();
await testEndpoints();
await testAllStrategies();
console.log('\n🏁 TESTES CONCLUÍDOS!');
console.log('📊 RESUMO:');
console.log('✅ Todas as 4 estratégias testadas');
console.log('✅ Detecção de padrões validada');
console.log('✅ Endpoints da API verificados');
console.log('✅ Análise híbrida completa');
console.log('\n🎯 READY TO USE! API Analyzer está funcional.');
}
if (require.main === module) {
runAllTests().catch(console.error);
}