mirror of
https://github.com/n8n-io/n8n.git
synced 2024-11-15 17:14:05 -08:00
166 lines
3.6 KiB
TypeScript
166 lines
3.6 KiB
TypeScript
|
import get from 'lodash/get';
|
||
|
import type { IDataObject, IExecuteFunctions } from 'n8n-workflow';
|
||
|
import { jsonParse } from 'n8n-workflow';
|
||
|
|
||
|
import type { N8nTool } from '../../../../utils/N8nTool';
|
||
|
import { ToolHttpRequest } from '../ToolHttpRequest.node';
|
||
|
|
||
|
const createExecuteFunctionsMock = (parameters: IDataObject, requestMock: any) => {
|
||
|
const nodeParameters = parameters;
|
||
|
|
||
|
return {
|
||
|
getNodeParameter(parameter: string) {
|
||
|
return get(nodeParameters, parameter);
|
||
|
},
|
||
|
getNode() {
|
||
|
return {
|
||
|
name: 'HTTP Request',
|
||
|
};
|
||
|
},
|
||
|
getInputData() {
|
||
|
return [{ json: {} }];
|
||
|
},
|
||
|
getWorkflow() {
|
||
|
return {
|
||
|
name: 'Test Workflow',
|
||
|
};
|
||
|
},
|
||
|
continueOnFail() {
|
||
|
return false;
|
||
|
},
|
||
|
addInputData() {
|
||
|
return { index: 0 };
|
||
|
},
|
||
|
addOutputData() {
|
||
|
return;
|
||
|
},
|
||
|
helpers: {
|
||
|
httpRequest: requestMock,
|
||
|
},
|
||
|
} as unknown as IExecuteFunctions;
|
||
|
};
|
||
|
|
||
|
describe('ToolHttpRequest', () => {
|
||
|
let httpTool: ToolHttpRequest;
|
||
|
let mockRequest: jest.Mock;
|
||
|
|
||
|
describe('Binary response', () => {
|
||
|
beforeEach(() => {
|
||
|
httpTool = new ToolHttpRequest();
|
||
|
mockRequest = jest.fn();
|
||
|
});
|
||
|
|
||
|
it('should return the error when receiving a binary response', async () => {
|
||
|
mockRequest.mockResolvedValue({
|
||
|
body: Buffer.from(''),
|
||
|
headers: {
|
||
|
'content-type': 'image/jpeg',
|
||
|
},
|
||
|
});
|
||
|
|
||
|
const { response } = await httpTool.supplyData.call(
|
||
|
createExecuteFunctionsMock(
|
||
|
{
|
||
|
method: 'GET',
|
||
|
url: 'https://httpbin.org/image/jpeg',
|
||
|
options: {},
|
||
|
placeholderDefinitions: {
|
||
|
values: [],
|
||
|
},
|
||
|
},
|
||
|
mockRequest,
|
||
|
),
|
||
|
0,
|
||
|
);
|
||
|
|
||
|
const res = await (response as N8nTool).invoke('');
|
||
|
|
||
|
expect(res).toContain('error');
|
||
|
expect(res).toContain('Binary data is not supported');
|
||
|
});
|
||
|
|
||
|
it('should return the response text when receiving a text response', async () => {
|
||
|
mockRequest.mockResolvedValue({
|
||
|
body: 'Hello World',
|
||
|
headers: {
|
||
|
'content-type': 'text/plain',
|
||
|
},
|
||
|
});
|
||
|
|
||
|
const { response } = await httpTool.supplyData.call(
|
||
|
createExecuteFunctionsMock(
|
||
|
{
|
||
|
method: 'GET',
|
||
|
url: 'https://httpbin.org/text/plain',
|
||
|
options: {},
|
||
|
placeholderDefinitions: {
|
||
|
values: [],
|
||
|
},
|
||
|
},
|
||
|
mockRequest,
|
||
|
),
|
||
|
0,
|
||
|
);
|
||
|
|
||
|
const res = await (response as N8nTool).invoke('');
|
||
|
expect(res).toEqual('Hello World');
|
||
|
});
|
||
|
|
||
|
it('should return the response text when receiving a text response with a charset', async () => {
|
||
|
mockRequest.mockResolvedValue({
|
||
|
body: 'こんにちは世界',
|
||
|
headers: {
|
||
|
'content-type': 'text/plain; charset=iso-2022-jp',
|
||
|
},
|
||
|
});
|
||
|
|
||
|
const { response } = await httpTool.supplyData.call(
|
||
|
createExecuteFunctionsMock(
|
||
|
{
|
||
|
method: 'GET',
|
||
|
url: 'https://httpbin.org/text/plain',
|
||
|
options: {},
|
||
|
placeholderDefinitions: {
|
||
|
values: [],
|
||
|
},
|
||
|
},
|
||
|
mockRequest,
|
||
|
),
|
||
|
0,
|
||
|
);
|
||
|
|
||
|
const res = await (response as N8nTool).invoke('');
|
||
|
expect(res).toEqual('こんにちは世界');
|
||
|
});
|
||
|
|
||
|
it('should return the response object when receiving a JSON response', async () => {
|
||
|
const mockJson = { hello: 'world' };
|
||
|
|
||
|
mockRequest.mockResolvedValue({
|
||
|
body: mockJson,
|
||
|
headers: {
|
||
|
'content-type': 'application/json',
|
||
|
},
|
||
|
});
|
||
|
|
||
|
const { response } = await httpTool.supplyData.call(
|
||
|
createExecuteFunctionsMock(
|
||
|
{
|
||
|
method: 'GET',
|
||
|
url: 'https://httpbin.org/json',
|
||
|
options: {},
|
||
|
placeholderDefinitions: {
|
||
|
values: [],
|
||
|
},
|
||
|
},
|
||
|
mockRequest,
|
||
|
),
|
||
|
0,
|
||
|
);
|
||
|
|
||
|
const res = await (response as N8nTool).invoke('');
|
||
|
expect(jsonParse(res)).toEqual(mockJson);
|
||
|
});
|
||
|
});
|
||
|
});
|