259 lines
8.4 KiB
JavaScript
259 lines
8.4 KiB
JavaScript
#!/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');
|