[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:
Chris Williams
2018-10-19 11:41:42 -07:00
committed by GitHub
parent 96228adda9
commit a71e6eb0a3
16 changed files with 307 additions and 154 deletions

View File

@@ -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();
});
});
});