estructura_automation
Version:
Paquete de estructura de automation de paguetodo
92 lines (77 loc) • 3.42 kB
JavaScript
/* eslint-disable @typescript-eslint/no-require-imports */
/* eslint-disable no-console */
/**
* ========================================================================================
* GENERADOR DE CASOS DE PRUEBA A PARTIR DE ARCHIVOS GHERKIN - REFACTORIZADO
* ----------------------------------------------------------------------------------------
* Este script orquesta la generación de documentos HTML con estructura de tarjetas
* y breadcrumbs siguiendo la jerarquía: App → Módulo → Caso de Prueba → Pasos
*
* ARQUITECTURA REFACTORIZADA:
* - test-scanner.cjs: Parsing y escaneo de archivos
* - metadata-builder.cjs: Generación de metadata y estadísticas para los tests
* - html-generator.cjs: Generación de HTML e interfaces
* - generator.cjs: Llama a los helpers y ejecuta el generador
* ========================================================================================
*/
// Importaciones de módulos refactorizados
const fs = require('fs');
const path = require('path');
// Helpers especializados
const testScanner = require('./helpers/test-scanner.cjs');
const metadataBuilder = require('./helpers/metadata-builder.cjs');
const htmlGenerator = require('./helpers/html-generator.cjs');
// Configuración: Directorio base donde buscar apps y módulos
const FEATURES_DIR = path.resolve(path.join(__dirname, '../../documentation'));
const OUTPUT_FILE = path.resolve(path.join(__dirname, '../index.html'));
const METADATA_FILE = path.resolve(path.join(__dirname, '../tests-metadata.json'));
/**
* Función principal que ejecuta el generador
*/
const main = () => {
try {
// 1. ESCANEAR Y PARSEAR archivos de prueba
const hierarchicalData = testScanner.buildHierarchicalData(FEATURES_DIR);
// Verificar que existan aplicaciones
const appIds = Object.keys(hierarchicalData.apps);
if (appIds.length === 0) {
throw new Error('No se encontraron carpetas dentro de la carpeta documentation');
}
// 2. GENERAR METADATA para sincronización externa
const metadata = metadataBuilder.generateTestsMetadata(hierarchicalData);
// 3. VALIDAR integridad de datos (opcional)
const validation = metadataBuilder.validateHierarchicalData(hierarchicalData);
if (!validation.isValid) {
console.warn('⚠️ Advertencias de validación encontradas:');
validation.warnings.forEach(warning => console.warn(` - ${warning}`));
if (validation.errors.length > 0) {
console.error('❌ Errores de validación encontrados:');
validation.errors.forEach(error => console.error(` - ${error}`));
}
}
// 4. GENERAR HTML interactivo
const appId = appIds[0]; // Usar la primera aplicación disponible
const app = hierarchicalData.apps[appId];
const html = htmlGenerator.generateHTML(app, {
title: `Casos de Prueba - ${app.name}`,
cssPath: 'styles/styles.css'
});
// 5. GUARDAR archivos generados
fs.writeFileSync(OUTPUT_FILE, html);
fs.writeFileSync(METADATA_FILE, JSON.stringify(metadata, null, 2));
// 6. REPORTE final
} catch (error) {
throw new Error(`❌ Error en la generación: ${error.message}`);
}
};
// Ejecutar el script solo si es llamado directamente
if (require.main === module) {
main();
}
// Exportar para uso como módulo
module.exports = {
main,
FEATURES_DIR,
OUTPUT_FILE,
METADATA_FILE
};