diff --git a/superset-frontend/spec/fixtures/mockDashboardState.js b/superset-frontend/spec/fixtures/mockDashboardState.js index 619d68fb2fbf5..49b71053710a8 100644 --- a/superset-frontend/spec/fixtures/mockDashboardState.js +++ b/superset-frontend/spec/fixtures/mockDashboardState.js @@ -28,4 +28,5 @@ export default { isPublished: true, css: '', focusedFilterField: null, + refreshFrequency: 0, }; diff --git a/superset-frontend/spec/fixtures/mockState.js b/superset-frontend/spec/fixtures/mockState.js index 3c7627b73f593..1f1e6c4d2a06a 100644 --- a/superset-frontend/spec/fixtures/mockState.js +++ b/superset-frontend/spec/fixtures/mockState.js @@ -24,11 +24,11 @@ import { dashboardLayout } from './mockDashboardLayout'; import dashboardInfo from './mockDashboardInfo'; import { emptyFilters } from './mockDashboardFilters'; import dashboardState from './mockDashboardState'; -import sliceEntities from './mockSliceEntities'; +import { sliceEntitiesForChart } from './mockSliceEntities'; export default { datasources, - sliceEntities, + sliceEntities: sliceEntitiesForChart, charts: chartQueries, nativeFilters: nativeFiltersInfo, dashboardInfo, diff --git a/superset-frontend/spec/javascripts/components/AlteredSliceTag_spec.jsx b/superset-frontend/spec/javascripts/components/AlteredSliceTag_spec.jsx index 14b12a154c550..f939d7aef4114 100644 --- a/superset-frontend/spec/javascripts/components/AlteredSliceTag_spec.jsx +++ b/superset-frontend/spec/javascripts/components/AlteredSliceTag_spec.jsx @@ -160,9 +160,13 @@ describe('AlteredSliceTag', () => { ); const rows = getTableWrapperFromModalBody(modalBody).find('tr'); expect(rows).toHaveLength(8); - const fakeRow = mount(
{rows.get(1)}
); - expect(fakeRow.find('tr')).toHaveLength(1); - expect(fakeRow.find('td')).toHaveLength(3); + const slice = mount( + + {rows.get(1)} +
, + ); + expect(slice.find('tr')).toHaveLength(1); + expect(slice.find('td')).toHaveLength(3); }); }); diff --git a/superset-frontend/spec/javascripts/components/ConfirmStatusChange_spec.jsx b/superset-frontend/spec/javascripts/components/ConfirmStatusChange_spec.jsx index 6abdb7aacedd2..2d158cf2c7e80 100644 --- a/superset-frontend/spec/javascripts/components/ConfirmStatusChange_spec.jsx +++ b/superset-frontend/spec/javascripts/components/ConfirmStatusChange_spec.jsx @@ -19,6 +19,7 @@ import React from 'react'; import { mount } from 'enzyme'; import Button from 'src/components/Button'; +import { act } from 'react-dom/test-utils'; import { supersetTheme, ThemeProvider } from '@superset-ui/core'; import ConfirmStatusChange from 'src/components/ConfirmStatusChange'; import Modal from 'src/common/components/Modal'; @@ -44,7 +45,9 @@ describe('ConfirmStatusChange', () => { ); it('opens a confirm modal', () => { - wrapper.find('#btn1').first().props().onClick('foo'); + act(() => { + wrapper.find('#btn1').first().props().onClick('foo'); + }); wrapper.update(); @@ -52,7 +55,9 @@ describe('ConfirmStatusChange', () => { }); it('calls the function on confirm', () => { - wrapper.find(Button).last().props().onClick(); + act(() => { + wrapper.find(Button).last().props().onClick(); + }); expect(mockedProps.onConfirm).toHaveBeenCalledWith('foo'); }); diff --git a/superset-frontend/spec/javascripts/components/ListView/ListView_spec.jsx b/superset-frontend/spec/javascripts/components/ListView/ListView_spec.jsx index 41824bfe3f807..866b8a35aca79 100644 --- a/superset-frontend/spec/javascripts/components/ListView/ListView_spec.jsx +++ b/superset-frontend/spec/javascripts/components/ListView/ListView_spec.jsx @@ -150,37 +150,40 @@ describe('ListView', () => { it('calls fetchData on mount', () => { expect(wrapper.find(ListView)).toExist(); - expect(mockedProps.fetchData.mock.calls[0]).toMatchInlineSnapshot(` - Array [ - Object { - "filters": Array [], - "pageIndex": 0, - "pageSize": 1, - "sortBy": Array [], - }, - ] - `); + expect(mockedProps.fetchData.mock.calls[0]).toMatchInlineSnapshot( + ` + Array [ + Object { + "filters": Array [], + "pageIndex": 0, + "pageSize": 1, + "sortBy": Array [], + }, + ] + `, + ); }); it('calls fetchData on sort', () => { wrapper.find('[data-test="sort-header"]').at(1).simulate('click'); - expect(mockedProps.fetchData).toHaveBeenCalled(); - expect(mockedProps.fetchData.mock.calls[0]).toMatchInlineSnapshot(` - Array [ - Object { - "filters": Array [], - "pageIndex": 0, - "pageSize": 1, - "sortBy": Array [ - Object { - "desc": false, - "id": "id", - }, - ], - }, - ] - `); + expect(mockedProps.fetchData.mock.calls[0]).toMatchInlineSnapshot( + ` + Array [ + Object { + "filters": Array [], + "pageIndex": 0, + "pageSize": 1, + "sortBy": Array [ + Object { + "desc": false, + "id": "id", + }, + ], + }, + ] + `, + ); }); it('renders pagination controls', () => { @@ -363,13 +366,14 @@ describe('ListView', () => { ); }); - it('renders and empty state when there is no data', () => { + it('renders and empty state when there is no data', async () => { const props = { ...mockedProps, data: [], }; const wrapper2 = factory(props); + await waitForComponentToPaint(wrapper2); expect(wrapper2.find(Empty)).toExist(); }); @@ -461,7 +465,7 @@ describe('ListView', () => { initialSort: [{ id: 'something' }], }); - act(() => { + await act(async () => { wrapper2.find('[data-test="card-sort-select"]').first().props().onChange({ desc: false, id: 'something', @@ -470,7 +474,6 @@ describe('ListView', () => { }); }); - wrapper2.update(); expect(mockedProps.fetchData).toHaveBeenCalled(); }); }); diff --git a/superset-frontend/spec/javascripts/components/SupersetResourceSelect_spec.tsx b/superset-frontend/spec/javascripts/components/SupersetResourceSelect_spec.tsx index 5fe3cd31b8a9f..60cd4a3dd3dcb 100644 --- a/superset-frontend/spec/javascripts/components/SupersetResourceSelect_spec.tsx +++ b/superset-frontend/spec/javascripts/components/SupersetResourceSelect_spec.tsx @@ -23,10 +23,13 @@ import { Provider } from 'react-redux'; import configureStore from 'redux-mock-store'; import SupersetResourceSelect from 'src/components/SupersetResourceSelect'; import { supersetTheme, ThemeProvider } from '@superset-ui/core'; +import fetchMock from 'fetch-mock'; describe('SupersetResourceSelect', () => { const NOOP = () => {}; + fetchMock.get('glob:*/api/v1/dataset/?q=*', {}); + it('is a valid element', () => { // @ts-ignore expect( diff --git a/superset-frontend/spec/javascripts/dashboard/components/DashboardBuilder_spec.jsx b/superset-frontend/spec/javascripts/dashboard/components/DashboardBuilder_spec.jsx index 2fb9804cf3f97..24f2f4e4e8d90 100644 --- a/superset-frontend/spec/javascripts/dashboard/components/DashboardBuilder_spec.jsx +++ b/superset-frontend/spec/javascripts/dashboard/components/DashboardBuilder_spec.jsx @@ -20,7 +20,7 @@ import { Provider } from 'react-redux'; import React from 'react'; import { shallow, mount } from 'enzyme'; import sinon from 'sinon'; - +import fetchMock from 'fetch-mock'; import { ParentSize } from '@vx/responsive'; import { supersetTheme, ThemeProvider } from '@superset-ui/core'; import { Sticky, StickyContainer } from 'react-sticky'; @@ -44,6 +44,8 @@ import WithDragDropContext from 'spec/helpers/WithDragDropContext'; const dashboardLayout = undoableDashboardLayout.present; const layoutWithTabs = undoableDashboardLayoutWithTabs.present; +fetchMock.get('glob:*/csstemplateasyncmodelview/api/read', {}); + describe('DashboardBuilder', () => { let favStarStub; @@ -67,6 +69,7 @@ describe('DashboardBuilder', () => { colorScheme: undefined, handleComponentDrop() {}, setDirectPathToChild: sinon.spy(), + setMountedTab() {}, }; function setup(overrideProps, useProvider = false, store = mockStore) { diff --git a/superset-frontend/spec/javascripts/dashboard/components/DashboardGrid_spec.jsx b/superset-frontend/spec/javascripts/dashboard/components/DashboardGrid_spec.jsx index 46cc6d88ab532..4fd1704b230ec 100644 --- a/superset-frontend/spec/javascripts/dashboard/components/DashboardGrid_spec.jsx +++ b/superset-frontend/spec/javascripts/dashboard/components/DashboardGrid_spec.jsx @@ -39,6 +39,8 @@ describe('DashboardGrid', () => { handleComponentDrop() {}, resizeComponent() {}, width: 500, + isComponentVisible: true, + setDirectPathToChild() {}, }; function setup(overrideProps) { diff --git a/superset-frontend/spec/javascripts/dashboard/components/gridComponents/Tabs_spec.jsx b/superset-frontend/spec/javascripts/dashboard/components/gridComponents/Tabs_spec.jsx index fcffea0afa4fe..1b693c941b9e7 100644 --- a/superset-frontend/spec/javascripts/dashboard/components/gridComponents/Tabs_spec.jsx +++ b/superset-frontend/spec/javascripts/dashboard/components/gridComponents/Tabs_spec.jsx @@ -22,7 +22,7 @@ import { shallow } from 'enzyme'; import sinon from 'sinon'; import { LineEditableTabs } from 'src/common/components/Tabs'; import { Modal } from 'src/common/components'; - +import fetchMock from 'fetch-mock'; import { styledMount as mount } from 'spec/helpers/theming'; import DashboardComponent from 'src/dashboard/containers/DashboardComponent'; import DeleteComponentButton from 'src/dashboard/components/DeleteComponentButton'; @@ -35,6 +35,8 @@ import { dashboardLayoutWithTabs } from 'spec/fixtures/mockDashboardLayout'; import { mockStoreWithTabs } from 'spec/fixtures/mockStore'; describe('Tabs', () => { + fetchMock.post('glob:*/r/shortner/', {}); + const props = { id: 'TABS_ID', parentId: DASHBOARD_ROOT_ID, diff --git a/superset-frontend/src/components/Menu/LanguagePicker.tsx b/superset-frontend/src/components/Menu/LanguagePicker.tsx index c2af6cef3af62..f125c0aee62c4 100644 --- a/superset-frontend/src/components/Menu/LanguagePicker.tsx +++ b/superset-frontend/src/components/Menu/LanguagePicker.tsx @@ -43,6 +43,7 @@ export default function LanguagePicker({ setDropdownOpen(true)} onMouseLeave={() => setDropdownOpen(false)} + onToggle={value => setDropdownOpen(value)} open={dropdownOpen} id="locale-dropdown" title={