import { mock } from 'jest-mock-extended'; import { NodeOperationError } from 'n8n-workflow'; import type { INode, WorkflowExecuteMode } from 'n8n-workflow'; import { ExecutionDataService } from '../execution-data.service'; describe('ExecutionDataService', () => { const service = new ExecutionDataService(); describe('generateFailedExecutionFromError', () => { const mode: WorkflowExecuteMode = 'manual'; const node = mock({ name: 'Test Node' }); const error = new NodeOperationError(node, 'Test error message'); it('should generate a failed execution with error details', () => { const startTime = Date.now(); const result = service.generateFailedExecutionFromError(mode, error, node, startTime); expect(result.mode).toBe(mode); expect(result.status).toBe('error'); expect(result.startedAt).toBeInstanceOf(Date); expect(result.stoppedAt).toBeInstanceOf(Date); expect(result.data.resultData.error?.message).toBe(error.message); const taskData = result.data.resultData.runData[node.name][0]; expect(taskData.error?.message).toBe(error.message); expect(taskData.startTime).toBe(startTime); expect(taskData.executionStatus).toBe('error'); expect(result.data.resultData.lastNodeExecuted).toBe(node.name); expect(result.data.executionData?.nodeExecutionStack[0].node).toEqual(node); }); it('should generate a failed execution without node details if node is undefined', () => { const result = service.generateFailedExecutionFromError(mode, error, undefined); expect(result.mode).toBe(mode); expect(result.status).toBe('error'); expect(result.startedAt).toBeInstanceOf(Date); expect(result.stoppedAt).toBeInstanceOf(Date); expect(result.data.resultData.error?.message).toBe(error.message); expect(result.data.resultData.runData).toEqual({}); expect(result.data.resultData.lastNodeExecuted).toBeUndefined(); expect(result.data.executionData).toBeUndefined(); }); }); });