feat(editor): NDV in focus panel experiment feedback (no-changelog) (#19304)

This commit is contained in:
Suguru Inoue
2025-09-15 12:30:17 +02:00
committed by GitHub
parent 3576443a01
commit c15e9437ee
32 changed files with 543 additions and 127 deletions

View File

@@ -10,11 +10,17 @@ import type { useNodeTypesStore } from '@/stores/nodeTypes.store';
import { useSettingsStore } from '@/stores/settings.store';
import { mockedStore } from '@/__tests__/utils';
import { createEventBus } from '@n8n/utils/event-bus';
import { createMockEnterpriseSettings } from '@/__tests__/mocks';
import {
createTestExpressionLocalResolveContext,
createMockEnterpriseSettings,
createTestNode,
createTestWorkflowObject,
} from '@/__tests__/mocks';
import { useWorkflowsStore } from '@/stores/workflows.store';
import type { INodeParameterResourceLocator } from 'n8n-workflow';
import { NodeConnectionTypes, type INodeParameterResourceLocator } from 'n8n-workflow';
import type { IWorkflowDb, WorkflowListResource } from '@/Interface';
import { mock } from 'vitest-mock-extended';
import { ExpressionLocalResolveContextSymbol } from '@/constants';
function getNdvStateMock(): Partial<ReturnType<typeof useNDVStore>> {
return {
@@ -34,6 +40,8 @@ function getNdvStateMock(): Partial<ReturnType<typeof useNDVStore>> {
expressionOutputItemIndex: 0,
isTableHoverOnboarded: false,
setHighlightDraggables: vi.fn(),
setNDVPanelDataIsEmpty: vi.fn(),
setNDVBranchIndex: vi.fn(),
};
}
@@ -111,6 +119,8 @@ describe('ParameterInput.vue', () => {
expressionOutputItemIndex: 0,
isTableHoverOnboarded: false,
setHighlightDraggables: vi.fn(),
setNDVPanelDataIsEmpty: vi.fn(),
setNDVBranchIndex: vi.fn(),
};
mockNodeTypesState = {
allNodeTypes: [],
@@ -649,4 +659,59 @@ describe('ParameterInput.vue', () => {
});
});
});
describe('data mapper', () => {
const workflow = createTestWorkflowObject({
nodes: [createTestNode({ name: 'n0' }), createTestNode({ name: 'n1' })],
connections: {
n1: {
[NodeConnectionTypes.Main]: [[{ node: 'n0', index: 0, type: NodeConnectionTypes.Main }]],
},
},
});
const ctx = createTestExpressionLocalResolveContext({
workflow,
nodeName: 'n0',
inputNode: { name: 'n1', runIndex: 0, branchIndex: 0 },
});
it('should render mapper', async () => {
const rendered = renderComponent({
global: { provide: { [ExpressionLocalResolveContextSymbol]: ctx } },
props: {
path: 'name',
parameter: { displayName: 'Name', name: 'name', type: 'string' },
modelValue: '',
},
});
expect(rendered.queryByTestId('ndv-input-panel')).toBeInTheDocument();
});
it('should not render mapper if given node property is a node setting', async () => {
const rendered = renderComponent({
global: { provide: { [ExpressionLocalResolveContextSymbol]: ctx } },
props: {
path: 'name',
parameter: { displayName: 'Name', name: 'name', type: 'string', isNodeSetting: true },
modelValue: '',
},
});
expect(rendered.queryByTestId('ndv-input-panel')).not.toBeInTheDocument();
});
it('should not render mapper if given node property has datetime type', async () => {
const rendered = renderComponent({
global: { provide: { [ExpressionLocalResolveContextSymbol]: ctx } },
props: {
path: 'name',
parameter: { displayName: 'Name', name: 'name', type: 'dateTime' },
modelValue: '',
},
});
expect(rendered.queryByTestId('ndv-input-panel')).not.toBeInTheDocument();
});
});
});