Skip to content

Commit

Permalink
fix(Webhook Node): Fix handling of form-data files (#8256)
Browse files Browse the repository at this point in the history
  • Loading branch information
netroy authored Jan 8, 2024
1 parent b6c42cc commit fc29030
Show file tree
Hide file tree
Showing 2 changed files with 39 additions and 3 deletions.
4 changes: 2 additions & 2 deletions packages/nodes-base/nodes/Webhook/Webhook.node.ts
Original file line number Diff line number Diff line change
Expand Up @@ -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();
Expand Down Expand Up @@ -225,7 +225,7 @@ export class Webhook extends Node {
},
};

if (files?.length) {
if (files && Object.keys(files).length) {
returnItem.binary = {};
}

Expand Down
38 changes: 37 additions & 1 deletion packages/nodes-base/nodes/Webhook/test/Webhook.test.ts
Original file line number Diff line number Diff line change
@@ -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<IWebhookFunctions>({
nodeHelpers: mock(),
});
context.getNodeParameter.calledWith('options').mockReturnValue({});
const req = mock<Request>();
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();
});
});
});

0 comments on commit fc29030

Please sign in to comment.