diff --git a/packages/nodes-base/nodes/WriteBinaryFile/test/WriteBinaryFile.test.ts b/packages/nodes-base/nodes/WriteBinaryFile/test/WriteBinaryFile.test.ts new file mode 100644 index 0000000000..8a11e927c1 --- /dev/null +++ b/packages/nodes-base/nodes/WriteBinaryFile/test/WriteBinaryFile.test.ts @@ -0,0 +1,70 @@ +/* eslint-disable @typescript-eslint/no-loop-func */ +import * as Helpers from '../../../test/nodes/Helpers'; +import type { WorkflowTestData } from '../../../test/nodes/types'; +import { executeWorkflow } from '../../../test/nodes/ExecuteWorkflow'; +import path from 'path'; + +describe('Test Write Binary File Node', () => { + beforeEach(async () => { + await Helpers.initBinaryDataManager(); + }); + + const temporaryDir = Helpers.createTemporaryDir(); + const workflow = Helpers.readJsonFileSync( + 'nodes/WriteBinaryFile/test/WriteBinaryFile.workflow.json', + ); + const readFileNode = workflow.nodes.find((n: any) => n.name === 'Read Binary File'); + readFileNode.parameters.filePath = path.join(__dirname, 'image.jpg'); + + const writeFileNode = workflow.nodes.find((n: any) => n.name === 'Write Binary File'); + const writeFilePath = path.join(temporaryDir, 'image-written.jpg'); + writeFileNode.parameters.fileName = writeFilePath; + + const tests: WorkflowTestData[] = [ + { + description: 'nodes/WriteBinaryFile/test/WriteBinaryFile.workflow.json', + input: { + workflowData: workflow, + }, + output: { + nodeData: { + 'Write Binary File': [ + [ + { + json: { + fileName: writeFilePath, + }, + binary: { + data: { + mimeType: 'image/jpeg', + fileType: 'image', + fileExtension: 'jpg', + data: '/9j/4AAQSkZJRgABAQEASABIAAD/4QBmRXhpZgAATU0AKgAAAAgABAEaAAUAAAABAAAAPgEbAAUAAAABAAAARgEoAAMAAAABAAIAAAExAAIAAAAQAAAATgAAAAAAARlJAAAD6AABGUkAAAPocGFpbnQubmV0IDUuMC4xAP/bAEMAIBYYHBgUIBwaHCQiICYwUDQwLCwwYkZKOlB0Znp4cmZwboCQuJyAiK6KbnCg2qKuvsTO0M58muLy4MjwuMrOxv/bAEMBIiQkMCowXjQ0XsaEcITGxsbGxsbGxsbGxsbGxsbGxsbGxsbGxsbGxsbGxsbGxsbGxsbGxsbGxsbGxsbGxsbGxv/AABEIAB8AOwMBEgACEQEDEQH/xAAfAAABBQEBAQEBAQAAAAAAAAAAAQIDBAUGBwgJCgv/xAC1EAACAQMDAgQDBQUEBAAAAX0BAgMABBEFEiExQQYTUWEHInEUMoGRoQgjQrHBFVLR8CQzYnKCCQoWFxgZGiUmJygpKjQ1Njc4OTpDREVGR0hJSlNUVVZXWFlaY2RlZmdoaWpzdHV2d3h5eoOEhYaHiImKkpOUlZaXmJmaoqOkpaanqKmqsrO0tba3uLm6wsPExcbHyMnK0tPU1dbX2Nna4eLj5OXm5+jp6vHy8/T19vf4+fr/xAAfAQADAQEBAQEBAQEBAAAAAAAAAQIDBAUGBwgJCgv/xAC1EQACAQIEBAMEBwUEBAABAncAAQIDEQQFITEGEkFRB2FxEyIygQgUQpGhscEJIzNS8BVictEKFiQ04SXxFxgZGiYnKCkqNTY3ODk6Q0RFRkdISUpTVFVWV1hZWmNkZWZnaGlqc3R1dnd4eXqCg4SFhoeIiYqSk5SVlpeYmZqio6Slpqeoqaqys7S1tre4ubrCw8TFxsfIycrS09TV1tfY2dri4+Tl5ufo6ery8/T19vf4+fr/2gAMAwEAAhEDEQA/AOgqgrXF2zNHJ5aKcD3oNPZ23di/VKG82bkuTh1OMgdaAdOSLtZ6G5ut0iSeWoOAKAdO27NCqUN8oQrcHDqccDrQDpyRNPdRwEKcsx7CobIebPLORwThc0inGMF724jagNpxG4OOM1dIDAgjIPBpkqUOxnR2pmh85pW3nJB9KkNi4yqTssZ6rSNXNX0ehHFfusYDLuI7+tXY4I40ChQcdzQRKcL7Fb7PcQO32cqUY5we1XqZPtH11KsFoFDGYK7sckkZxVqgTnJlEQXMBZYGUoTkZ7VeoH7RvcqwWaIh80K7k5JIq1QJzkyhbMtvdSxMdqnlc1amgjmx5i5I70inNSVpFdrmaWRltkBVerHvUW57B2AUNGxyOaC+VW9xXLVrcGbcjrtkXqKZZxvveeTAL9APSgiooq1ty3RTMj//2Q==', + directory: __dirname, + fileName: 'image.jpg', + fileSize: '1.04 kB', + }, + }, + }, + ], + ], + }, + }, + }, + ]; + + const nodeTypes = Helpers.setup(tests); + + for (const testData of tests) { + test(testData.description, async () => { + 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); + }); + } +}); diff --git a/packages/nodes-base/nodes/WriteBinaryFile/test/WriteBinaryFile.workflow.json b/packages/nodes-base/nodes/WriteBinaryFile/test/WriteBinaryFile.workflow.json new file mode 100644 index 0000000000..b79452ef82 --- /dev/null +++ b/packages/nodes-base/nodes/WriteBinaryFile/test/WriteBinaryFile.workflow.json @@ -0,0 +1,76 @@ +{ + "name": "Write Binary File unit test", + "nodes": [ + { + "parameters": {}, + "id": "b319a78c-ff34-4888-b412-e08609bd84e4", + "name": "When clicking \"Execute Workflow\"", + "type": "n8n-nodes-base.manualTrigger", + "typeVersion": 1, + "position": [ + 1040, + 640 + ] + }, + { + "parameters": { + "fileName": "C:\\Test\\image-written.jpg", + "options": {} + }, + "id": "804f7422-7414-4557-bf3b-0aa0e8f4885e", + "name": "Write Binary File", + "type": "n8n-nodes-base.writeBinaryFile", + "typeVersion": 1, + "position": [ + 1540, + 640 + ] + }, + { + "parameters": { + "filePath": "C:\\Test\\image.jpg" + }, + "id": "7bed9527-c0a9-4b03-8f2f-d96d805f7fbc", + "name": "Read Binary File", + "type": "n8n-nodes-base.readBinaryFile", + "typeVersion": 1, + "position": [ + 1300, + 640 + ] + } + ], + "pinData": {}, + "connections": { + "When clicking \"Execute Workflow\"": { + "main": [ + [ + { + "node": "Read Binary File", + "type": "main", + "index": 0 + } + ] + ] + }, + "Read Binary File": { + "main": [ + [ + { + "node": "Write Binary File", + "type": "main", + "index": 0 + } + ] + ] + } + }, + "active": false, + "settings": {}, + "versionId": "eb891093-ce90-44d8-9325-b2130e59819d", + "id": "185", + "meta": { + "instanceId": "104a4d08d8897b8bdeb38aaca515021075e0bd8544c983c2bb8c86e6a8e6081c" + }, + "tags": [] +} \ No newline at end of file diff --git a/packages/nodes-base/nodes/WriteBinaryFile/test/image.jpg b/packages/nodes-base/nodes/WriteBinaryFile/test/image.jpg new file mode 100644 index 0000000000..24b60c421e Binary files /dev/null and b/packages/nodes-base/nodes/WriteBinaryFile/test/image.jpg differ diff --git a/packages/nodes-base/test/nodes/Helpers.ts b/packages/nodes-base/test/nodes/Helpers.ts index 457489e2b0..83fb957b2e 100644 --- a/packages/nodes-base/test/nodes/Helpers.ts +++ b/packages/nodes-base/test/nodes/Helpers.ts @@ -158,8 +158,12 @@ const loadKnownNodes = (): Record => { return knownNodes!; }; +export function createTemporaryDir(prefix: string = 'n8n') { + return mkdtempSync(path.join(tmpdir(), prefix)); +} + export async function initBinaryDataManager(mode: 'default' | 'filesystem' = 'default') { - const temporaryDir = mkdtempSync(path.join(tmpdir(), 'n8n')); + const temporaryDir = createTemporaryDir(); await BinaryDataManager.init({ mode, availableModes: mode, @@ -167,6 +171,7 @@ export async function initBinaryDataManager(mode: 'default' | 'filesystem' = 'de binaryDataTTL: 1, persistedBinaryDataTTL: 1, }); + return temporaryDir; } export function setup(testData: Array | WorkflowTestData) {