diff --git a/superset-frontend/spec/javascripts/sqllab/SqlEditorLeftBar_spec.jsx b/superset-frontend/spec/javascripts/sqllab/SqlEditorLeftBar_spec.jsx index 8430baf127d..1ba1ac821fb 100644 --- a/superset-frontend/spec/javascripts/sqllab/SqlEditorLeftBar_spec.jsx +++ b/superset-frontend/spec/javascripts/sqllab/SqlEditorLeftBar_spec.jsx @@ -20,7 +20,8 @@ import React from 'react'; import configureStore from 'redux-mock-store'; import fetchMock from 'fetch-mock'; import { shallow } from 'enzyme'; -import { render, screen, act } from '@testing-library/react'; +import { render, screen } from 'spec/helpers/testing-library'; +import userEvent from '@testing-library/user-event'; import { Provider } from 'react-redux'; import '@testing-library/jest-dom/extend-expect'; import thunk from 'redux-thunk'; @@ -56,6 +57,10 @@ describe('SqlEditorLeftBar', () => { }); }); + afterEach(() => { + wrapper.unmount(); + }); + it('is valid', () => { expect(React.isValidElement()).toBe( true, @@ -68,19 +73,14 @@ describe('SqlEditorLeftBar', () => { }); describe('Left Panel Expansion', () => { - beforeEach(async () => { - await act(async () => { - render( - - - - - , - ); - }); - }); - - it('table should be visible when expanded is true', async () => { + it('table should be visible when expanded is true', () => { + const { container } = render( + + + + + , + ); const dbSelect = screen.getByText(/select a database/i); const schemaSelect = screen.getByText(/select a schema \(0\)/i); const dropdown = screen.getByText(/Select table/i); @@ -89,5 +89,28 @@ describe('Left Panel Expansion', () => { expect(schemaSelect).toBeInTheDocument(); expect(dropdown).toBeInTheDocument(); expect(abUser).toBeInTheDocument(); + expect( + container.querySelector('.ant-collapse-content-active'), + ).toBeInTheDocument(); + }); + + it('should toggle the table when the header is clicked', async () => { + const collapseMock = jest.fn(); + render( + + + + + , + ); + const header = screen.getByText(/ab_user/); + userEvent.click(header); + expect(collapseMock).toHaveBeenCalled(); }); }); diff --git a/superset-frontend/spec/javascripts/sqllab/TableElement_spec.jsx b/superset-frontend/spec/javascripts/sqllab/TableElement_spec.jsx index d8b5646d344..aef614fae9a 100644 --- a/superset-frontend/spec/javascripts/sqllab/TableElement_spec.jsx +++ b/superset-frontend/spec/javascripts/sqllab/TableElement_spec.jsx @@ -118,22 +118,6 @@ describe('TableElement', () => { 'active', ); }); - it('calls the collapseTable action', () => { - const wrapper = mount( - - - , - { - wrappingComponent: ThemeProvider, - wrappingComponentProps: { - theme: supersetTheme, - }, - }, - ); - expect(mockedActions.collapseTable.called).toBe(false); - wrapper.find('[data-test="collapse"]').hostNodes().simulate('click'); - expect(mockedActions.collapseTable.called).toBe(true); - }); it('removes the table', () => { const wrapper = mount( diff --git a/superset-frontend/src/SqlLab/components/SqlEditorLeftBar.jsx b/superset-frontend/src/SqlLab/components/SqlEditorLeftBar.jsx index c4751a1aeeb..667abde1e80 100644 --- a/superset-frontend/src/SqlLab/components/SqlEditorLeftBar.jsx +++ b/superset-frontend/src/SqlLab/components/SqlEditorLeftBar.jsx @@ -59,6 +59,7 @@ export default class SqlEditorLeftBar extends React.PureComponent { this.onDbChange = this.onDbChange.bind(this); this.getDbList = this.getDbList.bind(this); this.onTableChange = this.onTableChange.bind(this); + this.onToggleTable = this.onToggleTable.bind(this); } onSchemaChange(schema) { @@ -91,6 +92,16 @@ export default class SqlEditorLeftBar extends React.PureComponent { this.props.actions.addTable(this.props.queryEditor, tableName, schemaName); } + onToggleTable(tables) { + this.props.tables.forEach(table => { + if (!tables.includes(table.id.toString()) && table.expanded) { + this.props.actions.collapseTable(table); + } else if (tables.includes(table.id.toString()) && !table.expanded) { + this.props.actions.expandTable(table); + } + }); + } + getDbList(dbs) { this.props.actions.setDatabases(dbs); } @@ -172,13 +183,13 @@ export default class SqlEditorLeftBar extends React.PureComponent { `} expandIconPosition="right" ghost + onChange={this.onToggleTable} > {this.props.tables.map(table => ( ))} diff --git a/superset-frontend/src/SqlLab/components/TableElement.jsx b/superset-frontend/src/SqlLab/components/TableElement.jsx index 13c106ca6fd..0811d955a1e 100644 --- a/superset-frontend/src/SqlLab/components/TableElement.jsx +++ b/superset-frontend/src/SqlLab/components/TableElement.jsx @@ -79,15 +79,6 @@ class TableElement extends React.PureComponent { this.props.actions.addQueryEditor(qe); } - toggleTable(e) { - e.preventDefault(); - if (this.props.table.expanded) { - this.props.actions.collapseTable(this.props.table); - } else { - this.props.actions.expandTable(this.props.table); - } - } - removeTable() { this.props.actions.removeDataPreview(this.props.table); this.props.actions.removeTable(this.props.table); @@ -214,13 +205,7 @@ class TableElement extends React.PureComponent { title={table.name} trigger={['hover']} > - { - this.toggleTable(e); - }} - > + {table.name}