const db = require('../config/db'); const Ticket = require('../models/Ticket'); const TicketVisita = require('../models/TicketVisita'); const TareasHubService = require('../config/tareasHubService'); async function run() { console.log('--- 1. Probando obtenerTecnicos() ---'); const tecnicos = await TareasHubService.obtenerTecnicos(); console.log(`Técnicos obtenidos (${tecnicos.length}):`, tecnicos.map(t => `${t.nombre || t.email} <${t.email}>`)); const emailTecnico = tecnicos.length > 0 ? tecnicos[0].email : 'pablinux@hotmail.es'; const nombreTecnico = tecnicos.length > 0 ? (tecnicos[0].nombre || tecnicos[0].email) : 'Jefferson'; console.log('\n--- 2. Creando Visita Técnica en Hub (tareas.telcotronics.com) ---'); const hubRes = await TareasHubService.crearVisita({ ticketId: 1, titulo: 'Visita de Prueba Automatizada - Help Desk', descripcion: 'Verificación de conectividad de fibra óptica en cliente de prueba.', emailTecnico: emailTecnico, fechaVisita: new Date(), ubicacion: 'Av. 10 de Agosto y Colón, Quito', coordenadas: '-0.198321, -78.490123', referencia: 'Edificio Plaza Piso 2', prioridad: 'Alta', checklist: [ 'Revisión física de acometida y ONT', 'Medición de potencia en splitter (-19dBm esperado)', 'Prueba de velocidad LAN y firma de acta' ] }); console.log('Respuesta de Hub:', hubRes); console.log('\n--- 3. Guardando en ticket_visitas (MariaDB) ---'); const visitaId = await TicketVisita.create({ company_id: 3, ticket_id: 1, external_id: hubRes.tareaId, tecnico_email: emailTecnico, tecnico_nombre: nombreTecnico, titulo: 'Visita de Prueba Automatizada - Help Desk', descripcion: 'Verificación de conectividad de fibra óptica en cliente de prueba.', ubicacion: 'Av. 10 de Agosto y Colón, Quito', fecha_visita: new Date(), estado: 'programada', checklist_json: [ 'Revisión física de acometida y ONT', 'Medición de potencia en splitter (-19dBm esperado)', 'Prueba de velocidad LAN y firma de acta' ], historial_json: hubRes.tarea }); console.log('Visita creada en MariaDB con ID:', visitaId); console.log('\n--- 4. Consultando Visita creada en MariaDB ---'); const visitaEnDb = await TicketVisita.findByTicket(3, 1); console.log('Registro en DB:', { id: visitaEnDb.id, ticket_id: visitaEnDb.ticket_id, external_id: visitaEnDb.external_id, tecnico: visitaEnDb.tecnico_nombre, estado: visitaEnDb.estado, fecha_visita: visitaEnDb.fecha_visita }); console.log('\n--- 5. Probando sincronización con Hub (consultarEstadoVisita) ---'); const syncRes = await TareasHubService.consultarEstadoVisita(hubRes.tareaId); console.log('Estado sincronizado desde Hub:', { tareaId: syncRes.tarea._id, estado: syncRes.tarea.estado, checklistTotal: syncRes.tarea.checklist ? syncRes.tarea.checklist.length : 0, progreso: syncRes.tarea.progreso_checklist }); console.log('\n--- 6. Limpieza de prueba ---'); // Limpiar en MariaDB await db.query('DELETE FROM ticket_visitas WHERE id = ?', [visitaId]); console.log('Registro eliminado de MariaDB'); // Limpiar tarea en CT 132 try { const http = require('http'); await new Promise((resolve, reject) => { const req = http.request({ hostname: '192.168.10.160', port: 3000, path: `/api/external/tareas/${hubRes.tareaId}`, method: 'DELETE', headers: { 'x-api-key': 'sigma_crm_test_key_123' } }, (res) => { res.on('data', () => {}); res.on('end', () => { console.log(`Tarea ${hubRes.tareaId} eliminada de tareas.telcotronics.com (Status: ${res.statusCode})`); resolve(); }); }); req.on('error', reject); req.end(); }); } catch (e) { console.warn('Advertencia al eliminar tarea de prueba en Hub:', e.message); } console.log('\n✅ ¡FLUJO COMPLETO DE VISITAS TÉCNICAS (FSM) VERIFICADO SATISFACTORIAMENTE!'); process.exit(0); } run().catch(err => { console.error('❌ Error durante la prueba:', err); process.exit(1); });