fix: resolve lint errors in test utilities

- Fix TypeScript type imports for WorkflowNode and Workflow
- Remove unsupported callerPolicy from workflow settings
- Convert tags array to string array as per API types
- Use 'any' type for INodeDefinition since it's from n8n-workflow package
This commit is contained in:
czlonkowski
2025-07-28 20:51:26 +02:00
parent 9b2f6fa365
commit 0252788dd6
4 changed files with 24 additions and 16 deletions

Binary file not shown.

View File

@@ -1,5 +1,8 @@
import { expect } from 'vitest'; import { expect } from 'vitest';
import { INodeDefinition, IWorkflow, INode } from '@/types/n8n-api'; import { WorkflowNode, Workflow } from '@/types/n8n-api';
// Use any type for INodeDefinition since it's from n8n-workflow package
type INodeDefinition = any;
/** /**
* Custom assertions for n8n-mcp tests * Custom assertions for n8n-mcp tests
@@ -8,7 +11,7 @@ import { INodeDefinition, IWorkflow, INode } from '@/types/n8n-api';
/** /**
* Assert that a value is a valid node definition * Assert that a value is a valid node definition
*/ */
export function expectValidNodeDefinition(node: any): asserts node is INodeDefinition { export function expectValidNodeDefinition(node: any) {
expect(node).toBeDefined(); expect(node).toBeDefined();
expect(node).toHaveProperty('name'); expect(node).toHaveProperty('name');
expect(node).toHaveProperty('displayName'); expect(node).toHaveProperty('displayName');
@@ -29,7 +32,7 @@ export function expectValidNodeDefinition(node: any): asserts node is INodeDefin
/** /**
* Assert that a value is a valid workflow * Assert that a value is a valid workflow
*/ */
export function expectValidWorkflow(workflow: any): asserts workflow is IWorkflow { export function expectValidWorkflow(workflow: any): asserts workflow is Workflow {
expect(workflow).toBeDefined(); expect(workflow).toBeDefined();
expect(workflow).toHaveProperty('nodes'); expect(workflow).toHaveProperty('nodes');
expect(workflow).toHaveProperty('connections'); expect(workflow).toHaveProperty('connections');
@@ -42,7 +45,7 @@ export function expectValidWorkflow(workflow: any): asserts workflow is IWorkflo
}); });
// Check connections reference valid nodes // Check connections reference valid nodes
const nodeIds = new Set(workflow.nodes.map((n: INode) => n.id)); const nodeIds = new Set(workflow.nodes.map((n: WorkflowNode) => n.id));
Object.keys(workflow.connections).forEach(sourceId => { Object.keys(workflow.connections).forEach(sourceId => {
expect(nodeIds.has(sourceId)).toBe(true); expect(nodeIds.has(sourceId)).toBe(true);
@@ -60,7 +63,7 @@ export function expectValidWorkflow(workflow: any): asserts workflow is IWorkflo
/** /**
* Assert that a value is a valid workflow node * Assert that a value is a valid workflow node
*/ */
export function expectValidWorkflowNode(node: any): asserts node is INode { export function expectValidWorkflowNode(node: any): asserts node is WorkflowNode {
expect(node).toBeDefined(); expect(node).toBeDefined();
expect(node).toHaveProperty('id'); expect(node).toHaveProperty('id');
expect(node).toHaveProperty('name'); expect(node).toHaveProperty('name');

View File

@@ -1,5 +1,8 @@
import { faker } from '@faker-js/faker'; import { faker } from '@faker-js/faker';
import { INodeDefinition, INode, IWorkflow } from '@/types/n8n-api'; import { WorkflowNode, Workflow } from '@/types/n8n-api';
// Use any type for INodeDefinition since it's from n8n-workflow package
type INodeDefinition = any;
/** /**
* Data generators for creating realistic test data * Data generators for creating realistic test data
@@ -117,7 +120,7 @@ function generateDisplayOptions(): any {
/** /**
* Generate a complete node definition * Generate a complete node definition
*/ */
export function generateNodeDefinition(overrides?: Partial<INodeDefinition>): INodeDefinition { export function generateNodeDefinition(overrides?: Partial<INodeDefinition>): any {
const nodeCategory = faker.helpers.arrayElement([ const nodeCategory = faker.helpers.arrayElement([
'Core Nodes', 'Communication', 'Data Transformation', 'Core Nodes', 'Communication', 'Data Transformation',
'Development', 'Files', 'Productivity', 'Analytics' 'Development', 'Files', 'Productivity', 'Analytics'
@@ -155,8 +158,8 @@ export function generateNodeDefinition(overrides?: Partial<INodeDefinition>): IN
/** /**
* Generate workflow nodes * Generate workflow nodes
*/ */
export function generateWorkflowNodes(count = 3): INode[] { export function generateWorkflowNodes(count = 3): WorkflowNode[] {
const nodes: INode[] = []; const nodes: WorkflowNode[] = [];
for (let i = 0; i < count; i++) { for (let i = 0; i < count; i++) {
nodes.push({ nodes.push({
@@ -221,7 +224,7 @@ function generateNodeParameters(): Record<string, any> {
/** /**
* Generate workflow connections * Generate workflow connections
*/ */
export function generateConnections(nodes: INode[]): Record<string, any> { export function generateConnections(nodes: WorkflowNode[]): Record<string, any> {
const connections: Record<string, any> = {}; const connections: Record<string, any> = {};
// Connect nodes sequentially // Connect nodes sequentially
@@ -263,7 +266,7 @@ export function generateConnections(nodes: INode[]): Record<string, any> {
/** /**
* Generate a complete workflow * Generate a complete workflow
*/ */
export function generateWorkflow(nodeCount = 3): IWorkflow { export function generateWorkflow(nodeCount = 3): Workflow {
const nodes = generateWorkflowNodes(nodeCount); const nodes = generateWorkflowNodes(nodeCount);
return { return {
@@ -281,11 +284,10 @@ export function generateWorkflow(nodeCount = 3): IWorkflow {
settings: { settings: {
executionOrder: 'v1', executionOrder: 'v1',
saveManualExecutions: true, saveManualExecutions: true,
callerPolicy: 'workflowsFromSameOwner',
timezone: faker.location.timeZone() timezone: faker.location.timeZone()
}, },
staticData: {}, staticData: {},
tags: generateTags(), tags: generateTags().map(t => t.name),
createdAt: faker.date.past().toISOString(), createdAt: faker.date.past().toISOString(),
updatedAt: faker.date.recent().toISOString() updatedAt: faker.date.recent().toISOString()
}; };

View File

@@ -1,5 +1,8 @@
import { vi } from 'vitest'; import { vi } from 'vitest';
import { INodeDefinition, INode, IWorkflow } from '@/types/n8n-api'; import { WorkflowNode, Workflow } from '@/types/n8n-api';
// Use any type for INodeDefinition since it's from n8n-workflow package
type INodeDefinition = any;
/** /**
* Common test utilities and helpers * Common test utilities and helpers
@@ -48,7 +51,7 @@ export function createMockNodeDefinition(overrides?: Partial<INodeDefinition>):
/** /**
* Create a mock workflow node * Create a mock workflow node
*/ */
export function createMockNode(overrides?: Partial<INode>): INode { export function createMockNode(overrides?: Partial<WorkflowNode>): WorkflowNode {
return { return {
id: 'mock-node-id', id: 'mock-node-id',
name: 'Mock Node', name: 'Mock Node',
@@ -63,7 +66,7 @@ export function createMockNode(overrides?: Partial<INode>): INode {
/** /**
* Create a mock workflow * Create a mock workflow
*/ */
export function createMockWorkflow(overrides?: Partial<IWorkflow>): IWorkflow { export function createMockWorkflow(overrides?: Partial<Workflow>): Workflow {
return { return {
id: 'mock-workflow-id', id: 'mock-workflow-id',
name: 'Mock Workflow', name: 'Mock Workflow',