n8n-mcp
Version:
Integration between n8n workflow automation and Model Context Protocol (MCP)
156 lines โข 6.16 kB
JavaScript
;
Object.defineProperty(exports, "__esModule", { value: true });
const workflow_diff_engine_1 = require("../services/workflow-diff-engine");
const testWorkflow = {
id: 'test-workflow-null',
name: 'Test Null Handling',
nodes: [
{
id: 'http_1',
name: 'HTTP Request',
type: 'n8n-nodes-base.httpRequest',
typeVersion: 4,
position: [200, 200],
parameters: {
url: 'https://api.example.com',
method: 'GET',
authentication: null,
options: {
timeout: 5000
}
}
},
{
id: 'set_1',
name: 'Set',
type: 'n8n-nodes-base.set',
typeVersion: 3,
position: [400, 200],
parameters: {
mode: 'manual',
fields: null
}
}
],
connections: {}
};
async function testUpdateNodeWithNullValues() {
console.log('๐งช Testing updateNode operation with null/undefined handling...\n');
const engine = new workflow_diff_engine_1.WorkflowDiffEngine();
console.log('Test 1: Updating authentication.type where authentication is null');
let result = await engine.applyDiff(testWorkflow, {
id: 'test-workflow-null',
operations: [{
type: 'updateNode',
nodeName: 'HTTP Request',
changes: {
'parameters.authentication.type': 'headerAuth',
'parameters.authentication.properties.headerAuth.name': 'Authorization',
'parameters.authentication.properties.headerAuth.value': 'Bearer token123'
}
}]
});
if (result.success) {
const node = result.workflow.nodes.find((n) => n.name === 'HTTP Request');
console.log('โ
Success! Authentication updated:');
console.log(' - Type:', node.parameters.authentication?.type);
console.log(' - Header name:', node.parameters.authentication?.properties?.headerAuth?.name);
console.log(' - Header value:', node.parameters.authentication?.properties?.headerAuth?.value);
}
else {
console.error('โ Failed:', result.errors);
}
console.log('\nTest 2: Updating options.headers.Accept where headers is undefined');
result = await engine.applyDiff(testWorkflow, {
id: 'test-workflow-null',
operations: [{
type: 'updateNode',
nodeName: 'HTTP Request',
changes: {
'parameters.options.headers.Accept': 'application/json',
'parameters.options.headers.Content-Type': 'application/json'
}
}]
});
if (result.success) {
const node = result.workflow.nodes.find((n) => n.name === 'HTTP Request');
console.log('โ
Success! Headers updated:');
console.log(' - Accept:', node.parameters.options?.headers?.Accept);
console.log(' - Content-Type:', node.parameters.options?.headers?.['Content-Type']);
}
else {
console.error('โ Failed:', result.errors);
}
console.log('\nTest 3: Updating fields.values where fields is null');
result = await engine.applyDiff(testWorkflow, {
id: 'test-workflow-null',
operations: [{
type: 'updateNode',
nodeName: 'Set',
changes: {
'parameters.fields.values': [
{ name: 'field1', value: 'value1' },
{ name: 'field2', value: 'value2' }
]
}
}]
});
if (result.success) {
const node = result.workflow.nodes.find((n) => n.name === 'Set');
console.log('โ
Success! Fields updated:');
console.log(' - Values:', JSON.stringify(node.parameters.fields?.values, null, 2));
}
else {
console.error('โ Failed:', result.errors);
}
console.log('\nTest 4: Multiple operations with mixed null/existing values');
result = await engine.applyDiff(testWorkflow, {
id: 'test-workflow-null',
operations: [
{
type: 'updateNode',
nodeName: 'HTTP Request',
changes: {
'parameters.url': 'https://new-api.example.com',
'parameters.authentication.type': 'oauth2',
'parameters.options.proxy.host': 'proxy.example.com',
'parameters.options.proxy.port': 8080
}
},
{
type: 'updateNode',
nodeName: 'Set',
changes: {
'parameters.mode': 'json',
'parameters.fields.schema': { type: 'object' }
}
}
]
});
if (result.success) {
console.log('โ
Success! All operations applied:');
console.log(' - Operations applied:', result.operationsApplied);
console.log(' - Message:', result.message);
const httpNode = result.workflow.nodes.find((n) => n.name === 'HTTP Request');
const setNode = result.workflow.nodes.find((n) => n.name === 'Set');
console.log('\n HTTP Request node:');
console.log(' - URL:', httpNode.parameters.url);
console.log(' - Auth type:', httpNode.parameters.authentication?.type);
console.log(' - Proxy:', httpNode.parameters.options?.proxy);
console.log('\n Set node:');
console.log(' - Mode:', setNode.parameters.mode);
console.log(' - Schema:', setNode.parameters.fields?.schema);
}
else {
console.error('โ Failed:', result.errors);
}
console.log('\nโ
All null/undefined handling tests completed!');
}
if (require.main === module) {
testUpdateNodeWithNullValues().catch(error => {
console.error('โ Test failed with error:', error);
process.exit(1);
});
}
//# sourceMappingURL=test-updatenode-null-fix.js.map