fix(Respond to Webhook Node): Node does not work with Wait node (#10992)

This commit is contained in:
Michael Kret 2024-09-27 15:23:31 +03:00 committed by GitHub
parent 2af0fbf52f
commit 2df5a5b649
No known key found for this signature in database
GPG key ID: B5690EEEBB952194
3 changed files with 64 additions and 4 deletions

View file

@ -8,7 +8,16 @@ import type {
INodeType,
INodeTypeDescription,
} from 'n8n-workflow';
import { jsonParse, BINARY_ENCODING, NodeOperationError, NodeConnectionType } from 'n8n-workflow';
import {
jsonParse,
BINARY_ENCODING,
NodeOperationError,
NodeConnectionType,
WEBHOOK_NODE_TYPE,
FORM_TRIGGER_NODE_TYPE,
CHAT_TRIGGER_NODE_TYPE,
WAIT_NODE_TYPE,
} from 'n8n-workflow';
import set from 'lodash/set';
import jwt from 'jsonwebtoken';
import { formatPrivateKey, generatePairedItemData } from '../../utils/utilities';
@ -291,9 +300,10 @@ export class RespondToWebhook implements INodeType {
const nodeVersion = this.getNode().typeVersion;
const WEBHOOK_NODE_TYPES = [
'n8n-nodes-base.webhook',
'n8n-nodes-base.formTrigger',
'@n8n/n8n-nodes-langchain.chatTrigger',
WEBHOOK_NODE_TYPE,
FORM_TRIGGER_NODE_TYPE,
CHAT_TRIGGER_NODE_TYPE,
WAIT_NODE_TYPE,
];
try {

View file

@ -0,0 +1,47 @@
import type { MockProxy } from 'jest-mock-extended';
import { mock } from 'jest-mock-extended';
import {
WAIT_NODE_TYPE,
type IExecuteFunctions,
type INode,
type NodeTypeAndVersion,
} from 'n8n-workflow';
import { RespondToWebhook } from '../RespondToWebhook.node';
describe('RespondToWebhook Node', () => {
let respondToWebhook: RespondToWebhook;
let mockExecuteFunctions: MockProxy<IExecuteFunctions>;
beforeEach(() => {
respondToWebhook = new RespondToWebhook();
mockExecuteFunctions = mock<IExecuteFunctions>();
});
describe('execute method', () => {
it('should throw an error if no WEBHOOK_NODE_TYPES in parents', async () => {
mockExecuteFunctions.getInputData.mockReturnValue([]);
mockExecuteFunctions.getNode.mockReturnValue(mock<INode>({ typeVersion: 1.1 }));
mockExecuteFunctions.getParentNodes.mockReturnValue([
mock<NodeTypeAndVersion>({ type: 'n8n-nodes-base.someNode' }),
]);
await expect(respondToWebhook.execute.call(mockExecuteFunctions)).rejects.toThrow(
'No Webhook node found in the workflow',
);
});
it('should not throw an error if WEBHOOK_NODE_TYPES is in parents', async () => {
mockExecuteFunctions.getInputData.mockReturnValue([]);
mockExecuteFunctions.getNode.mockReturnValue(mock<INode>({ typeVersion: 1.1 }));
mockExecuteFunctions.getParentNodes.mockReturnValue([
mock<NodeTypeAndVersion>({ type: WAIT_NODE_TYPE }),
]);
mockExecuteFunctions.getNodeParameter.mockReturnValue('text');
mockExecuteFunctions.getNodeParameter.mockReturnValue({});
mockExecuteFunctions.getNodeParameter.mockReturnValue('noData');
mockExecuteFunctions.sendResponse.mockReturnValue();
await expect(respondToWebhook.execute.call(mockExecuteFunctions)).resolves.not.toThrow();
});
});
});

View file

@ -38,6 +38,9 @@ export const FUNCTION_NODE_TYPE = 'n8n-nodes-base.function';
export const FUNCTION_ITEM_NODE_TYPE = 'n8n-nodes-base.functionItem';
export const MERGE_NODE_TYPE = 'n8n-nodes-base.merge';
export const AI_TRANSFORM_NODE_TYPE = 'n8n-nodes-base.aiTransform';
export const FORM_TRIGGER_NODE_TYPE = 'n8n-nodes-base.formTrigger';
export const CHAT_TRIGGER_NODE_TYPE = '@n8n/n8n-nodes-langchain.chatTrigger';
export const WAIT_NODE_TYPE = 'n8n-nodes-base.wait';
export const STARTING_NODE_TYPES = [
MANUAL_TRIGGER_NODE_TYPE,