feat(editor): Support pasting an expression into a number parameter (#15722)

This commit is contained in:
Elias Meire
2025-05-30 12:02:38 +02:00
committed by GitHub
parent 7dc94b61cb
commit 2a1475d671
2 changed files with 62 additions and 26 deletions

View File

@@ -224,39 +224,65 @@ describe('ParameterInput.vue', () => {
expect(emitted('update')).toContainEqual([expect.objectContaining({ value: 'foo' })]);
});
test('should correctly handle paste events', async () => {
const { container, emitted } = renderComponent({
props: {
path: 'tag',
parameter: {
displayName: 'Tag',
name: 'tag',
type: 'string',
},
modelValue: '',
},
});
const input = container.querySelector('input') as HTMLInputElement;
expect(input).toBeInTheDocument();
await userEvent.click(input);
async function paste(text: string) {
describe('paste events', () => {
async function paste(input: HTMLInputElement, text: string) {
const expression = new DataTransfer();
expression.setData('text', text);
await userEvent.clear(input);
await userEvent.paste(expression);
}
await paste('foo');
expect(emitted('update')).toContainEqual([expect.objectContaining({ value: 'foo' })]);
test('should handle pasting into a string parameter', async () => {
const { container, emitted } = renderComponent({
props: {
path: 'tag',
parameter: {
displayName: 'Tag',
name: 'tag',
type: 'string',
},
modelValue: '',
},
});
const input = container.querySelector('input') as HTMLInputElement;
expect(input).toBeInTheDocument();
await userEvent.click(input);
await paste('={{ $json.foo }}');
expect(emitted('update')).toContainEqual([
expect.objectContaining({ value: '={{ $json.foo }}' }),
]);
await paste(input, 'foo');
expect(emitted('update')).toContainEqual([expect.objectContaining({ value: 'foo' })]);
await paste('=flDvzj%y1nP');
expect(emitted('update')).toContainEqual([expect.objectContaining({ value: '==flDvzj%y1nP' })]);
await paste(input, '={{ $json.foo }}');
expect(emitted('update')).toContainEqual([
expect.objectContaining({ value: '={{ $json.foo }}' }),
]);
await paste(input, '=flDvzj%y1nP');
expect(emitted('update')).toContainEqual([
expect.objectContaining({ value: '==flDvzj%y1nP' }),
]);
});
test('should handle pasting an expression into a number parameter', async () => {
const { container, emitted } = renderComponent({
props: {
path: 'percentage',
parameter: {
displayName: 'Percentage',
name: 'percentage',
type: 'number',
},
modelValue: 1,
},
});
const input = container.querySelector('input') as HTMLInputElement;
expect(input).toBeInTheDocument();
await userEvent.click(input);
await paste(input, '{{ $json.foo }}');
expect(emitted('update')).toContainEqual([
expect.objectContaining({ value: '={{ $json.foo }}' }),
]);
});
});
test('should not reset the value of a multi-select with loadOptionsMethod on load', async () => {