mirror of
https://github.com/Abdulazizzn/n8n-enterprise-unlocked.git
synced 2025-12-18 10:31:15 +00:00
feat: Allow workflow execution even if it has errors (#9037)
This commit is contained in:
@@ -5,9 +5,7 @@ import { setActivePinia } from 'pinia';
|
||||
import type { IStartRunData, IWorkflowData } from '@/Interface';
|
||||
import { useWorkflowsStore } from '@/stores/workflows.store';
|
||||
import { useUIStore } from '@/stores/ui.store';
|
||||
import { useToast } from '@/composables/useToast';
|
||||
import { useWorkflowHelpers } from '@/composables/useWorkflowHelpers';
|
||||
import { useNodeHelpers } from '@/composables/useNodeHelpers';
|
||||
import { useRouter } from 'vue-router';
|
||||
import type { IPinData, IRunData, Workflow } from 'n8n-workflow';
|
||||
|
||||
@@ -70,7 +68,6 @@ vi.mock('@/composables/useWorkflowHelpers', () => ({
|
||||
|
||||
vi.mock('@/composables/useNodeHelpers', () => ({
|
||||
useNodeHelpers: vi.fn().mockReturnValue({
|
||||
refreshNodeIssues: vi.fn(),
|
||||
updateNodesExecutionIssues: vi.fn(),
|
||||
}),
|
||||
}));
|
||||
@@ -94,9 +91,7 @@ describe('useRunWorkflow({ router })', () => {
|
||||
let uiStore: ReturnType<typeof useUIStore>;
|
||||
let workflowsStore: ReturnType<typeof useWorkflowsStore>;
|
||||
let router: ReturnType<typeof useRouter>;
|
||||
let toast: ReturnType<typeof useToast>;
|
||||
let workflowHelpers: ReturnType<typeof useWorkflowHelpers>;
|
||||
let nodeHelpers: ReturnType<typeof useNodeHelpers>;
|
||||
|
||||
beforeAll(() => {
|
||||
const pinia = createTestingPinia();
|
||||
@@ -108,9 +103,7 @@ describe('useRunWorkflow({ router })', () => {
|
||||
workflowsStore = useWorkflowsStore();
|
||||
|
||||
router = useRouter();
|
||||
toast = useToast();
|
||||
workflowHelpers = useWorkflowHelpers({ router });
|
||||
nodeHelpers = useNodeHelpers();
|
||||
});
|
||||
|
||||
describe('runWorkflowApi()', () => {
|
||||
@@ -170,22 +163,26 @@ describe('useRunWorkflow({ router })', () => {
|
||||
expect(result).toBeUndefined();
|
||||
});
|
||||
|
||||
it('should handle workflow issues correctly', async () => {
|
||||
it('should execute workflow even if it has issues', async () => {
|
||||
const mockExecutionResponse = { executionId: '123' };
|
||||
const { runWorkflow } = useRunWorkflow({ router });
|
||||
|
||||
vi.mocked(uiStore).isActionActive.mockReturnValue(false);
|
||||
vi.mocked(workflowHelpers).getCurrentWorkflow.mockReturnValue({
|
||||
name: 'Test Workflow',
|
||||
} as unknown as Workflow);
|
||||
vi.mocked(workflowsStore).runWorkflow.mockResolvedValue(mockExecutionResponse);
|
||||
vi.mocked(workflowsStore).nodesIssuesExist = true;
|
||||
vi.mocked(nodeHelpers).refreshNodeIssues.mockImplementation(() => {});
|
||||
vi.mocked(workflowHelpers).checkReadyForExecution.mockReturnValue({
|
||||
someNode: { issues: { input: ['issue'] } },
|
||||
});
|
||||
vi.mocked(workflowHelpers).getWorkflowDataToSave.mockResolvedValue({
|
||||
id: 'workflowId',
|
||||
nodes: [],
|
||||
} as unknown as IWorkflowData);
|
||||
vi.mocked(workflowsStore).getWorkflowRunData = {
|
||||
NodeName: [],
|
||||
};
|
||||
|
||||
const result = await runWorkflow({});
|
||||
expect(result).toBeUndefined();
|
||||
expect(toast.showMessage).toHaveBeenCalled();
|
||||
expect(result).toEqual(mockExecutionResponse);
|
||||
});
|
||||
|
||||
it('should execute workflow successfully', async () => {
|
||||
@@ -198,7 +195,6 @@ describe('useRunWorkflow({ router })', () => {
|
||||
vi.mocked(workflowHelpers).getCurrentWorkflow.mockReturnValue({
|
||||
name: 'Test Workflow',
|
||||
} as Workflow);
|
||||
vi.mocked(nodeHelpers).refreshNodeIssues.mockImplementation(() => {});
|
||||
vi.mocked(workflowHelpers).getWorkflowDataToSave.mockResolvedValue({
|
||||
id: 'workflowId',
|
||||
nodes: [],
|
||||
|
||||
Reference in New Issue
Block a user