From 169122378968b4d4c73d921ee2d5d86b76e1cd01 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Iv=C3=A1n=20Ovejero?= Date: Mon, 2 Oct 2023 09:13:55 +0200 Subject: [PATCH] fix(core): Account for itemless case on restoring binary data ID (#7305) https://linear.app/n8n/issue/PAY-862 --- .../executionLifecycleHooks/restoreBinaryDataId.ts | 2 +- packages/cli/test/unit/execution.lifecycle.test.ts | 12 +++++++++++- 2 files changed, 12 insertions(+), 2 deletions(-) diff --git a/packages/cli/src/executionLifecycleHooks/restoreBinaryDataId.ts b/packages/cli/src/executionLifecycleHooks/restoreBinaryDataId.ts index 95682494d..88d8688df 100644 --- a/packages/cli/src/executionLifecycleHooks/restoreBinaryDataId.ts +++ b/packages/cli/src/executionLifecycleHooks/restoreBinaryDataId.ts @@ -25,7 +25,7 @@ export async function restoreBinaryDataId(run: IRun, executionId: string) { const { runData } = run.data.resultData; const promises = Object.keys(runData).map(async (nodeName) => { - const binaryDataId = runData[nodeName]?.[0]?.data?.main?.[0]?.[0].binary?.data.id; + const binaryDataId = runData[nodeName]?.[0]?.data?.main?.[0]?.[0]?.binary?.data.id; if (!binaryDataId || !isMissingExecutionId(binaryDataId)) return; diff --git a/packages/cli/test/unit/execution.lifecycle.test.ts b/packages/cli/test/unit/execution.lifecycle.test.ts index 093bb3d28..f68cf34f7 100644 --- a/packages/cli/test/unit/execution.lifecycle.test.ts +++ b/packages/cli/test/unit/execution.lifecycle.test.ts @@ -3,7 +3,7 @@ import { BinaryDataService } from 'n8n-core'; import { mockInstance } from '../integration/shared/utils/mocking'; import type { IRun } from 'n8n-workflow'; -function toIRun(item: object) { +function toIRun(item?: object) { return { data: { resultData: { @@ -84,4 +84,14 @@ describe('restoreBinaryDataId()', () => { expect(binaryDataService.rename).not.toHaveBeenCalled(); expect(getDataId(run, 'json')).toBe(dataId); }); + + it('should do nothing on itemless case', async () => { + const executionId = '999'; + + const promise = restoreBinaryDataId(toIRun(), executionId); + + await expect(promise).resolves.not.toThrow(); + + expect(binaryDataService.rename).not.toHaveBeenCalled(); + }); });