mirror of
https://github.com/Abdulazizzn/n8n-enterprise-unlocked.git
synced 2025-12-19 02:51:14 +00:00
refactor(core): Rename some runners files and classes for clarity (#12410)
This commit is contained in:
@@ -0,0 +1,136 @@
|
||||
import { mock } from 'jest-mock-extended';
|
||||
import { get, set } from 'lodash';
|
||||
|
||||
import type { NodeTypes } from '@/node-types';
|
||||
import type { Task } from '@/task-runners/task-managers/task-requester';
|
||||
import { TaskRequester } from '@/task-runners/task-managers/task-requester';
|
||||
|
||||
class TestTaskRequester extends TaskRequester {
|
||||
sentMessages: unknown[] = [];
|
||||
|
||||
sendMessage(message: unknown) {
|
||||
this.sentMessages.push(message);
|
||||
}
|
||||
}
|
||||
|
||||
describe('TaskRequester', () => {
|
||||
let instance: TestTaskRequester;
|
||||
const mockNodeTypes = mock<NodeTypes>();
|
||||
|
||||
beforeEach(() => {
|
||||
instance = new TestTaskRequester(mockNodeTypes);
|
||||
});
|
||||
|
||||
describe('handleRpc', () => {
|
||||
test.each([
|
||||
['logNodeOutput', ['hello world']],
|
||||
['helpers.assertBinaryData', [0, 'propertyName']],
|
||||
['helpers.getBinaryDataBuffer', [0, 'propertyName']],
|
||||
['helpers.prepareBinaryData', [Buffer.from('data').toJSON(), 'filename', 'mimetype']],
|
||||
['helpers.setBinaryDataBuffer', [{ data: '123' }, Buffer.from('data').toJSON()]],
|
||||
['helpers.binaryToString', [Buffer.from('data').toJSON(), 'utf8']],
|
||||
['helpers.httpRequest', [{ url: 'http://localhost' }]],
|
||||
])('should handle %s rpc call', async (methodName, args) => {
|
||||
const executeFunctions = set({}, methodName.split('.'), jest.fn());
|
||||
|
||||
const mockTask = mock<Task>({
|
||||
taskId: 'taskId',
|
||||
data: {
|
||||
executeFunctions,
|
||||
},
|
||||
});
|
||||
instance.tasks.set('taskId', mockTask);
|
||||
|
||||
await instance.handleRpc('taskId', 'callId', methodName, args);
|
||||
|
||||
expect(instance.sentMessages).toEqual([
|
||||
{
|
||||
callId: 'callId',
|
||||
data: undefined,
|
||||
status: 'success',
|
||||
taskId: 'taskId',
|
||||
type: 'requester:rpcresponse',
|
||||
},
|
||||
]);
|
||||
expect(get(executeFunctions, methodName.split('.'))).toHaveBeenCalledWith(...args);
|
||||
});
|
||||
|
||||
it('converts any serialized buffer arguments into buffers', async () => {
|
||||
const mockPrepareBinaryData = jest.fn().mockResolvedValue(undefined);
|
||||
const mockTask = mock<Task>({
|
||||
taskId: 'taskId',
|
||||
data: {
|
||||
executeFunctions: {
|
||||
helpers: {
|
||||
prepareBinaryData: mockPrepareBinaryData,
|
||||
},
|
||||
},
|
||||
},
|
||||
});
|
||||
instance.tasks.set('taskId', mockTask);
|
||||
|
||||
await instance.handleRpc('taskId', 'callId', 'helpers.prepareBinaryData', [
|
||||
Buffer.from('data').toJSON(),
|
||||
'filename',
|
||||
'mimetype',
|
||||
]);
|
||||
|
||||
expect(mockPrepareBinaryData).toHaveBeenCalledWith(
|
||||
Buffer.from('data'),
|
||||
'filename',
|
||||
'mimetype',
|
||||
);
|
||||
});
|
||||
|
||||
describe('errors', () => {
|
||||
it('sends method not allowed error if method is not in the allow list', async () => {
|
||||
const mockTask = mock<Task>({
|
||||
taskId: 'taskId',
|
||||
data: {
|
||||
executeFunctions: {},
|
||||
},
|
||||
});
|
||||
instance.tasks.set('taskId', mockTask);
|
||||
|
||||
await instance.handleRpc('taskId', 'callId', 'notAllowedMethod', []);
|
||||
|
||||
expect(instance.sentMessages).toEqual([
|
||||
{
|
||||
callId: 'callId',
|
||||
data: 'Method not allowed',
|
||||
status: 'error',
|
||||
taskId: 'taskId',
|
||||
type: 'requester:rpcresponse',
|
||||
},
|
||||
]);
|
||||
});
|
||||
|
||||
it('sends error if method throws', async () => {
|
||||
const error = new Error('Test error');
|
||||
const mockTask = mock<Task>({
|
||||
taskId: 'taskId',
|
||||
data: {
|
||||
executeFunctions: {
|
||||
helpers: {
|
||||
assertBinaryData: jest.fn().mockRejectedValue(error),
|
||||
},
|
||||
},
|
||||
},
|
||||
});
|
||||
instance.tasks.set('taskId', mockTask);
|
||||
|
||||
await instance.handleRpc('taskId', 'callId', 'helpers.assertBinaryData', []);
|
||||
|
||||
expect(instance.sentMessages).toEqual([
|
||||
{
|
||||
callId: 'callId',
|
||||
data: error,
|
||||
status: 'error',
|
||||
taskId: 'taskId',
|
||||
type: 'requester:rpcresponse',
|
||||
},
|
||||
]);
|
||||
});
|
||||
});
|
||||
});
|
||||
});
|
||||
Reference in New Issue
Block a user