n8n-mcp
Version:
Integration between n8n workflow automation and Model Context Protocol (MCP)
136 lines • 6.47 kB
JavaScript
;
Object.defineProperty(exports, "__esModule", { value: true });
const dotenv_1 = require("dotenv");
const logger_1 = require("../utils/logger");
const n8n_validation_1 = require("../services/n8n-validation");
(0, dotenv_1.config)();
function testCleanWorkflowFunctions() {
logger_1.logger.info('Testing Issue #45 Fix: cleanWorkflowForUpdate should not add default settings\n');
logger_1.logger.info('=== Test 1: cleanWorkflowForUpdate without settings ===');
const workflowWithoutSettings = {
id: 'test-123',
name: 'Test Workflow',
nodes: [],
connections: {},
active: false,
createdAt: '2024-01-01T00:00:00.000Z',
updatedAt: '2024-01-01T00:00:00.000Z',
versionId: 'version-123'
};
const cleanedUpdate = (0, n8n_validation_1.cleanWorkflowForUpdate)(workflowWithoutSettings);
if ('settings' in cleanedUpdate) {
logger_1.logger.error('❌ FAIL: cleanWorkflowForUpdate added settings when it should not have');
logger_1.logger.error(' Found settings:', JSON.stringify(cleanedUpdate.settings));
}
else {
logger_1.logger.info('✅ PASS: cleanWorkflowForUpdate did not add settings');
}
logger_1.logger.info('\n=== Test 2: cleanWorkflowForUpdate with existing settings ===');
const workflowWithSettings = {
...workflowWithoutSettings,
settings: {
executionOrder: 'v1',
saveDataErrorExecution: 'none',
saveDataSuccessExecution: 'none',
saveManualExecutions: false,
saveExecutionProgress: false
}
};
const cleanedUpdate2 = (0, n8n_validation_1.cleanWorkflowForUpdate)(workflowWithSettings);
if ('settings' in cleanedUpdate2) {
const settingsMatch = JSON.stringify(cleanedUpdate2.settings) === JSON.stringify(workflowWithSettings.settings);
if (settingsMatch) {
logger_1.logger.info('✅ PASS: cleanWorkflowForUpdate preserved existing settings without modification');
}
else {
logger_1.logger.error('❌ FAIL: cleanWorkflowForUpdate modified existing settings');
logger_1.logger.error(' Original:', JSON.stringify(workflowWithSettings.settings));
logger_1.logger.error(' Cleaned:', JSON.stringify(cleanedUpdate2.settings));
}
}
else {
logger_1.logger.error('❌ FAIL: cleanWorkflowForUpdate removed existing settings');
}
logger_1.logger.info('\n=== Test 3: cleanWorkflowForUpdate with partial settings ===');
const workflowWithPartialSettings = {
...workflowWithoutSettings,
settings: {
executionOrder: 'v1'
}
};
const cleanedUpdate3 = (0, n8n_validation_1.cleanWorkflowForUpdate)(workflowWithPartialSettings);
if ('settings' in cleanedUpdate3) {
const settingsKeys = cleanedUpdate3.settings ? Object.keys(cleanedUpdate3.settings) : [];
const hasOnlyExecutionOrder = settingsKeys.length === 1 &&
cleanedUpdate3.settings?.executionOrder === 'v1';
if (hasOnlyExecutionOrder) {
logger_1.logger.info('✅ PASS: cleanWorkflowForUpdate preserved partial settings without adding defaults');
}
else {
logger_1.logger.error('❌ FAIL: cleanWorkflowForUpdate added default properties to partial settings');
logger_1.logger.error(' Original keys:', Object.keys(workflowWithPartialSettings.settings || {}));
logger_1.logger.error(' Cleaned keys:', settingsKeys);
}
}
else {
logger_1.logger.error('❌ FAIL: cleanWorkflowForUpdate removed partial settings');
}
logger_1.logger.info('\n=== Test 4: cleanWorkflowForCreate should add default settings ===');
const newWorkflow = {
name: 'New Workflow',
nodes: [],
connections: {}
};
const cleanedCreate = (0, n8n_validation_1.cleanWorkflowForCreate)(newWorkflow);
if ('settings' in cleanedCreate && cleanedCreate.settings) {
const hasDefaults = cleanedCreate.settings.executionOrder === 'v1' &&
cleanedCreate.settings.saveDataErrorExecution === 'all' &&
cleanedCreate.settings.saveDataSuccessExecution === 'all' &&
cleanedCreate.settings.saveManualExecutions === true &&
cleanedCreate.settings.saveExecutionProgress === true;
if (hasDefaults) {
logger_1.logger.info('✅ PASS: cleanWorkflowForCreate correctly adds default settings');
}
else {
logger_1.logger.error('❌ FAIL: cleanWorkflowForCreate added settings but not with correct defaults');
logger_1.logger.error(' Settings:', JSON.stringify(cleanedCreate.settings));
}
}
else {
logger_1.logger.error('❌ FAIL: cleanWorkflowForCreate did not add default settings');
}
logger_1.logger.info('\n=== Test 5: cleanWorkflowForUpdate removes read-only fields ===');
const workflowWithReadOnly = {
...workflowWithoutSettings,
staticData: { some: 'data' },
pinData: { node1: 'data' },
tags: ['tag1', 'tag2'],
isArchived: true,
usedCredentials: ['cred1'],
sharedWithProjects: ['proj1'],
triggerCount: 5,
shared: true,
active: true
};
const cleanedReadOnly = (0, n8n_validation_1.cleanWorkflowForUpdate)(workflowWithReadOnly);
const removedFields = [
'id', 'createdAt', 'updatedAt', 'versionId', 'meta',
'staticData', 'pinData', 'tags', 'isArchived',
'usedCredentials', 'sharedWithProjects', 'triggerCount',
'shared', 'active'
];
const hasRemovedFields = removedFields.some(field => field in cleanedReadOnly);
if (!hasRemovedFields) {
logger_1.logger.info('✅ PASS: cleanWorkflowForUpdate correctly removed all read-only fields');
}
else {
const foundFields = removedFields.filter(field => field in cleanedReadOnly);
logger_1.logger.error('❌ FAIL: cleanWorkflowForUpdate did not remove these fields:', foundFields);
}
logger_1.logger.info('\n=== Test Summary ===');
logger_1.logger.info('All tests completed. The fix ensures that cleanWorkflowForUpdate only removes fields');
logger_1.logger.info('without adding default settings, preventing the n8n API validation error.');
}
testCleanWorkflowFunctions();
//# sourceMappingURL=test-issue-45-fix.js.map