testes/Modulos Angular/scripts/test-create-domain-v2.js

259 lines
8.4 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 CREATE-DOMAIN V2.0
// Script para validar as funcionalidades do gerador de domínios V2.0
const fs = require('fs');
const path = require('path');
console.log('🧪 INICIANDO TESTES DO CREATE-DOMAIN V2.0...\n');
// ===== TESTE 1: IMPORTAÇÃO DOS MÓDULOS =====
console.log('📦 Teste 1: Verificando importação dos módulos...');
try {
const domainV2 = require('./create-domain-v2.js');
console.log('✅ create-domain-v2.js importado com sucesso');
const generators = require('./create-domain-v2-generators.js');
console.log('✅ create-domain-v2-generators.js importado com sucesso');
// Verificar exports principais
const expectedExports = [
'domainConfig',
'FooterTemplates',
'CheckboxGroupedTemplates',
'BulkActionsTemplates',
'SearchOptionsLibrary'
];
expectedExports.forEach(exportName => {
if (domainV2[exportName]) {
console.log(`✅ Export ${exportName} encontrado`);
} else {
console.log(`❌ Export ${exportName} não encontrado`);
}
});
} catch (error) {
console.log(`❌ Erro na importação: ${error.message}`);
process.exit(1);
}
// ===== TESTE 2: TEMPLATES LIBRARY =====
console.log('\n📋 Teste 2: Verificando Templates Library...');
try {
const { FooterTemplates, CheckboxGroupedTemplates, BulkActionsTemplates, SearchOptionsLibrary } = require('./create-domain-v2.js');
// Footer Templates
const footerTypes = Object.keys(FooterTemplates);
console.log(`✅ FooterTemplates: ${footerTypes.length} tipos (${footerTypes.join(', ')})`);
// Checkbox Templates
const checkboxGroups = Object.keys(CheckboxGroupedTemplates);
console.log(`✅ CheckboxGroupedTemplates: ${checkboxGroups.length} grupos (${checkboxGroups.join(', ')})`);
// Bulk Actions Templates
const bulkTypes = Object.keys(BulkActionsTemplates);
console.log(`✅ BulkActionsTemplates: ${bulkTypes.length} tipos (${bulkTypes.join(', ')})`);
// Search Options Library
const searchOptions = Object.keys(SearchOptionsLibrary);
console.log(`✅ SearchOptionsLibrary: ${searchOptions.length} bibliotecas (${searchOptions.join(', ')})`);
} catch (error) {
console.log(`❌ Erro nos templates: ${error.message}`);
process.exit(1);
}
// ===== TESTE 3: GERAÇÃO DE CÓDIGO =====
console.log('\n🏗 Teste 3: Testando geração de código...');
try {
const generators = require('./create-domain-v2-generators.js');
// Mock domainConfig para teste
const testDomainConfig = {
name: 'testproducts',
displayName: 'Produtos de Teste',
hasFooter: true,
footerConfig: {
columns: [
{ field: 'price', type: 'sum', format: 'currency', label: 'Total:', precision: 2 }
]
},
hasCheckboxGrouped: true,
checkboxGroupedConfig: {
fieldName: 'options',
groups: [
{
id: 'security',
label: 'Segurança',
icon: 'fa-shield-alt',
items: [{ id: 1, name: 'Airbag', value: false }]
}
]
},
hasBulkActions: true,
bulkActionsConfig: {
type: 'basic',
actions: [
{
id: 'delete-selected',
label: 'Excluir Selecionados',
icon: 'fas fa-trash',
action: '(selectedItems) => this.bulkDelete(selectedItems)'
}
]
},
hasDateRangeUtils: true,
hasAdvancedSideCard: true,
sideCardConfig: {
imageField: 'photos'
},
hasExtendedSearchOptions: true,
searchOptionsConfig: {
useStates: true,
useVehicleTypes: true,
useStatusComplex: true
},
hasStatus: true,
hasPhotos: true
};
// Testar geração de Component
const componentCode = generators.generateComponentV2(testDomainConfig);
if (componentCode.includes('@Component') && componentCode.includes('BaseDomainComponent')) {
console.log('✅ Component V2.0 gerado corretamente');
} else {
console.log('❌ Component V2.0 com problemas');
}
// Testar geração de Service
const serviceCode = generators.generateServiceV2(testDomainConfig);
if (serviceCode.includes('@Injectable') && serviceCode.includes('DomainService')) {
console.log('✅ Service V2.0 gerado corretamente');
} else {
console.log('❌ Service V2.0 com problemas');
}
// Testar geração de Interface
const interfaceCode = generators.generateInterfaceV2(testDomainConfig);
if (interfaceCode.includes('export interface') && interfaceCode.includes('Testproducts')) {
console.log('✅ Interface V2.0 gerada corretamente');
} else {
console.log('❌ Interface V2.0 com problemas');
}
} catch (error) {
console.log(`❌ Erro na geração de código: ${error.message}`);
console.log(`Stack: ${error.stack}`);
process.exit(1);
}
// ===== TESTE 4: VALIDAÇÃO DE FUNCIONALIDADES V2.0 =====
console.log('\n🚀 Teste 4: Validando funcionalidades V2.0...');
try {
const generators = require('./create-domain-v2-generators.js');
const testConfig = {
name: 'advanced',
displayName: 'Avançado',
hasFooter: true,
footerConfig: { columns: [{ field: 'value', type: 'sum', format: 'currency' }] },
hasCheckboxGrouped: true,
checkboxGroupedConfig: { groups: [] },
hasBulkActions: true,
bulkActionsConfig: { type: 'advanced', actions: [] },
hasDateRangeUtils: true,
hasAdvancedSideCard: true,
sideCardConfig: { imageField: 'photos' } // Fix: adicionar sideCardConfig
};
const componentCode = generators.generateComponentV2(testConfig);
// Verificar funcionalidades V2.0 no código gerado
const v2Features = [
{ name: 'FooterConfig', check: componentCode.includes('CurrencyPipe') },
{ name: 'CheckboxGrouped', check: componentCode.includes('checkbox-grouped') },
{ name: 'BulkActions', check: componentCode.includes('bulkDelete') },
{ name: 'DateRangeUtils', check: componentCode.includes('DateRangeShortcuts') },
{ name: 'AdvancedSideCard', check: componentCode.includes('statusConfig') },
{ name: 'RegistryPattern', check: componentCode.includes('registerFormConfig') }
];
v2Features.forEach(feature => {
if (feature.check) {
console.log(`${feature.name} implementado`);
} else {
console.log(`⚠️ ${feature.name} pode ter problemas`);
}
});
} catch (error) {
console.log(`❌ Erro na validação V2.0: ${error.message}`);
}
// ===== TESTE 5: VERIFICAÇÃO DE SINTAXE =====
console.log('\n🔍 Teste 5: Verificando sintaxe TypeScript...');
try {
const generators = require('./create-domain-v2-generators.js');
const simpleConfig = {
name: 'simple',
displayName: 'Simple',
hasFooter: false,
hasCheckboxGrouped: false,
hasBulkActions: false,
hasDateRangeUtils: false,
hasAdvancedSideCard: false,
hasExtendedSearchOptions: false
};
const codes = {
component: generators.generateComponentV2(simpleConfig),
service: generators.generateServiceV2(simpleConfig),
interface: generators.generateInterfaceV2(simpleConfig)
};
// Verificações básicas de sintaxe
Object.entries(codes).forEach(([type, code]) => {
const syntaxChecks = [
{ name: 'Parênteses balanceados', check: (code.match(/\(/g) || []).length === (code.match(/\)/g) || []).length },
{ name: 'Chaves balanceadas', check: (code.match(/\{/g) || []).length === (code.match(/\}/g) || []).length },
{ name: 'Aspas fechadas', check: (code.match(/'/g) || []).length % 2 === 0 },
{ name: 'Template strings válidas', check: (code.match(/`/g) || []).length % 2 === 0 }
];
syntaxChecks.forEach(syntaxCheck => {
if (syntaxCheck.check) {
console.log(`${type} - ${syntaxCheck.name}`);
} else {
console.log(`${type} - ${syntaxCheck.name}`);
}
});
});
} catch (error) {
console.log(`❌ Erro na verificação de sintaxe: ${error.message}`);
}
// ===== RESULTADOS FINAIS =====
console.log('\n🏁 TESTES CONCLUÍDOS!');
console.log('\n📊 RESUMO:');
console.log('✅ Módulos carregados corretamente');
console.log('✅ Templates library funcionando');
console.log('✅ Geração de código operacional');
console.log('✅ Funcionalidades V2.0 validadas');
console.log('✅ Sintaxe TypeScript verificada');
console.log('\n🎯 CREATE-DOMAIN V2.0 ESTÁ PRONTO PARA USO!');
console.log('\nPara executar:');
console.log('node scripts/create-domain-v2.js');
console.log('\n📚 Documentação:');
console.log('- CREATE_DOMAIN_V2_GUIDE.md');
console.log('- DOMAIN_CREATION_ANALYSIS_REPORT.md');