mirror of
https://github.com/apache/superset.git
synced 2026-04-10 03:45:22 +00:00
* [refactor] Migrate from Mocha+Chai to Jest This change migrates all the existing unit tests - to Jest's global expect and matchers from chai's imported expect, asserts and matchers. - to Jest's describe/test from mocha's describe/it The majority of the mechanical changes to tests are achieved through running jest-codemods. The only two note-worthy manual tweaks: 1. Setting a testURL of http://localhost in jest config and adjusting a few tests to leverage this value instead of relying on about:blank. 2. Re-enabling ExploreChartPanel_spec which was previously commented out as we cannot have empty tests with nothing in it with Jest. :) This change also removes dependencies to Mocha and Chai. * Remove the test:one command as it now does the same thing as test. * Fixing lint errors. The diff looks large but is large done through `yarn run lint --fix` The only noteworthy change is the one in eslintrc for tests. The env has been updated from mocha to jest. * Adding eslint-plugin-jest and further modify tests. - One small fix in sqllab's Timer Spec for a test that is not using the spy it created for testing. - Deletion of a duplicated test caught by eslint-plugin-jest. * - Make istanbul coverage work with Jest. - Remove dependency on stand-alone istanbul and babel-istanbul as they're built-into jest. Yes! * Attempt to fix dynamic imports in tests. * run sequentially and log heap usage * - tweaking maxworkers for travis and specifying coverageDirectory for codecov - remove dynamic import in shim.js now that it is set in babelrc for tests only.
193 lines
6.1 KiB
JavaScript
193 lines
6.1 KiB
JavaScript
import AdhocMetric, { EXPRESSION_TYPES } from '../../../src/explore/AdhocMetric';
|
|
import { AGGREGATES } from '../../../src/explore/constants';
|
|
|
|
const valueColumn = { type: 'DOUBLE', column_name: 'value' };
|
|
|
|
describe('AdhocMetric', () => {
|
|
it('sets label, hasCustomLabel and optionName in constructor', () => {
|
|
const adhocMetric = new AdhocMetric({
|
|
column: valueColumn,
|
|
aggregate: AGGREGATES.SUM,
|
|
});
|
|
expect(adhocMetric.optionName.length).toBeGreaterThan(10);
|
|
expect(adhocMetric).toEqual({
|
|
expressionType: EXPRESSION_TYPES.SIMPLE,
|
|
column: valueColumn,
|
|
aggregate: AGGREGATES.SUM,
|
|
fromFormData: false,
|
|
label: 'SUM(value)',
|
|
hasCustomLabel: false,
|
|
optionName: adhocMetric.optionName,
|
|
sqlExpression: null,
|
|
});
|
|
});
|
|
|
|
it('can create altered duplicates', () => {
|
|
const adhocMetric1 = new AdhocMetric({
|
|
column: valueColumn,
|
|
aggregate: AGGREGATES.SUM,
|
|
});
|
|
const adhocMetric2 = adhocMetric1.duplicateWith({ aggregate: AGGREGATES.AVG });
|
|
|
|
expect(adhocMetric1.column).toBe(adhocMetric2.column);
|
|
expect(adhocMetric1.column).toBe(valueColumn);
|
|
|
|
expect(adhocMetric1.aggregate).toBe(AGGREGATES.SUM);
|
|
expect(adhocMetric2.aggregate).toBe(AGGREGATES.AVG);
|
|
});
|
|
|
|
it('can verify equality', () => {
|
|
const adhocMetric1 = new AdhocMetric({
|
|
column: valueColumn,
|
|
aggregate: AGGREGATES.SUM,
|
|
});
|
|
const adhocMetric2 = adhocMetric1.duplicateWith({});
|
|
|
|
// eslint-disable-next-line no-unused-expressions
|
|
expect(adhocMetric1.equals(adhocMetric2)).toBe(true);
|
|
});
|
|
|
|
it('can verify inequality', () => {
|
|
const adhocMetric1 = new AdhocMetric({
|
|
column: valueColumn,
|
|
aggregate: AGGREGATES.SUM,
|
|
label: 'old label',
|
|
hasCustomLabel: true,
|
|
});
|
|
const adhocMetric2 = adhocMetric1.duplicateWith({ label: 'new label' });
|
|
|
|
// eslint-disable-next-line no-unused-expressions
|
|
expect(adhocMetric1.equals(adhocMetric2)).toBe(false);
|
|
|
|
const adhocMetric3 = new AdhocMetric({
|
|
expressionType: EXPRESSION_TYPES.SQL,
|
|
sqlExpression: 'COUNT(*)',
|
|
label: 'old label',
|
|
hasCustomLabel: true,
|
|
});
|
|
const adhocMetric4 = adhocMetric3.duplicateWith({ sqlExpression: 'COUNT(1)' });
|
|
|
|
// eslint-disable-next-line no-unused-expressions
|
|
expect(adhocMetric3.equals(adhocMetric4)).toBe(false);
|
|
});
|
|
|
|
it('updates label if hasCustomLabel is false', () => {
|
|
const adhocMetric1 = new AdhocMetric({
|
|
column: valueColumn,
|
|
aggregate: AGGREGATES.SUM,
|
|
});
|
|
const adhocMetric2 = adhocMetric1.duplicateWith({ aggregate: AGGREGATES.AVG });
|
|
|
|
expect(adhocMetric2.label).toBe('AVG(value)');
|
|
});
|
|
|
|
it('keeps label if hasCustomLabel is true', () => {
|
|
const adhocMetric1 = new AdhocMetric({
|
|
column: valueColumn,
|
|
aggregate: AGGREGATES.SUM,
|
|
hasCustomLabel: true,
|
|
label: 'label1',
|
|
});
|
|
const adhocMetric2 = adhocMetric1.duplicateWith({ aggregate: AGGREGATES.AVG });
|
|
|
|
expect(adhocMetric2.label).toBe('label1');
|
|
});
|
|
|
|
it('can determine if it is valid', () => {
|
|
const adhocMetric1 = new AdhocMetric({
|
|
expressionType: EXPRESSION_TYPES.SIMPLE,
|
|
column: valueColumn,
|
|
aggregate: AGGREGATES.SUM,
|
|
hasCustomLabel: true,
|
|
label: 'label1',
|
|
});
|
|
// eslint-disable-next-line no-unused-expressions
|
|
expect(adhocMetric1.isValid()).toBe(true);
|
|
|
|
const adhocMetric2 = new AdhocMetric({
|
|
expressionType: EXPRESSION_TYPES.SIMPLE,
|
|
column: valueColumn,
|
|
aggregate: null,
|
|
hasCustomLabel: true,
|
|
label: 'label1',
|
|
});
|
|
// eslint-disable-next-line no-unused-expressions
|
|
expect(adhocMetric2.isValid()).toBe(false);
|
|
|
|
const adhocMetric3 = new AdhocMetric({
|
|
expressionType: EXPRESSION_TYPES.SQL,
|
|
sqlExpression: 'COUNT(*)',
|
|
hasCustomLabel: true,
|
|
label: 'label1',
|
|
});
|
|
// eslint-disable-next-line no-unused-expressions
|
|
expect(adhocMetric3.isValid()).toBe(true);
|
|
|
|
const adhocMetric4 = new AdhocMetric({
|
|
expressionType: EXPRESSION_TYPES.SQL,
|
|
column: valueColumn,
|
|
aggregate: AGGREGATES.SUM,
|
|
hasCustomLabel: true,
|
|
label: 'label1',
|
|
});
|
|
// eslint-disable-next-line no-unused-expressions
|
|
expect(adhocMetric4.isValid()).toBe(false);
|
|
|
|
const adhocMetric5 = new AdhocMetric({
|
|
expressionType: EXPRESSION_TYPES.SQL,
|
|
hasCustomLabel: true,
|
|
label: 'label1',
|
|
});
|
|
// eslint-disable-next-line no-unused-expressions
|
|
expect(adhocMetric5.isValid()).toBe(false);
|
|
});
|
|
|
|
it(
|
|
'can translate back from sql expressions to simple expressions when possible',
|
|
() => {
|
|
const adhocMetric = new AdhocMetric({
|
|
expressionType: EXPRESSION_TYPES.SQL,
|
|
sqlExpression: 'AVG(my_column)',
|
|
hasCustomLabel: true,
|
|
label: 'label1',
|
|
});
|
|
expect(adhocMetric.inferSqlExpressionColumn()).toBe('my_column');
|
|
expect(adhocMetric.inferSqlExpressionAggregate()).toBe('AVG');
|
|
|
|
const adhocMetric2 = new AdhocMetric({
|
|
expressionType: EXPRESSION_TYPES.SQL,
|
|
sqlExpression: 'AVG(SUM(my_column)) / MAX(other_column)',
|
|
hasCustomLabel: true,
|
|
label: 'label1',
|
|
});
|
|
expect(adhocMetric2.inferSqlExpressionColumn()).toBeNull();
|
|
expect(adhocMetric2.inferSqlExpressionAggregate()).toBeNull();
|
|
},
|
|
);
|
|
|
|
it(
|
|
'will infer columns and aggregates when converting to a simple expression',
|
|
() => {
|
|
const adhocMetric = new AdhocMetric({
|
|
expressionType: EXPRESSION_TYPES.SQL,
|
|
sqlExpression: 'AVG(my_column)',
|
|
hasCustomLabel: true,
|
|
label: 'label1',
|
|
});
|
|
const adhocMetric2 = adhocMetric.duplicateWith({
|
|
expressionType: EXPRESSION_TYPES.SIMPLE,
|
|
aggregate: AGGREGATES.SUM,
|
|
});
|
|
expect(adhocMetric2.aggregate).toBe(AGGREGATES.SUM);
|
|
expect(adhocMetric2.column.column_name).toBe('my_column');
|
|
|
|
const adhocMetric3 = adhocMetric.duplicateWith({
|
|
expressionType: EXPRESSION_TYPES.SIMPLE,
|
|
column: valueColumn,
|
|
});
|
|
expect(adhocMetric3.aggregate).toBe(AGGREGATES.AVG);
|
|
expect(adhocMetric3.column.column_name).toBe('value');
|
|
},
|
|
);
|
|
});
|