fix(editor): Set correct type for right input in filter component (#8771)

This commit is contained in:
Elias Meire
2024-03-05 12:19:30 +01:00
committed by GitHub
parent 0d10befd60
commit 5d5466343e
2 changed files with 68 additions and 66 deletions

View File

@@ -79,16 +79,17 @@ const leftParameter = computed<INodeProperties>(() => ({
...operatorTypeToNodeProperty(operator.value.type), ...operatorTypeToNodeProperty(operator.value.type),
})); }));
const rightParameter = computed<INodeProperties>(() => ({ const rightParameter = computed<INodeProperties>(() => {
name: '', const type = operator.value.rightType ?? operator.value.type;
displayName: '', return {
default: '', name: '',
placeholder: displayName: '',
operator.value.type === 'dateTime' default: '',
? now.value placeholder:
: i18n.baseText('filter.condition.placeholderRight'), type === 'dateTime' ? now.value : i18n.baseText('filter.condition.placeholderRight'),
...operatorTypeToNodeProperty(operator.value.type), ...operatorTypeToNodeProperty(type),
})); };
});
const onLeftValueChange = (update: IUpdateInformation): void => { const onLeftValueChange = (update: IUpdateInformation): void => {
condition.value.leftValue = update.value; condition.value.leftValue = update.value;

View File

@@ -6,6 +6,7 @@ import { useNDVStore } from '@/stores/ndv.store';
import { createTestingPinia } from '@pinia/testing'; import { createTestingPinia } from '@pinia/testing';
import userEvent from '@testing-library/user-event'; import userEvent from '@testing-library/user-event';
import { within } from '@testing-library/vue'; import { within } from '@testing-library/vue';
import { getFilterOperator } from '../utils';
const DEFAULT_SETUP = { const DEFAULT_SETUP = {
pinia: createTestingPinia({ pinia: createTestingPinia({
@@ -62,29 +63,22 @@ describe('FilterConditions.vue', () => {
{ {
leftValue: '={{ $json.tags }}', leftValue: '={{ $json.tags }}',
rightValue: 'exotic', rightValue: 'exotic',
operator: { operator: getFilterOperator('array:contains'),
type: 'array',
operation: 'contains',
rightType: 'any',
},
}, },
{ {
leftValue: '={{ $json.meta }}', leftValue: '={{ $json.meta }}',
rightValue: '', rightValue: '',
operator: { operator: getFilterOperator('object:notEmpty'),
type: 'object',
operation: 'notEmpty',
singleValue: true,
},
}, },
{ {
leftValue: '={{ $json.test }}', leftValue: '={{ $json.name }}',
rightValue: 'other', rightValue: 'John',
operator: { operator: getFilterOperator('string:equals'),
type: 'string', },
operation: 'equals', {
singleValue: true, leftValue: '={{ $json.tags }}',
}, rightValue: 5,
operator: getFilterOperator('array:lengthGte'),
}, },
], ],
combinator: 'or', combinator: 'or',
@@ -95,31 +89,53 @@ describe('FilterConditions.vue', () => {
const conditions = await findAllByTestId('filter-condition'); const conditions = await findAllByTestId('filter-condition');
const combinators = await findAllByTestId('filter-combinator-select'); const combinators = await findAllByTestId('filter-combinator-select');
expect(combinators).toHaveLength(2); expect(combinators).toHaveLength(3);
expect(combinators[0].querySelector('input')?.value).toEqual('OR'); expect(combinators[0].querySelector('input')).toHaveValue('OR');
expect(combinators[1]).toHaveTextContent('OR'); expect(combinators[1]).toHaveTextContent('OR');
expect(conditions).toHaveLength(3); expect(conditions).toHaveLength(4);
expect(conditions[0].querySelector('[data-test-id="filter-condition-left"]')).toHaveTextContent(
// array:contains
expect(within(conditions[0]).getByTestId('filter-condition-left')).toHaveTextContent(
'{{ $json.tags }}', '{{ $json.tags }}',
); );
expect( expect(
conditions[0].querySelector('[data-test-id="filter-operator-select"]')?.querySelector('input') within(conditions[0]).getByTestId('filter-operator-select').querySelector('input'),
?.value, ).toHaveValue('contains');
).toEqual('contains');
expect( expect(
conditions[0].querySelector('[data-test-id="filter-condition-right"]')?.querySelector('input') within(conditions[0]).getByTestId('filter-condition-right').querySelector('input'),
?.value, ).toHaveValue('exotic');
).toEqual('exotic');
expect(conditions[1].querySelector('[data-test-id="filter-condition-left"]')).toHaveTextContent( // object:notEmpty
expect(within(conditions[1]).getByTestId('filter-condition-left')).toHaveTextContent(
'{{ $json.meta }}', '{{ $json.meta }}',
); );
expect( expect(
conditions[1].querySelector('[data-test-id="filter-operator-select"]')?.querySelector('input') within(conditions[1]).getByTestId('filter-operator-select').querySelector('input'),
?.value, ).toHaveValue('is not empty');
).toEqual('is not empty'); expect(within(conditions[1]).queryByTestId('filter-condition-right')).not.toBeInTheDocument();
expect(conditions[1].querySelector('[data-test-id="filter-condition-right"]')).toBeNull();
// string:equals
expect(within(conditions[2]).getByTestId('filter-condition-left')).toHaveTextContent(
'{{ $json.name }}',
);
expect(
within(conditions[2]).getByTestId('filter-operator-select').querySelector('input'),
).toHaveValue('is equal to');
expect(
within(conditions[2]).getByTestId('filter-condition-right').querySelector('input'),
).toHaveValue('John');
// array:lengthGte
expect(within(conditions[3]).getByTestId('filter-condition-left')).toHaveTextContent(
'{{ $json.tags }}',
);
expect(
within(conditions[3]).getByTestId('filter-operator-select').querySelector('input'),
).toHaveValue('length greater than or equal to');
expect(
within(conditions[3]).getByTestId('filter-condition-right').querySelector('input'),
).toHaveValue(5);
}); });
it('renders parameter issues', async () => { it('renders parameter issues', async () => {
@@ -137,18 +153,12 @@ describe('FilterConditions.vue', () => {
{ {
leftValue: '={{ $json.num }}', leftValue: '={{ $json.num }}',
rightValue: '5', rightValue: '5',
operator: { operator: getFilterOperator('number:equals'),
type: 'number',
operation: 'equals',
},
}, },
{ {
leftValue: '={{ $json.num }}', leftValue: '={{ $json.num }}',
rightValue: 'not a number', rightValue: 'not a number',
operator: { operator: getFilterOperator('number:equals'),
type: 'number',
operation: 'equals',
},
}, },
], ],
}, },
@@ -199,12 +209,12 @@ describe('FilterConditions.vue', () => {
conditions: [ conditions: [
{ {
leftValue: 'foo', leftValue: 'foo',
operator: { type: 'string', operation: 'equals' }, operator: getFilterOperator('string:equals'),
rightValue: 'bar', rightValue: 'bar',
}, },
{ {
leftValue: 'foo', leftValue: 'foo',
operator: { type: 'string', operation: 'equals' }, operator: getFilterOperator('string:equals'),
rightValue: 'bar', rightValue: 'bar',
}, },
], ],
@@ -272,12 +282,12 @@ describe('FilterConditions.vue', () => {
conditions: [ conditions: [
{ {
leftValue: 'foo', leftValue: 'foo',
operator: { type: 'string', operation: 'equals' }, operator: getFilterOperator('string:equals'),
rightValue: 'bar', rightValue: 'bar',
}, },
{ {
leftValue: 'foo', leftValue: 'foo',
operator: { type: 'string', operation: 'equals' }, operator: getFilterOperator('string:equals'),
rightValue: 'bar', rightValue: 'bar',
}, },
], ],
@@ -316,10 +326,7 @@ describe('FilterConditions.vue', () => {
id: '1', id: '1',
leftValue: 'foo', leftValue: 'foo',
rightValue: 'bar', rightValue: 'bar',
operator: { operator: getFilterOperator('string:equals'),
type: 'string',
operation: 'equals',
},
}, },
], ],
combinator: 'and', combinator: 'and',
@@ -335,19 +342,13 @@ describe('FilterConditions.vue', () => {
id: '2', id: '2',
leftValue: 'quz', leftValue: 'quz',
rightValue: 'qux', rightValue: 'qux',
operator: { operator: getFilterOperator('string:notEquals'),
type: 'string',
operation: 'notEquals',
},
}, },
{ {
id: '3', id: '3',
leftValue: 5, leftValue: 5,
rightValue: 6, rightValue: 6,
operator: { operator: getFilterOperator('number:gt'),
type: 'number',
operation: 'gt',
},
}, },
], ],
combinator: 'and', combinator: 'and',