mirror of
https://github.com/Abdulazizzn/n8n-enterprise-unlocked.git
synced 2025-12-17 18:12:04 +00:00
fix(core): Adjust starter node priority for manual executions with pinned activators (#8386)
This commit is contained in:
137
packages/cli/test/unit/workflow-execution.service.test.ts
Normal file
137
packages/cli/test/unit/workflow-execution.service.test.ts
Normal file
@@ -0,0 +1,137 @@
|
||||
import type { INode } from 'n8n-workflow';
|
||||
import { WorkflowExecutionService } from '@/workflows/workflowExecution.service';
|
||||
import type { IWorkflowDb } from '@/Interfaces';
|
||||
import { mock } from 'jest-mock-extended';
|
||||
|
||||
const webhookNode: INode = {
|
||||
name: 'Webhook',
|
||||
type: 'n8n-nodes-base.webhook',
|
||||
id: '111f1db0-e7be-44c5-9ce9-3e35362490f0',
|
||||
parameters: {},
|
||||
typeVersion: 1,
|
||||
position: [0, 0],
|
||||
webhookId: 'de0f8dcb-7b64-4f22-b66d-d8f74d6aefb7',
|
||||
};
|
||||
|
||||
const secondWebhookNode = {
|
||||
...webhookNode,
|
||||
name: 'Webhook 2',
|
||||
id: '222f1db0-e7be-44c5-9ce9-3e35362490f1',
|
||||
};
|
||||
|
||||
const executeWorkflowTriggerNode: INode = {
|
||||
name: 'Execute Workflow Trigger',
|
||||
type: 'n8n-nodes-base.executeWorkflowTrigger',
|
||||
id: '78d63bca-bb6c-4568-948f-8ed9aacb1fe9',
|
||||
parameters: {},
|
||||
typeVersion: 1,
|
||||
position: [0, 0],
|
||||
};
|
||||
|
||||
const respondToWebhookNode: INode = {
|
||||
name: 'Respond to Webhook',
|
||||
type: 'n8n-nodes-base.respondToWebhook',
|
||||
id: '66d63bca-bb6c-4568-948f-8ed9aacb1fe9',
|
||||
parameters: {},
|
||||
typeVersion: 1,
|
||||
position: [0, 0],
|
||||
};
|
||||
|
||||
const hackerNewsNode: INode = {
|
||||
name: 'Hacker News',
|
||||
type: 'n8n-nodes-base.hackerNews',
|
||||
id: '55d63bca-bb6c-4568-948f-8ed9aacb1fe9',
|
||||
parameters: {},
|
||||
typeVersion: 1,
|
||||
position: [0, 0],
|
||||
};
|
||||
|
||||
describe('WorkflowExecutionService', () => {
|
||||
let workflowExecutionService: WorkflowExecutionService;
|
||||
|
||||
beforeAll(() => {
|
||||
workflowExecutionService = new WorkflowExecutionService(
|
||||
mock(),
|
||||
mock(),
|
||||
mock(),
|
||||
mock(),
|
||||
mock(),
|
||||
mock(),
|
||||
);
|
||||
});
|
||||
|
||||
describe('selectPinnedActivatorStarter()', () => {
|
||||
const workflow = mock<IWorkflowDb>({
|
||||
nodes: [],
|
||||
});
|
||||
|
||||
const pinData = {
|
||||
[webhookNode.name]: [{ json: { key: 'value' } }],
|
||||
[executeWorkflowTriggerNode.name]: [{ json: { key: 'value' } }],
|
||||
};
|
||||
|
||||
afterEach(() => {
|
||||
workflow.nodes = [];
|
||||
});
|
||||
|
||||
it('should return `null` if no pindata', () => {
|
||||
const node = workflowExecutionService.selectPinnedActivatorStarter(workflow, []);
|
||||
|
||||
expect(node).toBeNull();
|
||||
});
|
||||
|
||||
it('should return `null` if no starter nodes', () => {
|
||||
const node = workflowExecutionService.selectPinnedActivatorStarter(workflow);
|
||||
|
||||
expect(node).toBeNull();
|
||||
});
|
||||
|
||||
it('should select webhook node if only choice', () => {
|
||||
workflow.nodes.push(webhookNode);
|
||||
|
||||
const node = workflowExecutionService.selectPinnedActivatorStarter(workflow, [], pinData);
|
||||
|
||||
expect(node).toEqual(webhookNode);
|
||||
});
|
||||
|
||||
it('should return `null` if no choice', () => {
|
||||
workflow.nodes.push(hackerNewsNode);
|
||||
|
||||
const node = workflowExecutionService.selectPinnedActivatorStarter(workflow, [], pinData);
|
||||
|
||||
expect(node).toBeNull();
|
||||
});
|
||||
|
||||
it('should return ignore Respond to Webhook', () => {
|
||||
workflow.nodes.push(respondToWebhookNode);
|
||||
|
||||
const node = workflowExecutionService.selectPinnedActivatorStarter(workflow, [], pinData);
|
||||
|
||||
expect(node).toBeNull();
|
||||
});
|
||||
|
||||
it('should select execute workflow trigger if only choice', () => {
|
||||
workflow.nodes.push(executeWorkflowTriggerNode);
|
||||
|
||||
const node = workflowExecutionService.selectPinnedActivatorStarter(workflow, [], pinData);
|
||||
|
||||
expect(node).toEqual(executeWorkflowTriggerNode);
|
||||
});
|
||||
|
||||
it('should favor webhook node over execute workflow trigger', () => {
|
||||
workflow.nodes.push(webhookNode, executeWorkflowTriggerNode);
|
||||
|
||||
const node = workflowExecutionService.selectPinnedActivatorStarter(workflow, [], pinData);
|
||||
|
||||
expect(node).toEqual(webhookNode);
|
||||
});
|
||||
|
||||
it('should favor first webhook node over second webhook node', () => {
|
||||
workflow.nodes.push(webhookNode, secondWebhookNode);
|
||||
|
||||
const node = workflowExecutionService.selectPinnedActivatorStarter(workflow, [], pinData);
|
||||
|
||||
expect(node).toEqual(webhookNode);
|
||||
});
|
||||
});
|
||||
});
|
||||
Reference in New Issue
Block a user