fix(n8n Form Node): Completion page response mode, do not error on execution running (no-changelog) (#13566)

This commit is contained in:
Michael Kret
2025-03-10 12:45:07 +02:00
committed by GitHub
parent 8cbb188598
commit 4fdf469190
8 changed files with 243 additions and 7 deletions

View File

@@ -3,6 +3,8 @@ import ParameterInputList from './ParameterInputList.vue';
import { createTestingPinia } from '@pinia/testing';
import { mockedStore } from '@/__tests__/utils';
import { useNDVStore } from '@/stores/ndv.store';
import * as workflowHelpers from '@/composables/useWorkflowHelpers';
import {
TEST_NODE_NO_ISSUES,
TEST_PARAMETERS,
@@ -11,6 +13,15 @@ import {
FIXED_COLLECTION_PARAMETERS,
TEST_ISSUE,
} from './ParameterInputList.test.constants';
import { FORM_NODE_TYPE, FORM_TRIGGER_NODE_TYPE } from 'n8n-workflow';
import type { INodeUi } from '../Interface';
import type { MockInstance } from 'vitest';
vi.mock('@/composables/useWorkflowHelpers', () => ({
useWorkflowHelpers: vi.fn().mockReturnValue({
getCurrentWorkflow: vi.fn(),
}),
}));
vi.mock('vue-router', async () => {
const actual = await vi.importActual('vue-router');
@@ -98,4 +109,71 @@ describe('ParameterInputList', () => {
).toBeInTheDocument();
expect(getByText(TEST_ISSUE)).toBeInTheDocument();
});
describe('updateFormParameters', () => {
const workflowHelpersMock: MockInstance = vi.spyOn(workflowHelpers, 'useWorkflowHelpers');
const formParameters = [
{
displayName: 'TRIGGER NOTICE',
name: 'triggerNotice',
type: 'notice',
default: '',
},
];
afterAll(() => {
workflowHelpersMock.mockRestore();
});
it('should show triggerNotice if Form Trigger not connected', () => {
ndvStore.activeNode = { name: 'From', type: FORM_NODE_TYPE, parameters: {} } as INodeUi;
workflowHelpersMock.mockReturnValue({
getCurrentWorkflow: vi.fn(() => {
return {
getParentNodes: vi.fn(() => []),
nodes: {},
};
}),
});
const { getByText } = renderComponent({
props: {
parameters: formParameters,
nodeValues: {},
},
});
expect(getByText('TRIGGER NOTICE')).toBeInTheDocument();
});
it('should not show triggerNotice if Form Trigger is connected', () => {
ndvStore.activeNode = { name: 'From', type: FORM_NODE_TYPE, parameters: {} } as INodeUi;
workflowHelpersMock.mockReturnValue({
getCurrentWorkflow: vi.fn(() => {
return {
getParentNodes: vi.fn(() => ['Form Trigger']),
nodes: {
'Form Trigger': {
type: FORM_TRIGGER_NODE_TYPE,
parameters: {},
},
},
};
}),
});
const { queryByText } = renderComponent({
props: {
parameters: formParameters,
nodeValues: {},
},
});
const el = queryByText('TRIGGER NOTICE');
expect(el).not.toBeInTheDocument();
});
});
});

View File

@@ -28,6 +28,7 @@ import {
} from '@/constants';
import { useNDVStore } from '@/stores/ndv.store';
import { useNodeTypesStore } from '@/stores/nodeTypes.store';
import {
getMainAuthField,
getNodeAuthFields,
@@ -114,6 +115,11 @@ const filteredParameters = computedWithControl(
if (activeNode && activeNode.type === FORM_TRIGGER_NODE_TYPE) {
return updateFormTriggerParameters(parameters, activeNode.name);
}
if (activeNode && activeNode.type === FORM_NODE_TYPE) {
return updateFormParameters(parameters, activeNode.name);
}
if (
activeNode &&
activeNode.type === WAIT_NODE_TYPE &&
@@ -267,6 +273,19 @@ function updateWaitParameters(parameters: INodeProperties[], nodeName: string) {
return parameters;
}
function updateFormParameters(parameters: INodeProperties[], nodeName: string) {
const workflow = workflowHelpers.getCurrentWorkflow();
const parentNodes = workflow.getParentNodes(nodeName);
const formTriggerName = parentNodes.find(
(node) => workflow.nodes[node].type === FORM_TRIGGER_NODE_TYPE,
);
if (formTriggerName) return parameters.filter((parameter) => parameter.name !== 'triggerNotice');
return parameters;
}
function onParameterBlur(parameterName: string) {
emit('parameterBlur', parameterName);
}