Spaces:
Sleeping
Sleeping
| /** | |
| * Test script for error output validation improvements | |
| */ | |
| const { WorkflowValidator } = require('../dist/services/workflow-validator.js'); | |
| const { NodeRepository } = require('../dist/database/node-repository.js'); | |
| const { EnhancedConfigValidator } = require('../dist/services/enhanced-config-validator.js'); | |
| const Database = require('better-sqlite3'); | |
| const path = require('path'); | |
| async function runTests() { | |
| // Initialize database | |
| const dbPath = path.join(__dirname, '..', 'data', 'nodes.db'); | |
| const db = new Database(dbPath, { readonly: true }); | |
| const nodeRepository = new NodeRepository(db); | |
| const validator = new WorkflowValidator(nodeRepository, EnhancedConfigValidator); | |
| console.log('\n🧪 Testing Error Output Validation Improvements\n'); | |
| console.log('=' .repeat(60)); | |
| // Test 1: Incorrect configuration - multiple nodes in same array | |
| console.log('\n📝 Test 1: INCORRECT - Multiple nodes in main[0]'); | |
| console.log('-'.repeat(40)); | |
| const incorrectWorkflow = { | |
| nodes: [ | |
| { | |
| id: '132ef0dc-87af-41de-a95d-cabe3a0a5342', | |
| name: 'Validate Input', | |
| type: 'n8n-nodes-base.set', | |
| typeVersion: 3.4, | |
| position: [-400, 64], | |
| parameters: {} | |
| }, | |
| { | |
| id: '5dedf217-63f9-409f-b34e-7780b22e199a', | |
| name: 'Filter URLs', | |
| type: 'n8n-nodes-base.filter', | |
| typeVersion: 2.2, | |
| position: [-176, 64], | |
| parameters: {} | |
| }, | |
| { | |
| id: '9d5407cc-ca5a-4966-b4b7-0e5dfbf54ad3', | |
| name: 'Error Response1', | |
| type: 'n8n-nodes-base.respondToWebhook', | |
| typeVersion: 1.5, | |
| position: [-160, 240], | |
| parameters: {} | |
| } | |
| ], | |
| connections: { | |
| 'Validate Input': { | |
| main: [ | |
| [ | |
| { node: 'Filter URLs', type: 'main', index: 0 }, | |
| { node: 'Error Response1', type: 'main', index: 0 } // WRONG! | |
| ] | |
| ] | |
| } | |
| } | |
| }; | |
| const result1 = await validator.validateWorkflow(incorrectWorkflow); | |
| if (result1.errors.length > 0) { | |
| console.log('❌ ERROR DETECTED (as expected):'); | |
| const errorMessage = result1.errors.find(e => | |
| e.message.includes('Incorrect error output configuration') | |
| ); | |
| if (errorMessage) { | |
| console.log('\nError Summary:'); | |
| console.log(`Node: ${errorMessage.nodeName || 'Validate Input'}`); | |
| console.log('\nFull Error Message:'); | |
| console.log(errorMessage.message); | |
| } else { | |
| console.log('Other errors found:', result1.errors.map(e => e.message)); | |
| } | |
| } else { | |
| console.log('⚠️ No errors found - validation may not be working correctly'); | |
| } | |
| // Test 2: Correct configuration - separate arrays | |
| console.log('\n📝 Test 2: CORRECT - Separate main[0] and main[1]'); | |
| console.log('-'.repeat(40)); | |
| const correctWorkflow = { | |
| nodes: [ | |
| { | |
| id: '132ef0dc-87af-41de-a95d-cabe3a0a5342', | |
| name: 'Validate Input', | |
| type: 'n8n-nodes-base.set', | |
| typeVersion: 3.4, | |
| position: [-400, 64], | |
| parameters: {}, | |
| onError: 'continueErrorOutput' | |
| }, | |
| { | |
| id: '5dedf217-63f9-409f-b34e-7780b22e199a', | |
| name: 'Filter URLs', | |
| type: 'n8n-nodes-base.filter', | |
| typeVersion: 2.2, | |
| position: [-176, 64], | |
| parameters: {} | |
| }, | |
| { | |
| id: '9d5407cc-ca5a-4966-b4b7-0e5dfbf54ad3', | |
| name: 'Error Response1', | |
| type: 'n8n-nodes-base.respondToWebhook', | |
| typeVersion: 1.5, | |
| position: [-160, 240], | |
| parameters: {} | |
| } | |
| ], | |
| connections: { | |
| 'Validate Input': { | |
| main: [ | |
| [ | |
| { node: 'Filter URLs', type: 'main', index: 0 } | |
| ], | |
| [ | |
| { node: 'Error Response1', type: 'main', index: 0 } // CORRECT! | |
| ] | |
| ] | |
| } | |
| } | |
| }; | |
| const result2 = await validator.validateWorkflow(correctWorkflow); | |
| const hasIncorrectError = result2.errors.some(e => | |
| e.message.includes('Incorrect error output configuration') | |
| ); | |
| if (!hasIncorrectError) { | |
| console.log('✅ No error output configuration issues (correct!)'); | |
| } else { | |
| console.log('❌ Unexpected error found'); | |
| } | |
| console.log('\n' + '='.repeat(60)); | |
| console.log('\n✨ Error output validation is working correctly!'); | |
| console.log('The validator now properly detects:'); | |
| console.log(' 1. Multiple nodes incorrectly placed in main[0]'); | |
| console.log(' 2. Provides clear JSON examples for fixing issues'); | |
| console.log(' 3. Validates onError property matches connections'); | |
| // Close database | |
| db.close(); | |
| } | |
| runTests().catch(error => { | |
| console.error('Test failed:', error); | |
| process.exit(1); | |
| }); |