const path = require('path'); const Herramienta = require('../models/Herramienta'); const HerramientaSet = require('../models/HerramientaSet'); const HerramientaAsignacion = require('../models/HerramientaAsignacion'); const db = require('../config/db'); async function testFotoFlow() { console.log('=== TEST DE FLUJO DE HERRAMIENTAS Y FOTOGRAFÍAS ==='); const companyId = 1; // 1. Crear herramienta con foto simulada console.log('1. Creando herramienta de prueba con foto_url...'); const testToolId = await Herramienta.create({ company_id: companyId, nombre: 'Reflectómetro de Prueba OTDR', codigo: 'TEST-FOTO-01', numero_serie: 'SN-TEST-8899', categoria: 'medicion', marca: 'Anritsu', modelo: 'MT9090A', estado: 'operativo', ubicacion_bodega: 'Bodega Central - Estante A1', notas: 'Herramienta para verificar soporte fotográfico', foto_url: '/uploads/herramientas/test_otdr.jpg' }); console.log(' ✓ Herramienta creada con ID:', testToolId); const fetchedTool = await Herramienta.findById(testToolId, companyId); console.log(' ✓ Herramienta recuperada:', fetchedTool.nombre, '| foto_url:', fetchedTool.foto_url); // 2. Crear Set de Herramientas con foto simulada console.log('2. Creando Set con foto_url...'); const testSetId = await HerramientaSet.create({ company_id: companyId, nombre: 'Kit de Certificación Fotográfico', codigo: 'SET-FOTO-01', descripcion: 'Kit con evidencia fotográfica del maletín completo', categoria: 'fibra_optica', foto_url: '/uploads/herramientas/test_kit.jpg' }, [testToolId]); console.log(' ✓ Set creado con ID:', testSetId); const fetchedSet = await HerramientaSet.findById(testSetId, companyId); console.log(' ✓ Set recuperado:', fetchedSet.nombre, '| foto_url:', fetchedSet.foto_url, '| items:', fetchedSet.herramientas.length); // 3. Crear Asignación a técnico con foto_entrega_url console.log('3. Creando asignación de custodia con foto_entrega_url...'); const [users] = await db.query("SELECT id FROM users WHERE company_id = ? AND rol IN ('agent', 'admin') LIMIT 1", [companyId]); const tecnicoId = users[0].id; const asignacionId = await HerramientaAsignacion.create({ company_id: companyId, tecnico_id: tecnicoId, set_id: testSetId, tipo_asignacion: 'dotacion_fija', observaciones_entrega: 'Entregado maletín precintado y verificado fotográficamente', foto_entrega_url: '/uploads/herramientas/test_entrega.jpg', asignado_por: tecnicoId }); console.log(' ✓ Asignación creada con ID:', asignacionId); const fetchedAsig = await HerramientaAsignacion.findById(asignacionId, companyId); console.log(' ✓ Asignación recuperada:', fetchedAsig.set_nombre, '| foto_entrega_url:', fetchedAsig.foto_entrega_url); // 4. Registrar Devolución con foto_devolucion_url console.log('4. Registrando devolución con foto_devolucion_url...'); await HerramientaAsignacion.devolver(asignacionId, companyId, { observaciones_devolucion: 'Reingresado a bodega con evidencia fotográfica', estado: 'devuelto', foto_devolucion_url: '/uploads/herramientas/test_devolucion.jpg' }); const returnedAsig = await HerramientaAsignacion.findById(asignacionId, companyId); console.log(' ✓ Devolución verificada:', returnedAsig.estado, '| foto_devolucion_url:', returnedAsig.foto_devolucion_url); // 5. Limpieza de datos de prueba console.log('5. Limpiando datos de prueba...'); await HerramientaAsignacion.delete(asignacionId, companyId); await HerramientaSet.delete(testSetId, companyId); await Herramienta.delete(testToolId, companyId); console.log(' ✓ Datos de prueba eliminados correctamente.'); console.log('=== TODOS LOS TESTS DE PERSISTENCIA Y MODELOS PASARON EXITOSAMENTE ==='); process.exit(0); } testFotoFlow().catch(err => { console.error('ERROR EN TEST:', err); process.exit(1); });