diff --git a/packages/editor-ui/src/composables/__tests__/useNodeHelpers.test.ts b/packages/editor-ui/src/composables/__tests__/useNodeHelpers.test.ts new file mode 100644 index 0000000000..1969b3d5b8 --- /dev/null +++ b/packages/editor-ui/src/composables/__tests__/useNodeHelpers.test.ts @@ -0,0 +1,182 @@ +import { setActivePinia } from 'pinia'; +import { createTestingPinia } from '@pinia/testing'; +import { useNodeHelpers } from '@/composables/useNodeHelpers'; +import { createTestNode } from '@/__tests__/mocks'; +import { useWorkflowsStore } from '@/stores/workflows.store'; + +vi.mock('@/stores/workflows.store', () => ({ + useWorkflowsStore: vi.fn(), +})); + +describe('useNodeHelpers()', () => { + beforeAll(() => { + setActivePinia(createTestingPinia()); + }); + + afterEach(() => { + vi.clearAllMocks(); + }); + + describe('getNodeInputData()', () => { + it('should return an empty array when node is null', () => { + const { getNodeInputData } = useNodeHelpers(); + + const result = getNodeInputData(null); + expect(result).toEqual([]); + }); + + it('should return an empty array when workflowsStore.getWorkflowExecution() is null', () => { + vi.mocked(useWorkflowsStore).mockReturnValue({ + getWorkflowExecution: null, + } as ReturnType); + const { getNodeInputData } = useNodeHelpers(); + const node = createTestNode({ + name: 'test', + type: 'test', + }); + + const result = getNodeInputData(node); + expect(result).toEqual([]); + }); + + it('should return an empty array when workflowsStore.getWorkflowExecution() is null', () => { + vi.mocked(useWorkflowsStore).mockReturnValue({ + getWorkflowExecution: null, + } as ReturnType); + const { getNodeInputData } = useNodeHelpers(); + const node = createTestNode({ + name: 'test', + type: 'test', + }); + + const result = getNodeInputData(node); + expect(result).toEqual([]); + }); + + it('should return an empty array when resultData is not available', () => { + vi.mocked(useWorkflowsStore).mockReturnValue({ + getWorkflowExecution: { + data: { + resultData: null, + }, + }, + } as unknown as ReturnType); + const { getNodeInputData } = useNodeHelpers(); + const node = createTestNode({ + name: 'test', + type: 'test', + }); + + const result = getNodeInputData(node); + expect(result).toEqual([]); + }); + + it('should return an empty array when taskData is unavailable', () => { + const nodeName = 'Code'; + vi.mocked(useWorkflowsStore).mockReturnValue({ + getWorkflowExecution: { + data: { + resultData: { + runData: { + [nodeName]: [], + }, + }, + }, + }, + } as unknown as ReturnType); + const { getNodeInputData } = useNodeHelpers(); + const node = createTestNode({ + name: nodeName, + type: 'test', + }); + + const result = getNodeInputData(node); + expect(result).toEqual([]); + }); + + it('should return an empty array when taskData.data is unavailable', () => { + const nodeName = 'Code'; + vi.mocked(useWorkflowsStore).mockReturnValue({ + getWorkflowExecution: { + data: { + resultData: { + runData: { + [nodeName]: [{ data: undefined }], + }, + }, + }, + }, + } as unknown as ReturnType); + const { getNodeInputData } = useNodeHelpers(); + const node = createTestNode({ + name: nodeName, + type: 'test', + }); + + const result = getNodeInputData(node); + expect(result).toEqual([]); + }); + + it('should return input data from inputOverride', () => { + const nodeName = 'Code'; + const data = { hello: 'world' }; + vi.mocked(useWorkflowsStore).mockReturnValue({ + getWorkflowExecution: { + data: { + resultData: { + runData: { + [nodeName]: [ + { + inputOverride: { + main: [data], + }, + }, + ], + }, + }, + }, + }, + } as unknown as ReturnType); + const { getNodeInputData } = useNodeHelpers(); + const node = createTestNode({ + name: nodeName, + type: 'test', + }); + + const result = getNodeInputData(node, 0, 0, 'input'); + expect(result).toEqual(data); + }); + + it.each(['example', 'example.withdot', 'example.with.dots', 'example.with.dots and spaces'])( + 'should return input data for "%s" node name, with given connection type and output index', + (nodeName) => { + const data = { hello: 'world' }; + vi.mocked(useWorkflowsStore).mockReturnValue({ + getWorkflowExecution: { + data: { + resultData: { + runData: { + [nodeName]: [ + { + data: { + main: [data], + }, + }, + ], + }, + }, + }, + }, + } as unknown as ReturnType); + const { getNodeInputData } = useNodeHelpers(); + const node = createTestNode({ + name: nodeName, + type: 'test', + }); + + const result = getNodeInputData(node); + expect(result).toEqual(data); + }, + ); + }); +}); diff --git a/packages/editor-ui/src/composables/useNodeHelpers.ts b/packages/editor-ui/src/composables/useNodeHelpers.ts index e801a5ab95..fda8a2fa35 100644 --- a/packages/editor-ui/src/composables/useNodeHelpers.ts +++ b/packages/editor-ui/src/composables/useNodeHelpers.ts @@ -539,7 +539,7 @@ export function useNodeHelpers() { } const runData = executionData.resultData.runData; - const taskData = get(runData, `[${node.name}][${runIndex}]`); + const taskData = get(runData, [node.name, runIndex]); if (!taskData) { return []; }