mirror of
https://github.com/n8n-io/n8n.git
synced 2024-11-15 17:14:05 -08:00
107 lines
2.8 KiB
TypeScript
107 lines
2.8 KiB
TypeScript
|
import { ExecutionRepository } from '@/databases/repositories/execution.repository';
|
||
|
import { mockInstance } from '../../shared/mocking';
|
||
|
import { Logger } from '@/Logger';
|
||
|
import { saveExecutionProgress } from '@/executionLifecycleHooks/saveExecutionProgress';
|
||
|
import * as fnModule from '@/executionLifecycleHooks/toSaveSettings';
|
||
|
import {
|
||
|
ErrorReporterProxy,
|
||
|
type IRunExecutionData,
|
||
|
type ITaskData,
|
||
|
type IWorkflowBase,
|
||
|
} from 'n8n-workflow';
|
||
|
import type { IExecutionResponse } from '@/Interfaces';
|
||
|
|
||
|
mockInstance(Logger);
|
||
|
|
||
|
const executionRepository = mockInstance(ExecutionRepository);
|
||
|
|
||
|
afterEach(() => {
|
||
|
jest.clearAllMocks();
|
||
|
});
|
||
|
|
||
|
const commonArgs: [IWorkflowBase, string, string, ITaskData, IRunExecutionData, string] = [
|
||
|
{} as IWorkflowBase,
|
||
|
'some-execution-id',
|
||
|
'My Node',
|
||
|
{} as ITaskData,
|
||
|
{} as IRunExecutionData,
|
||
|
'some-session-id',
|
||
|
];
|
||
|
|
||
|
const commonSettings = { error: true, success: true, manual: true };
|
||
|
|
||
|
test('should ignore if save settings say so', async () => {
|
||
|
jest.spyOn(fnModule, 'toSaveSettings').mockReturnValue({
|
||
|
...commonSettings,
|
||
|
progress: false,
|
||
|
});
|
||
|
|
||
|
await saveExecutionProgress(...commonArgs);
|
||
|
|
||
|
expect(executionRepository.updateExistingExecution).not.toHaveBeenCalled();
|
||
|
});
|
||
|
|
||
|
test('should ignore on leftover async call', async () => {
|
||
|
jest.spyOn(fnModule, 'toSaveSettings').mockReturnValue({
|
||
|
...commonSettings,
|
||
|
progress: true,
|
||
|
});
|
||
|
|
||
|
executionRepository.findSingleExecution.mockResolvedValue({
|
||
|
finished: true,
|
||
|
} as IExecutionResponse);
|
||
|
|
||
|
await saveExecutionProgress(...commonArgs);
|
||
|
|
||
|
expect(executionRepository.updateExistingExecution).not.toHaveBeenCalled();
|
||
|
});
|
||
|
|
||
|
test('should update execution', async () => {
|
||
|
jest.spyOn(fnModule, 'toSaveSettings').mockReturnValue({
|
||
|
...commonSettings,
|
||
|
progress: true,
|
||
|
});
|
||
|
|
||
|
const reporterSpy = jest.spyOn(ErrorReporterProxy, 'error');
|
||
|
|
||
|
executionRepository.findSingleExecution.mockResolvedValue({} as IExecutionResponse);
|
||
|
|
||
|
await saveExecutionProgress(...commonArgs);
|
||
|
|
||
|
expect(executionRepository.updateExistingExecution).toHaveBeenCalledWith('some-execution-id', {
|
||
|
data: {
|
||
|
executionData: undefined,
|
||
|
resultData: {
|
||
|
lastNodeExecuted: 'My Node',
|
||
|
runData: {
|
||
|
'My Node': [{}],
|
||
|
},
|
||
|
},
|
||
|
startData: {},
|
||
|
},
|
||
|
status: 'running',
|
||
|
});
|
||
|
|
||
|
expect(reporterSpy).not.toHaveBeenCalled();
|
||
|
});
|
||
|
|
||
|
test('should report error on failure', async () => {
|
||
|
jest.spyOn(fnModule, 'toSaveSettings').mockReturnValue({
|
||
|
...commonSettings,
|
||
|
progress: true,
|
||
|
});
|
||
|
|
||
|
const reporterSpy = jest.spyOn(ErrorReporterProxy, 'error');
|
||
|
|
||
|
const error = new Error('Something went wrong');
|
||
|
|
||
|
executionRepository.findSingleExecution.mockImplementation(() => {
|
||
|
throw error;
|
||
|
});
|
||
|
|
||
|
await saveExecutionProgress(...commonArgs);
|
||
|
|
||
|
expect(executionRepository.updateExistingExecution).not.toHaveBeenCalled();
|
||
|
expect(reporterSpy).toHaveBeenCalledWith(error);
|
||
|
});
|