diff --git a/packages/nodes-base/nodes/Webhook/Webhook.node.ts b/packages/nodes-base/nodes/Webhook/Webhook.node.ts index e2f42d25ae..e0a194cdb3 100644 --- a/packages/nodes-base/nodes/Webhook/Webhook.node.ts +++ b/packages/nodes-base/nodes/Webhook/Webhook.node.ts @@ -99,7 +99,7 @@ export class Webhook extends Node { const options = context.getNodeParameter('options', {}) as { binaryData: boolean; ignoreBots: boolean; - rawBody: Buffer; + rawBody: boolean; responseData?: string; }; const req = context.getRequestObject(); @@ -225,7 +225,7 @@ export class Webhook extends Node { }, }; - if (files?.length) { + if (files && Object.keys(files).length) { returnItem.binary = {}; } diff --git a/packages/nodes-base/nodes/Webhook/test/Webhook.test.ts b/packages/nodes-base/nodes/Webhook/test/Webhook.test.ts index bb903fd934..246f7dae1e 100644 --- a/packages/nodes-base/nodes/Webhook/test/Webhook.test.ts +++ b/packages/nodes-base/nodes/Webhook/test/Webhook.test.ts @@ -1,4 +1,40 @@ +import type { Request } from 'express'; +import type { IWebhookFunctions } from 'n8n-workflow'; +import { mock } from 'jest-mock-extended'; +import { Webhook } from '../Webhook.node'; import { testWorkflows, getWorkflowFilenames } from '@test/nodes/Helpers'; + const workflows = getWorkflowFilenames(__dirname); -describe('Test Webhook Node', () => testWorkflows(workflows)); +describe('Test Webhook Node', () => { + testWorkflows(workflows); + + describe('handleFormData', () => { + const node = new Webhook(); + const context = mock({ + nodeHelpers: mock(), + }); + context.getNodeParameter.calledWith('options').mockReturnValue({}); + const req = mock(); + req.contentType = 'multipart/form-data'; + context.getRequestObject.mockReturnValue(req); + + it('should handle when no files are present', async () => { + req.body = { + files: {}, + }; + const returnData = await node.webhook(context); + expect(returnData.workflowData?.[0][0].binary).toBeUndefined(); + expect(context.nodeHelpers.copyBinaryFile).not.toHaveBeenCalled(); + }); + + it('should handle when files are present', async () => { + req.body = { + files: { file1: {} }, + }; + const returnData = await node.webhook(context); + expect(returnData.workflowData?.[0][0].binary).not.toBeUndefined(); + expect(context.nodeHelpers.copyBinaryFile).toHaveBeenCalled(); + }); + }); +});