[WiP] Deprecate Explore v1 (#2064)

* Simplifying the viz interface (#2005)

* Working on dashes

* Making this a collaborative branch

* Fixing some bugs

* Fixing bugs

* More improvements

* Add datasource back in bootstrap data

* Decent state

* Linting

* Moving forward

* Some more linting

* Fix the timer

* Triggering events through state

* Lingint

* Put filters in an array instead of flt strings (#2090)

* Put filters in an array instead of flt strings

* Remove query_filter(), put opChoices into Filter

* Update version_info.json

* Fix migrations

* More renderTrigger=true

* Fixing bugs

* Working on standalone

* getting standalone to work

* Fixed forcedHeight for standalone =view

* Linting

* Get save slice working in v2 (#2106)

* Filter bugfix

* Fixing empty series limit bug

* Fixed dashboard view

* Fixing short urls

* Only allow owners to overwrite slice (#2142)

* Raise exception when date range is wrong

* Only allow owner to overwrite a slice

* Fix tests for deprecate v1 (#2140)

* Fixed tests for control panels container and filters

* Fixed python tests for explorev2

* Fix linting errors

* Add in stop button during slice querying/rendering (#2121)

* Add in stop button during slice querying/rendering

* Abort ajax request on stop

* Adding missing legacy module

* Removing select2.sortable.js because of license

* Allow query to display while slice is loading (#2100)

* Allow query to display while slice is loading

* Put latestQueryFormData in store

* Reorganized query function, got rid of tu[le return values

* Merging migrations

* Wrapping up shortner migration

* Fixing tests

* Add folder creation to syncBackend

* Fixing edit URL in explore view

* Fix look of Stop button

* Adding syntax highlighting to query modal

* Fix cast_form_data and flase checkbox on dash

* Bugfix

* Going deeper

* Fix filtering

* Deleing invalid filters when changing datasource

* Minor adjustments

* Fixing calendar heatmap examples

* Moving edit datasource button to header's right side

* Fixing mapbox example

* Show stack trace when clicking alert

* Adding npm sync-backend command to build instruction

* Bumping up JS dependencies

* rm dep on select2

* Fix py3 urlparse

* rm superset-select2.js

* Improving migration scripts

* Bugfixes on staging

* Fixing Markup viz
This commit is contained in:
Maxime Beauchemin
2017-02-16 17:28:35 -08:00
committed by GitHub
parent 3b023e5eaa
commit 0cc8eff1c3
82 changed files with 4018 additions and 3867 deletions

View File

@@ -3,24 +3,19 @@ import { expect } from 'chai';
import { describe, it, beforeEach } from 'mocha';
import { shallow } from 'enzyme';
import { Panel } from 'react-bootstrap';
import { defaultFormData, initialState } from '../../../../javascripts/explorev2/stores/store';
import { getFormDataFromFields, defaultFields }
from '../../../../javascripts/explorev2/stores/store';
import {
ControlPanelsContainer,
} from '../../../../javascripts/explorev2/components/ControlPanelsContainer';
import { fields } from '../../../../javascripts/explorev2/stores/fields';
const defaultProps = {
datasource_id: 1,
datasource_type: 'type',
exploreState: initialState(),
form_data: defaultFormData(),
fields,
actions: {
fetchFieldOptions: () => {
// noop
},
},
datasource_type: 'table',
actions: {},
fields: defaultFields,
form_data: getFormDataFromFields(defaultFields),
isDatasourceMetaLoading: false,
exploreState: {},
};
describe('ControlPanelsContainer', () => {

View File

@@ -0,0 +1,17 @@
import React from 'react';
import { expect } from 'chai';
import { describe, it } from 'mocha';
import DisplayQueryButton from '../../../../javascripts/explorev2/components/DisplayQueryButton';
describe('DisplayQueryButton', () => {
const defaultProps = {
slice: {
viewSqlQuery: 'sql query string',
},
};
it('renders', () => {
expect(React.isValidElement(<DisplayQueryButton {...defaultProps} />)).to.equal(true);
});
});

View File

@@ -0,0 +1,47 @@
import React from 'react';
import { expect } from 'chai';
import { describe, it } from 'mocha';
import { shallow, mount } from 'enzyme';
import { OverlayTrigger } from 'react-bootstrap';
import EmbedCodeButton from '../../../../javascripts/explorev2/components/EmbedCodeButton';
describe('EmbedCodeButton', () => {
const defaultProps = {
slice: {
data: {
standalone_endpoint: 'endpoint_url',
},
},
};
it('renders', () => {
expect(React.isValidElement(<EmbedCodeButton {...defaultProps} />)).to.equal(true);
});
it('renders overlay trigger', () => {
const wrapper = shallow(<EmbedCodeButton {...defaultProps} />);
expect(wrapper.find(OverlayTrigger)).to.have.length(1);
});
it('returns correct embed code', () => {
const wrapper = mount(<EmbedCodeButton {...defaultProps} />);
wrapper.setState({
height: '1000',
width: '2000',
srcLink: 'http://localhost/endpoint_url',
});
const embedHTML = (
'<iframe\n' +
' width="2000"\n' +
' height="1000"\n' +
' seamless\n' +
' frameBorder="0"\n' +
' scrolling="no"\n' +
' src="nullendpoint_url&height=1000"\n' +
'>\n' +
'</iframe>'
);
expect(wrapper.instance().generateEmbedHTML()).to.equal(embedHTML);
});
});

View File

@@ -0,0 +1,29 @@
import React from 'react';
import { expect } from 'chai';
import { describe, it } from 'mocha';
import { shallow } from 'enzyme';
import ExploreActionButtons from
'../../../../javascripts/explorev2/components/ExploreActionButtons';
describe('ExploreActionButtons', () => {
const defaultProps = {
canDownload: 'True',
slice: {
data: {
csv_endpoint: '',
json_endpoint: '',
},
},
};
it('renders', () => {
expect(
React.isValidElement(<ExploreActionButtons {...defaultProps} />)
).to.equal(true);
});
it('should render 5 children/buttons', () => {
const wrapper = shallow(<ExploreActionButtons {...defaultProps} />);
expect(wrapper.children()).to.have.length(5);
});
});

View File

@@ -7,6 +7,7 @@ import { expect } from 'chai';
import { describe, it, beforeEach } from 'mocha';
import { shallow } from 'enzyme';
import Filter from '../../../../javascripts/explorev2/components/Filter';
import SelectField from '../../../../javascripts/explorev2/components/SelectField';
const defaultProps = {
choices: ['country_name'],
@@ -16,8 +17,6 @@ const defaultProps = {
// noop
},
filter: {
id: 1,
prefix: 'flt',
col: null,
op: 'in',
value: '',
@@ -45,7 +44,7 @@ describe('Filter', () => {
it('renders two selects, one button and one input', () => {
expect(wrapper.find(Select)).to.have.lengthOf(2);
expect(wrapper.find(Button)).to.have.lengthOf(1);
expect(wrapper.find('input')).to.have.lengthOf(1);
expect(wrapper.find(SelectField)).to.have.lengthOf(1);
});
it('calls changeFilter when select is changed', () => {
@@ -53,8 +52,8 @@ describe('Filter', () => {
selectCol.simulate('change', { value: 'col' });
const selectOp = wrapper.find('#select-op');
selectOp.simulate('change', { value: 'in' });
const input = wrapper.find('input');
input.simulate('change', { target: { value: 'x' } });
const selectVal = wrapper.find(SelectField);
selectVal.simulate('change', { value: 'x' });
expect(defaultProps.changeFilter).to.have.property('callCount', 3);
});
});

View File

@@ -0,0 +1,44 @@
import React from 'react';
import { beforeEach, describe, it } from 'mocha';
import { expect } from 'chai';
import { shallow } from 'enzyme';
import sinon from 'sinon';
import QueryAndSaveButtons from '../../../../javascripts/explorev2/components/QueryAndSaveBtns';
import Button from '../../../../javascripts/components/Button';
describe('QueryAndSaveButtons', () => {
const defaultProps = {
canAdd: 'True',
onQuery: sinon.spy(),
};
// It must render
it('renders', () => {
expect(React.isValidElement(<QueryAndSaveButtons {...defaultProps} />)).to.equal(true);
});
// Test the output
describe('output', () => {
let wrapper;
beforeEach(() => {
wrapper = shallow(<QueryAndSaveButtons {...defaultProps} />);
});
it('renders 2 buttons', () => {
expect(wrapper.find(Button)).to.have.lengthOf(2);
});
it('renders buttons with correct text', () => {
expect(wrapper.find(Button).contains(' Query')).to.eql(true);
expect(wrapper.find(Button).contains(' Save as')).to.eql(true);
});
it('calls onQuery when query button is clicked', () => {
const queryButton = wrapper.find('.query');
queryButton.simulate('click');
expect(defaultProps.onQuery.called).to.eql(true);
});
});
});

View File

@@ -14,10 +14,8 @@ const defaultProps = {
saveSlice: sinon.spy(),
},
form_data: defaultFormData,
datasource_id: 1,
datasource_name: 'birth_names',
datasource_type: 'table',
user_id: 1,
slice: {},
};
describe('SaveModal', () => {

View File

@@ -0,0 +1,17 @@
import React from 'react';
import { expect } from 'chai';
import { describe, it } from 'mocha';
import URLShortLinkButton from '../../../../javascripts/explorev2/components/URLShortLinkButton';
describe('URLShortLinkButton', () => {
const defaultProps = {
slice: {
querystring: () => 'query string',
},
};
it('renders', () => {
expect(React.isValidElement(<URLShortLinkButton {...defaultProps} />)).to.equal(true);
});
});