testes/Modulos Angular/scripts/test-strict-mode.js

124 lines
4.7 KiB
JavaScript
Raw Blame History

This file contains invisible Unicode characters

This file contains invisible Unicode characters that are indistinguishable to humans but may be processed differently by a computer. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

#!/usr/bin/env node
// 🧪 TESTE DO MODO RIGOROSO - API ANALYZER V2.0
// Demonstra como o sistema para a execução quando não consegue acessar endpoints reais
const { analyzeAPIForDomain } = require('./create-domain-v2-api-analyzer.js');
console.log('🧪 TESTE DO MODO RIGOROSO - API ANALYZER V2.0');
console.log('='.repeat(50));
async function testStrictMode() {
const testCases = [
{
name: 'product',
description: 'Domínio que DEVERIA ter endpoint real',
expectation: 'Deve parar execução se não conseguir acessar dados reais'
},
{
name: 'nonexistent',
description: 'Domínio que NÃO existe na API',
expectation: 'Deve parar execução no modo rigoroso'
}
];
for (const testCase of testCases) {
console.log(`\n${'='.repeat(60)}`);
console.log(`🔍 TESTANDO: ${testCase.name.toUpperCase()}`);
console.log(`📋 Descrição: ${testCase.description}`);
console.log(`🎯 Expectativa: ${testCase.expectation}`);
console.log('='.repeat(60));
try {
console.log('🔒 Executando em MODO RIGOROSO...\n');
const result = await analyzeAPIForDomain(testCase.name, undefined, true);
if (result.success) {
console.log(`✅ SUCESSO! Estratégia: ${result.strategy}`);
if (result.strategy === 'response_analysis') {
console.log('🎉 DADOS REAIS DA API DETECTADOS!');
console.log(`📊 Endpoint: ${result.metadata.endpoint}`);
console.log(`📦 Sample size: ${result.metadata.sampleSize}`);
console.log('\n📝 Interface gerada:');
console.log(result.interface.split('\n').slice(0, 10).join('\n'));
console.log('...');
} else {
console.log('⚠️ Usando estratégia alternativa (não dados reais)');
}
} else {
console.log('❌ Falha na análise');
}
} catch (error) {
if (error.code === 'ENDPOINT_ACCESS_FAILED') {
console.log('\n🚨 ERRO CRÍTICO DETECTADO!');
console.log(`${error.message}`);
console.log(`🔗 Endpoint que falhou: ${error.endpoint}`);
console.log('\n🎯 COMPORTAMENTO CORRETO: Sistema parou execução');
console.log('📋 Isso é o esperado quando endpoint existe mas não consegue acessar');
} else if (error.code === 'STRICT_MODE_FAILURE') {
console.log('\n🚨 MODO RIGOROSO - TODAS AS ESTRATÉGIAS FALHARAM!');
console.log(`${error.message}`);
console.log('\n🎯 COMPORTAMENTO CORRETO: Sistema parou execução');
console.log('📋 Isso é o esperado quando não consegue obter dados reais');
} else {
console.log('\n❌ ERRO INESPERADO:');
console.log(error.message);
}
}
console.log('\n' + '⏸️ '.repeat(30));
// Pequena pausa entre testes
await new Promise(resolve => setTimeout(resolve, 2000));
}
console.log('\n🏁 TESTE DE MODO RIGOROSO CONCLUÍDO');
console.log('\n📊 RESUMO:');
console.log('✅ Modo rigoroso implementado');
console.log('✅ Sistema para execução quando não consegue acessar endpoints reais');
console.log('✅ Erros informativos com soluções sugeridas');
console.log('✅ Comportamento correto para diferentes cenários');
console.log('\n🚀 PRONTO PARA PRODUÇÃO!');
console.log('📋 Agora o Create-Domain V2.0 só gera interfaces baseadas em dados reais');
}
// Demonstração de uso normal vs rigoroso
async function demonstrateComparison() {
console.log('\n' + '='.repeat(60));
console.log('🔄 DEMONSTRAÇÃO: MODO NORMAL VS RIGOROSO');
console.log('='.repeat(60));
const testDomain = 'product';
console.log('\n1⃣ MODO NORMAL (strictMode = false):');
try {
const normalResult = await analyzeAPIForDomain(testDomain, undefined, false);
console.log(`✅ Resultado: ${normalResult.strategy} (${normalResult.fields.length} campos)`);
console.log('📋 Modo normal: Sempre retorna resultado (fallback se necessário)');
} catch (error) {
console.log(`❌ Erro no modo normal: ${error.message}`);
}
console.log('\n2⃣ MODO RIGOROSO (strictMode = true):');
try {
const strictResult = await analyzeAPIForDomain(testDomain, undefined, true);
console.log(`✅ Resultado: ${strictResult.strategy} (${strictResult.fields.length} campos)`);
console.log('📋 Modo rigoroso: Só aceita dados reais da API');
} catch (error) {
console.log(`❌ Erro no modo rigoroso: ${error.message}`);
console.log('📋 Modo rigoroso: Para execução se não conseguir dados reais');
}
}
if (require.main === module) {
testStrictMode()
.then(() => demonstrateComparison())
.catch(console.error);
}