mirror of
https://github.com/n8n-io/n8n.git
synced 2024-11-14 08:34:07 -08:00
1d2666b37c
This PR is an example for how we can 1. improve typing and remove boilerplate code in may of our nodes 2. use nock to write effective unit tests for nodes that make external calls ## Review / Merge checklist - [x] PR title and summary are descriptive - [x] Add tests
172 lines
3.6 KiB
TypeScript
172 lines
3.6 KiB
TypeScript
import { apiUrl } from '../Peekalink.node';
|
|
import type { WorkflowTestData } from '@test/nodes/types';
|
|
import { executeWorkflow } from '@test/nodes/ExecuteWorkflow';
|
|
import * as Helpers from '@test/nodes/Helpers';
|
|
|
|
describe('Peekalink Node', () => {
|
|
const exampleComPreview = {
|
|
url: 'https://example.com/',
|
|
domain: 'example.com',
|
|
lastUpdated: '2022-11-13T22:43:20.986744Z',
|
|
nextUpdate: '2022-11-20T22:43:20.982384Z',
|
|
contentType: 'html',
|
|
mimeType: 'text/html',
|
|
size: 648,
|
|
redirected: false,
|
|
title: 'Example Domain',
|
|
description: 'This domain is for use in illustrative examples in documents',
|
|
name: 'EXAMPLE.COM',
|
|
trackersDetected: false,
|
|
};
|
|
|
|
const tests: WorkflowTestData[] = [
|
|
{
|
|
description: 'should run isAvailable operation',
|
|
input: {
|
|
workflowData: {
|
|
nodes: [
|
|
{
|
|
parameters: {},
|
|
id: '8b7bb389-e4ef-424a-bca1-e7ead60e43eb',
|
|
name: 'When clicking "Execute Workflow"',
|
|
type: 'n8n-nodes-base.manualTrigger',
|
|
typeVersion: 1,
|
|
position: [740, 380],
|
|
},
|
|
{
|
|
parameters: {
|
|
operation: 'isAvailable',
|
|
url: 'https://example.com/',
|
|
},
|
|
id: '7354367e-39a7-4fc1-8cdd-442f0b0c7b62',
|
|
name: 'Peekalink',
|
|
type: 'n8n-nodes-base.peekalink',
|
|
typeVersion: 1,
|
|
position: [960, 380],
|
|
credentials: {
|
|
peekalinkApi: 'token',
|
|
},
|
|
},
|
|
],
|
|
connections: {
|
|
'When clicking "Execute Workflow"': {
|
|
main: [
|
|
[
|
|
{
|
|
node: 'Peekalink',
|
|
type: 'main',
|
|
index: 0,
|
|
},
|
|
],
|
|
],
|
|
},
|
|
},
|
|
},
|
|
},
|
|
output: {
|
|
nodeExecutionOrder: ['Start'],
|
|
nodeData: {
|
|
Peekalink: [
|
|
[
|
|
{
|
|
json: {
|
|
isAvailable: true,
|
|
},
|
|
},
|
|
],
|
|
],
|
|
},
|
|
},
|
|
nock: {
|
|
baseUrl: apiUrl,
|
|
mocks: [
|
|
{
|
|
method: 'post',
|
|
path: '/is-available/',
|
|
statusCode: 200,
|
|
responseBody: { isAvailable: true },
|
|
},
|
|
],
|
|
},
|
|
},
|
|
{
|
|
description: 'should run preview operation',
|
|
input: {
|
|
workflowData: {
|
|
nodes: [
|
|
{
|
|
parameters: {},
|
|
id: '8b7bb389-e4ef-424a-bca1-e7ead60e43eb',
|
|
name: 'When clicking "Execute Workflow"',
|
|
type: 'n8n-nodes-base.manualTrigger',
|
|
typeVersion: 1,
|
|
position: [740, 380],
|
|
},
|
|
{
|
|
parameters: {
|
|
operation: 'preview',
|
|
url: 'https://example.com/',
|
|
},
|
|
id: '7354367e-39a7-4fc1-8cdd-442f0b0c7b62',
|
|
name: 'Peekalink',
|
|
type: 'n8n-nodes-base.peekalink',
|
|
typeVersion: 1,
|
|
position: [960, 380],
|
|
credentials: {
|
|
peekalinkApi: 'token',
|
|
},
|
|
},
|
|
],
|
|
connections: {
|
|
'When clicking "Execute Workflow"': {
|
|
main: [
|
|
[
|
|
{
|
|
node: 'Peekalink',
|
|
type: 'main',
|
|
index: 0,
|
|
},
|
|
],
|
|
],
|
|
},
|
|
},
|
|
},
|
|
},
|
|
output: {
|
|
nodeExecutionOrder: ['Start'],
|
|
nodeData: {
|
|
Peekalink: [
|
|
[
|
|
{
|
|
json: exampleComPreview,
|
|
},
|
|
],
|
|
],
|
|
},
|
|
},
|
|
nock: {
|
|
baseUrl: apiUrl,
|
|
mocks: [
|
|
{
|
|
method: 'post',
|
|
path: '/',
|
|
statusCode: 200,
|
|
responseBody: exampleComPreview,
|
|
},
|
|
],
|
|
},
|
|
},
|
|
];
|
|
|
|
const nodeTypes = Helpers.setup(tests);
|
|
|
|
test.each(tests)('$description', async (testData) => {
|
|
const { result } = await executeWorkflow(testData, nodeTypes);
|
|
const resultNodeData = Helpers.getResultNodeData(result, testData);
|
|
resultNodeData.forEach(({ nodeName, resultData }) =>
|
|
expect(resultData).toEqual(testData.output.nodeData[nodeName]),
|
|
);
|
|
expect(result.finished).toEqual(true);
|
|
});
|
|
});
|