Files
superset2/superset-frontend/src/explore/exploreUtils/getSimpleSQLExpression.test.ts
T

96 lines
3.2 KiB
TypeScript

/**
* Licensed to the Apache Software Foundation (ASF) under one
* or more contributor license agreements. See the NOTICE file
* distributed with this work for additional information
* regarding copyright ownership. The ASF licenses this file
* to you under the Apache License, Version 2.0 (the
* "License"); you may not use this file except in compliance
* with the License. You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing,
* software distributed under the License is distributed on an
* "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
* KIND, either express or implied. See the License for the
* specific language governing permissions and limitations
* under the License.
*/
import { cleanup } from 'spec/helpers/testing-library';
import { EMPTY_STRING, NULL_STRING } from 'src/utils/common';
import { getSimpleSQLExpression } from '.';
import { Operators } from '../constants';
// Add cleanup after each test
afterEach(async () => {
cleanup();
// Wait for any pending effects to complete
await new Promise(resolve => setTimeout(resolve, 0));
});
const params = {
subject: 'subject',
operator: 'operator',
comparator: 'comparator',
};
test('Should return "" if subject is falsy', () => {
expect(getSimpleSQLExpression('', params.operator, params.comparator)).toBe(
'',
);
expect(
getSimpleSQLExpression(undefined, params.operator, params.comparator),
).toBe('');
});
test('Should return null string and empty string', () => {
expect(getSimpleSQLExpression(params.subject, Operators.In, [null, ''])).toBe(
`subject ${Operators.In} (${NULL_STRING}, ${EMPTY_STRING})`,
);
});
test('Should return subject if operator is falsy', () => {
expect(getSimpleSQLExpression(params.subject, '', params.comparator)).toBe(
params.subject,
);
expect(
getSimpleSQLExpression(params.subject, undefined, params.comparator),
).toBe(params.subject);
});
test('Should return correct string when subject and operator are valid values', () => {
expect(
getSimpleSQLExpression(params.subject, params.operator, params.comparator),
).toBe("subject operator 'comparator'");
expect(
getSimpleSQLExpression(params.subject, params.operator, [
params.comparator,
'comparator-2',
]),
).toBe("subject operator 'comparator', 'comparator-2'");
});
test('Should handle boolean false comparator as a string value', () => {
expect(getSimpleSQLExpression(params.subject, params.operator, false)).toBe(
"subject operator 'FALSE'",
);
});
test('Should handle boolean true comparator as a string value', () => {
expect(getSimpleSQLExpression(params.subject, params.operator, true)).toBe(
"subject operator 'TRUE'",
);
});
test('Should render array-literal comparators as-is (not quoted)', () => {
// Whole-array = filter: the pasted array literal is shown unquoted.
expect(getSimpleSQLExpression('ingredients', '=', "['1 large egg']")).toBe(
"ingredients = ['1 large egg']",
);
// IN with multiple array literals.
expect(
getSimpleSQLExpression('ingredients', Operators.In, ["['a']", "['b']"]),
).toBe(`ingredients ${Operators.In} (['a'], ['b'])`);
});