diff --git a/packages/editor-ui/src/components/CanvasChat/CanvasChat.test.ts b/packages/editor-ui/src/components/CanvasChat/CanvasChat.test.ts index 47869583a4cf1..1172768acefd2 100644 --- a/packages/editor-ui/src/components/CanvasChat/CanvasChat.test.ts +++ b/packages/editor-ui/src/components/CanvasChat/CanvasChat.test.ts @@ -230,28 +230,28 @@ describe('CanvasChat', () => { // Verify workflow execution expect(workflowsStore.runWorkflow).toHaveBeenCalledWith( expect.objectContaining({ - runData: { - 'When chat message received': [ - { - data: { - main: [ - [ - { - json: { - action: 'sendMessage', - chatInput: 'Hello AI!', - sessionId: expect.any(String), - }, + runData: undefined, + triggerToStartFrom: { + name: 'When chat message received', + data: { + data: { + main: [ + [ + { + json: { + action: 'sendMessage', + chatInput: 'Hello AI!', + sessionId: expect.any(String), }, - ], + }, ], - }, - executionStatus: 'success', - executionTime: 0, - source: [null], - startTime: expect.any(Number), + ], }, - ], + executionStatus: 'success', + executionTime: 0, + source: [null], + startTime: expect.any(Number), + }, }, }), ); diff --git a/packages/editor-ui/src/composables/useRunWorkflow.test.ts b/packages/editor-ui/src/composables/useRunWorkflow.test.ts index e6b8c586f52cd..5d3b1005903cd 100644 --- a/packages/editor-ui/src/composables/useRunWorkflow.test.ts +++ b/packages/editor-ui/src/composables/useRunWorkflow.test.ts @@ -21,7 +21,7 @@ import { useToast } from './useToast'; import { useI18n } from '@/composables/useI18n'; import { useLocalStorage } from '@vueuse/core'; import { ref } from 'vue'; -import { mock } from 'vitest-mock-extended'; +import { captor, mock } from 'vitest-mock-extended'; vi.mock('@/stores/workflows.store', () => ({ useWorkflowsStore: vi.fn().mockReturnValue({ @@ -409,27 +409,28 @@ describe('useRunWorkflow({ router })', () => { const mockExecutionResponse = { executionId: '123' }; const mockRunData = { nodeName: [] }; const { runWorkflow } = useRunWorkflow({ router }); + const dataCaptor = captor(); + const workflow = mock({ name: 'Test Workflow' }); + workflow.getParentNodes.mockReturnValue([]); vi.mocked(useLocalStorage).mockReturnValueOnce(ref(0)); vi.mocked(rootStore).pushConnectionActive = true; vi.mocked(workflowsStore).runWorkflow.mockResolvedValue(mockExecutionResponse); vi.mocked(workflowsStore).nodesIssuesExist = false; - vi.mocked(workflowHelpers).getCurrentWorkflow.mockReturnValue({ - name: 'Test Workflow', - } as Workflow); - vi.mocked(workflowHelpers).getWorkflowDataToSave.mockResolvedValue({ - id: 'workflowId', - nodes: [], - } as unknown as IWorkflowData); + vi.mocked(workflowHelpers).getCurrentWorkflow.mockReturnValue(workflow); + vi.mocked(workflowHelpers).getWorkflowDataToSave.mockResolvedValue( + mock({ id: 'workflowId', nodes: [] }), + ); vi.mocked(workflowsStore).getWorkflowRunData = mockRunData; // ACT - const result = await runWorkflow({}); + const result = await runWorkflow({ destinationNode: 'some node name' }); // ASSERT expect(result).toEqual(mockExecutionResponse); expect(workflowsStore.setWorkflowExecutionData).toHaveBeenCalledTimes(1); - expect(vi.mocked(workflowsStore.setWorkflowExecutionData).mock.calls[0][0]).toMatchObject({ + expect(workflowsStore.setWorkflowExecutionData).toHaveBeenCalledWith(dataCaptor); + expect(dataCaptor.value).toMatchObject({ data: { resultData: { runData: {} } }, }); }); @@ -439,29 +440,57 @@ describe('useRunWorkflow({ router })', () => { const mockExecutionResponse = { executionId: '123' }; const mockRunData = { nodeName: [] }; const { runWorkflow } = useRunWorkflow({ router }); + const dataCaptor = captor(); + const workflow = mock({ name: 'Test Workflow' }); + workflow.getParentNodes.mockReturnValue([]); vi.mocked(useLocalStorage).mockReturnValueOnce(ref(1)); vi.mocked(rootStore).pushConnectionActive = true; vi.mocked(workflowsStore).runWorkflow.mockResolvedValue(mockExecutionResponse); vi.mocked(workflowsStore).nodesIssuesExist = false; - vi.mocked(workflowHelpers).getCurrentWorkflow.mockReturnValue({ - name: 'Test Workflow', - } as Workflow); - vi.mocked(workflowHelpers).getWorkflowDataToSave.mockResolvedValue({ - id: 'workflowId', - nodes: [], - } as unknown as IWorkflowData); + vi.mocked(workflowHelpers).getCurrentWorkflow.mockReturnValue(workflow); + vi.mocked(workflowHelpers).getWorkflowDataToSave.mockResolvedValue( + mock({ id: 'workflowId', nodes: [] }), + ); vi.mocked(workflowsStore).getWorkflowRunData = mockRunData; // ACT - const result = await runWorkflow({}); + const result = await runWorkflow({ destinationNode: 'some node name' }); // ASSERT expect(result).toEqual(mockExecutionResponse); expect(workflowsStore.setWorkflowExecutionData).toHaveBeenCalledTimes(1); - expect(vi.mocked(workflowsStore.setWorkflowExecutionData).mock.calls[0][0]).toMatchObject({ - data: { resultData: { runData: mockRunData } }, - }); + expect(workflowsStore.setWorkflowExecutionData).toHaveBeenCalledWith(dataCaptor); + expect(dataCaptor.value).toMatchObject({ data: { resultData: { runData: mockRunData } } }); + }); + + it("does not send run data if it's not a partial execution even if `PartialExecution.version` is set to 1", async () => { + // ARRANGE + const mockExecutionResponse = { executionId: '123' }; + const mockRunData = { nodeName: [] }; + const { runWorkflow } = useRunWorkflow({ router }); + const dataCaptor = captor(); + const workflow = mock({ name: 'Test Workflow' }); + workflow.getParentNodes.mockReturnValue([]); + + vi.mocked(useLocalStorage).mockReturnValueOnce(ref(1)); + vi.mocked(rootStore).pushConnectionActive = true; + vi.mocked(workflowsStore).runWorkflow.mockResolvedValue(mockExecutionResponse); + vi.mocked(workflowsStore).nodesIssuesExist = false; + vi.mocked(workflowHelpers).getCurrentWorkflow.mockReturnValue(workflow); + vi.mocked(workflowHelpers).getWorkflowDataToSave.mockResolvedValue( + mock({ id: 'workflowId', nodes: [] }), + ); + vi.mocked(workflowsStore).getWorkflowRunData = mockRunData; + + // ACT + const result = await runWorkflow({}); + + // ASSERT + expect(result).toEqual(mockExecutionResponse); + expect(workflowsStore.runWorkflow).toHaveBeenCalledTimes(1); + expect(workflowsStore.runWorkflow).toHaveBeenCalledWith(dataCaptor); + expect(dataCaptor.value).toHaveProperty('runData', undefined); }); }); diff --git a/packages/editor-ui/src/composables/useRunWorkflow.ts b/packages/editor-ui/src/composables/useRunWorkflow.ts index a5489af869278..baa1c7e01a08d 100644 --- a/packages/editor-ui/src/composables/useRunWorkflow.ts +++ b/packages/editor-ui/src/composables/useRunWorkflow.ts @@ -259,14 +259,23 @@ export function useRunWorkflow(useRunWorkflowOpts: { router: ReturnType