mirror of
https://github.com/apache/superset.git
synced 2026-04-19 16:14:52 +00:00
[superset-client] replace misc ajax calls (#6135)
* [superset-client][misc] replace ajax calls in DashboardTable, TableLoader, utils, common * [superset-client][misc] replace ajax calls in AsyncSelect, HeaderActions, Deck.gl * [superset-client][misc] fix tests * [superset-client] remove unneeded functional setState calls * [superset-client] make welcome a redux app for toasts * [superset-client] make Profile a redux app for toasts * [superset-client] TableLoader don't pass toast props to dom nodes * tweak deckgl Multi syntax
This commit is contained in:
@@ -1,30 +1,47 @@
|
||||
import React from 'react';
|
||||
import { mount } from 'enzyme';
|
||||
import sinon from 'sinon';
|
||||
import thunk from 'redux-thunk';
|
||||
import configureStore from 'redux-mock-store';
|
||||
import fetchMock from 'fetch-mock';
|
||||
import { Table } from 'reactable';
|
||||
|
||||
import DashboardTable from '../../../src/welcome/DashboardTable';
|
||||
import Loading from '../../../src/components/Loading';
|
||||
|
||||
const $ = window.$ = require('jquery');
|
||||
// store needed for withToasts(TableLoader)
|
||||
const mockStore = configureStore([thunk]);
|
||||
const store = mockStore({});
|
||||
|
||||
const dashboardsEndpoint = 'glob:*/dashboardasync/api/read*';
|
||||
const mockDashboards = [
|
||||
{ id: 1, url: 'url', dashboard_title: 'title' },
|
||||
];
|
||||
|
||||
fetchMock.get(dashboardsEndpoint, { result: mockDashboards });
|
||||
|
||||
function setup() {
|
||||
// use mount because data fetching is triggered on mount
|
||||
return mount(<DashboardTable />, { context: { store } });
|
||||
}
|
||||
|
||||
describe('DashboardTable', () => {
|
||||
const mockedProps = {};
|
||||
let stub;
|
||||
beforeEach(() => {
|
||||
stub = sinon.stub($, 'getJSON');
|
||||
});
|
||||
afterEach(() => {
|
||||
stub.restore();
|
||||
afterEach(fetchMock.resetHistory);
|
||||
|
||||
it('renders a Loading initially', () => {
|
||||
const wrapper = setup();
|
||||
expect(wrapper.find(Loading)).toHaveLength(1);
|
||||
});
|
||||
|
||||
it('is valid', () => {
|
||||
expect(
|
||||
React.isValidElement(<DashboardTable {...mockedProps} />),
|
||||
).toBe(true);
|
||||
});
|
||||
it('renders', () => {
|
||||
const wrapper = mount(<DashboardTable {...mockedProps} />);
|
||||
expect(stub.callCount).toBe(1);
|
||||
expect(wrapper.find('img')).toHaveLength(1);
|
||||
it('fetches dashboards and renders a Table', (done) => {
|
||||
const wrapper = setup();
|
||||
|
||||
setTimeout(() => {
|
||||
expect(fetchMock.calls(dashboardsEndpoint)).toHaveLength(1);
|
||||
// there's a delay between response and updating state, so manually set it
|
||||
// rather than adding a timeout which could introduce flakiness
|
||||
wrapper.setState({ dashaboards: mockDashboards });
|
||||
expect(wrapper.find(Table)).toHaveLength(1);
|
||||
done();
|
||||
});
|
||||
});
|
||||
});
|
||||
|
||||
Reference in New Issue
Block a user