mirror of
https://github.com/n8n-io/n8n.git
synced 2026-06-03 10:17:00 +02:00
308 lines
6.3 KiB
TypeScript
308 lines
6.3 KiB
TypeScript
/**
|
|
* Reusable workflow fixtures for execution context propagation tests.
|
|
* These fixtures create minimal workflow structures needed for testing.
|
|
*/
|
|
|
|
import { NodeConnectionTypes } from 'n8n-workflow';
|
|
import { v4 as uuid } from 'uuid';
|
|
|
|
/**
|
|
* Creates a minimal child workflow with Execute Workflow Trigger.
|
|
* This is the simplest sub-workflow that can be called by another workflow.
|
|
*/
|
|
export function createSubWorkflowFixture() {
|
|
return {
|
|
nodes: [
|
|
{
|
|
parameters: {
|
|
workflowInputs: {
|
|
values: [{ name: 'test' }],
|
|
},
|
|
},
|
|
type: 'n8n-nodes-base.executeWorkflowTrigger',
|
|
typeVersion: 1.1,
|
|
position: [0, 0] as [number, number],
|
|
id: uuid(),
|
|
name: 'Trigger',
|
|
},
|
|
],
|
|
connections: {},
|
|
pinData: {},
|
|
};
|
|
}
|
|
|
|
/**
|
|
* Creates a workflow with Manual Trigger + Execute Workflow node.
|
|
* This workflow can call another workflow (sub-workflow).
|
|
*/
|
|
export function createParentWorkflowFixture(childWorkflowId: string) {
|
|
return {
|
|
nodes: [
|
|
{
|
|
parameters: {},
|
|
type: 'n8n-nodes-base.manualTrigger',
|
|
typeVersion: 1,
|
|
position: [0, 0] as [number, number],
|
|
id: uuid(),
|
|
name: 'Trigger',
|
|
},
|
|
{
|
|
parameters: {
|
|
workflowId: {
|
|
__rl: true,
|
|
value: childWorkflowId,
|
|
mode: 'list',
|
|
cachedResultUrl: `/workflow/${childWorkflowId}`,
|
|
cachedResultName: 'Child Workflow',
|
|
},
|
|
workflowInputs: {
|
|
mappingMode: 'defineBelow',
|
|
value: { test: 'test' },
|
|
matchingColumns: ['level'],
|
|
schema: [
|
|
{
|
|
id: 'test',
|
|
displayName: 'test',
|
|
required: false,
|
|
defaultMatch: false,
|
|
display: true,
|
|
canBeUsedToMatch: true,
|
|
type: 'string',
|
|
removed: false,
|
|
},
|
|
],
|
|
attemptToConvertTypes: false,
|
|
convertFieldsToString: true,
|
|
},
|
|
options: {},
|
|
},
|
|
type: 'n8n-nodes-base.executeWorkflow',
|
|
typeVersion: 1.3,
|
|
position: [208, 0] as [number, number],
|
|
id: uuid(),
|
|
name: 'Execute Workflow',
|
|
},
|
|
],
|
|
connections: {
|
|
Trigger: {
|
|
main: [
|
|
[
|
|
{
|
|
node: 'Execute Workflow',
|
|
type: NodeConnectionTypes.Main,
|
|
index: 0,
|
|
},
|
|
],
|
|
],
|
|
},
|
|
},
|
|
pinData: {},
|
|
};
|
|
}
|
|
|
|
/**
|
|
* Creates a middle-tier workflow with Execute Workflow Trigger + Execute Workflow node.
|
|
* This workflow can be called by a parent and can call a child (for nested scenarios).
|
|
*/
|
|
export function createMiddleWorkflowFixture(childWorkflowId: string) {
|
|
return {
|
|
nodes: [
|
|
{
|
|
parameters: {
|
|
workflowInputs: {
|
|
values: [{ name: 'test' }],
|
|
},
|
|
},
|
|
type: 'n8n-nodes-base.executeWorkflowTrigger',
|
|
typeVersion: 1.1,
|
|
position: [0, 0] as [number, number],
|
|
id: uuid(),
|
|
name: 'Trigger',
|
|
},
|
|
{
|
|
parameters: {
|
|
workflowId: {
|
|
__rl: true,
|
|
value: childWorkflowId,
|
|
mode: 'list',
|
|
cachedResultUrl: `/workflow/${childWorkflowId}`,
|
|
cachedResultName: 'Grandchild Workflow',
|
|
},
|
|
workflowInputs: {
|
|
mappingMode: 'defineBelow',
|
|
value: { test: 'test' },
|
|
matchingColumns: ['level'],
|
|
schema: [
|
|
{
|
|
id: 'test',
|
|
displayName: 'test',
|
|
required: false,
|
|
defaultMatch: false,
|
|
display: true,
|
|
canBeUsedToMatch: true,
|
|
type: 'string',
|
|
removed: false,
|
|
},
|
|
],
|
|
attemptToConvertTypes: false,
|
|
convertFieldsToString: true,
|
|
},
|
|
options: {},
|
|
},
|
|
type: 'n8n-nodes-base.executeWorkflow',
|
|
typeVersion: 1.3,
|
|
position: [208, 0] as [number, number],
|
|
id: uuid(),
|
|
name: 'Execute Workflow',
|
|
},
|
|
],
|
|
connections: {
|
|
Trigger: {
|
|
main: [
|
|
[
|
|
{
|
|
node: 'Execute Workflow',
|
|
type: NodeConnectionTypes.Main,
|
|
index: 0,
|
|
},
|
|
],
|
|
],
|
|
},
|
|
},
|
|
pinData: {},
|
|
};
|
|
}
|
|
|
|
/**
|
|
* Creates a simple workflow with just Manual Trigger.
|
|
* Useful for testing context isolation.
|
|
*/
|
|
export function createSimpleWorkflowFixture() {
|
|
return {
|
|
nodes: [
|
|
{
|
|
parameters: {},
|
|
type: 'n8n-nodes-base.manualTrigger',
|
|
typeVersion: 1,
|
|
position: [0, 0] as [number, number],
|
|
id: uuid(),
|
|
name: 'Trigger',
|
|
},
|
|
],
|
|
connections: {},
|
|
pinData: {},
|
|
};
|
|
}
|
|
|
|
/**
|
|
* Creates an error workflow with Error Trigger node.
|
|
* This workflow gets executed when another workflow fails (if configured).
|
|
*/
|
|
export function createErrorWorkflowFixture() {
|
|
return {
|
|
nodes: [
|
|
{
|
|
parameters: {},
|
|
type: 'n8n-nodes-base.errorTrigger',
|
|
typeVersion: 1,
|
|
position: [0, 0] as [number, number],
|
|
id: uuid(),
|
|
name: 'Trigger',
|
|
},
|
|
],
|
|
connections: {},
|
|
pinData: {},
|
|
};
|
|
}
|
|
|
|
/**
|
|
* Creates a workflow that throws an error using DebugHelper node.
|
|
* Useful for testing error workflow propagation.
|
|
*/
|
|
export function createFailingWorkflowFixture() {
|
|
return {
|
|
nodes: [
|
|
{
|
|
parameters: {},
|
|
type: 'n8n-nodes-base.manualTrigger',
|
|
typeVersion: 1,
|
|
position: [0, 0] as [number, number],
|
|
id: uuid(),
|
|
name: 'Trigger',
|
|
},
|
|
{
|
|
parameters: {
|
|
throwErrorType: 'Error',
|
|
throwErrorMessage: 'Test error',
|
|
},
|
|
type: 'n8n-nodes-base.debugHelper',
|
|
typeVersion: 1,
|
|
position: [208, 0] as [number, number],
|
|
id: uuid(),
|
|
name: 'DebugHelper',
|
|
},
|
|
],
|
|
connections: {
|
|
Trigger: {
|
|
main: [
|
|
[
|
|
{
|
|
node: 'DebugHelper',
|
|
type: NodeConnectionTypes.Main,
|
|
index: 0,
|
|
},
|
|
],
|
|
],
|
|
},
|
|
},
|
|
pinData: {},
|
|
};
|
|
}
|
|
|
|
/**
|
|
* Creates a workflow that fails and is configured to trigger an error workflow.
|
|
* @param errorWorkflowId - The ID of the error workflow to trigger on failure
|
|
*/
|
|
export function createWorkflowWithErrorHandlerFixture(errorWorkflowId: string) {
|
|
return {
|
|
nodes: [
|
|
{
|
|
parameters: {},
|
|
type: 'n8n-nodes-base.manualTrigger',
|
|
typeVersion: 1,
|
|
position: [0, 0] as [number, number],
|
|
id: uuid(),
|
|
name: 'Trigger',
|
|
},
|
|
{
|
|
parameters: {
|
|
throwErrorType: 'Error',
|
|
throwErrorMessage: 'Test error for error workflow',
|
|
},
|
|
type: 'n8n-nodes-base.debugHelper',
|
|
typeVersion: 1,
|
|
position: [208, 0] as [number, number],
|
|
id: uuid(),
|
|
name: 'DebugHelper',
|
|
},
|
|
],
|
|
connections: {
|
|
Trigger: {
|
|
main: [
|
|
[
|
|
{
|
|
node: 'DebugHelper',
|
|
type: NodeConnectionTypes.Main,
|
|
index: 0,
|
|
},
|
|
],
|
|
],
|
|
},
|
|
},
|
|
settings: {
|
|
errorWorkflow: errorWorkflowId,
|
|
},
|
|
pinData: {},
|
|
};
|
|
}
|