mirror of
https://github.com/apache/superset.git
synced 2026-04-19 08:04:53 +00:00
* [sql lab] disable cross schema search This is killing our metastore as people type it emits large all-table-dump as they hit the keystroke. It never returns as it times out and hammers the poor metastore. Also some improvements around the disabling the table select on the left panel and having the table name not be sticky. * typo
184 lines
5.8 KiB
JavaScript
184 lines
5.8 KiB
JavaScript
import React from 'react';
|
|
import { shallow } from 'enzyme';
|
|
import { describe, it } from 'mocha';
|
|
import sinon from 'sinon';
|
|
import { expect } from 'chai';
|
|
|
|
import $ from 'jquery';
|
|
import { table, defaultQueryEditor, databases, tables } from './fixtures';
|
|
import SqlEditorLeftBar from '../../../javascripts/SqlLab/components/SqlEditorLeftBar';
|
|
import TableElement from '../../../javascripts/SqlLab/components/TableElement';
|
|
|
|
global.notify = {
|
|
error: () => {},
|
|
};
|
|
|
|
describe('SqlEditorLeftBar', () => {
|
|
const mockedProps = {
|
|
actions: {
|
|
queryEditorSetSchema: sinon.stub(),
|
|
queryEditorSetDb: sinon.stub(),
|
|
setDatabases: sinon.stub(),
|
|
addTable: sinon.stub(),
|
|
},
|
|
tables: [table],
|
|
queryEditor: defaultQueryEditor,
|
|
database: {},
|
|
height: 0,
|
|
};
|
|
|
|
let wrapper;
|
|
let ajaxStub;
|
|
beforeEach(() => {
|
|
ajaxStub = sinon.stub($, 'get');
|
|
wrapper = shallow(<SqlEditorLeftBar {...mockedProps} />);
|
|
});
|
|
afterEach(() => {
|
|
ajaxStub.restore();
|
|
});
|
|
|
|
it('is valid', () => {
|
|
expect(
|
|
React.isValidElement(<SqlEditorLeftBar {...mockedProps} />),
|
|
).to.equal(true);
|
|
});
|
|
it('renders a TableElement', () => {
|
|
expect(wrapper.find(TableElement)).to.have.length(1);
|
|
});
|
|
describe('onDatabaseChange', () => {
|
|
it('should fetch tables', () => {
|
|
sinon.stub(wrapper.instance(), 'fetchTables');
|
|
sinon.stub(wrapper.instance(), 'fetchSchemas');
|
|
wrapper.instance().onDatabaseChange({ value: 1, label: 'main' });
|
|
|
|
expect(wrapper.instance().fetchTables.getCall(0).args[0]).to.equal(1);
|
|
expect(wrapper.instance().fetchSchemas.getCall(0).args[0]).to.equal(1);
|
|
wrapper.instance().fetchTables.restore();
|
|
wrapper.instance().fetchSchemas.restore();
|
|
});
|
|
it('should clear tableOptions', () => {
|
|
wrapper.instance().onDatabaseChange();
|
|
expect(wrapper.state().tableOptions).to.deep.equal([]);
|
|
});
|
|
});
|
|
describe('getTableNamesBySubStr', () => {
|
|
it('should handle empty', () => (
|
|
wrapper.instance().getTableNamesBySubStr('')
|
|
.then((data) => {
|
|
expect(data).to.deep.equal({ options: [] });
|
|
})
|
|
));
|
|
it('should handle table name', () => {
|
|
const queryEditor = Object.assign({}, defaultQueryEditor,
|
|
{
|
|
dbId: 1,
|
|
schema: 'main',
|
|
});
|
|
const mockTableOptions = { options: [table] };
|
|
wrapper.setProps({ queryEditor });
|
|
ajaxStub.callsFake(() => {
|
|
const d = $.Deferred();
|
|
d.resolve(mockTableOptions);
|
|
return d.promise();
|
|
});
|
|
|
|
return wrapper.instance().getTableNamesBySubStr('my table')
|
|
.then((data) => {
|
|
expect(ajaxStub.getCall(0).args[0]).to.equal('/superset/tables/1/main/my table');
|
|
expect(data).to.deep.equal(mockTableOptions);
|
|
});
|
|
});
|
|
});
|
|
it('dbMutator should build databases options', () => {
|
|
const options = wrapper.instance().dbMutator(databases);
|
|
expect(options).to.deep.equal([
|
|
{ value: 1, label: 'main' },
|
|
{ value: 208, label: 'Presto - Gold' },
|
|
]);
|
|
});
|
|
describe('fetchTables', () => {
|
|
it('should clear table options', () => {
|
|
wrapper.instance().fetchTables(1);
|
|
expect(wrapper.state().tableOptions).to.deep.equal([]);
|
|
expect(wrapper.state().filterOptions).to.be.a('null');
|
|
});
|
|
it('should fetch table options', () => {
|
|
ajaxStub.callsFake(() => {
|
|
const d = $.Deferred();
|
|
d.resolve(tables);
|
|
return d.promise();
|
|
});
|
|
wrapper.instance().fetchTables(1, 'main', 'birth_names');
|
|
|
|
expect(ajaxStub.getCall(0).args[0]).to.equal('/superset/tables/1/main/birth_names/');
|
|
expect(wrapper.state().tableLength).to.equal(3);
|
|
});
|
|
it('should handle error', () => {
|
|
ajaxStub.callsFake(() => {
|
|
const d = $.Deferred();
|
|
d.reject('error message');
|
|
return d.promise();
|
|
});
|
|
wrapper.instance().fetchTables(1, 'main', 'birth_names');
|
|
expect(wrapper.state().tableOptions).to.deep.equal([]);
|
|
expect(wrapper.state().tableLength).to.equal(0);
|
|
});
|
|
});
|
|
describe('fetchSchemas', () => {
|
|
it('should fetch schema options', () => {
|
|
const schemaOptions = {
|
|
schemas: ['main', 'erf', 'superset'],
|
|
};
|
|
ajaxStub.callsFake(() => {
|
|
const d = $.Deferred();
|
|
d.resolve(schemaOptions);
|
|
return d.promise();
|
|
});
|
|
wrapper.instance().fetchSchemas(1);
|
|
expect(ajaxStub.getCall(0).args[0]).to.equal('/superset/schemas/1/');
|
|
expect(wrapper.state().schemaOptions).to.have.length(3);
|
|
});
|
|
it('should handle error', () => {
|
|
ajaxStub.callsFake(() => {
|
|
const d = $.Deferred();
|
|
d.reject('error message');
|
|
return d.promise();
|
|
});
|
|
wrapper.instance().fetchSchemas(123);
|
|
expect(wrapper.state().schemaOptions).to.deep.equal([]);
|
|
});
|
|
});
|
|
describe('changeTable', () => {
|
|
beforeEach(() => {
|
|
sinon.stub(wrapper.instance(), 'fetchTables');
|
|
});
|
|
afterEach(() => {
|
|
wrapper.instance().fetchTables.restore();
|
|
});
|
|
it('test 1', () => {
|
|
wrapper.instance().changeTable({
|
|
value: 'birth_names',
|
|
label: 'birth_names',
|
|
});
|
|
expect(wrapper.state().tableName).to.equal('birth_names');
|
|
});
|
|
it('test 2', () => {
|
|
wrapper.instance().changeTable({
|
|
value: 'main.my_table',
|
|
label: 'my_table',
|
|
});
|
|
expect(wrapper.instance().fetchTables.getCall(0).args[1]).to.equal('main');
|
|
});
|
|
});
|
|
it('changeSchema', () => {
|
|
sinon.stub(wrapper.instance(), 'fetchTables');
|
|
|
|
wrapper.instance().changeSchema({ label: 'main', value: 'main' });
|
|
expect(wrapper.instance().fetchTables.getCall(0).args[1]).to.equal('main');
|
|
wrapper.instance().changeSchema();
|
|
expect(wrapper.instance().fetchTables.getCall(1).args[1]).to.be.a('null');
|
|
|
|
wrapper.instance().fetchTables.restore();
|
|
});
|
|
});
|