Skip to content

Commit

Permalink
[sqllab] some frontend tests (#1400)
Browse files Browse the repository at this point in the history
* [sqllab] some frontend tests

* linting

* Addressing comments

* Addressing unaddressed comments

* Touchups
  • Loading branch information
mistercrunch committed Oct 25, 2016
1 parent 7c59337 commit 940659b
Show file tree
Hide file tree
Showing 44 changed files with 875 additions and 558 deletions.
1 change: 1 addition & 0 deletions .gitignore
@@ -1,4 +1,5 @@
*.pyc
caravel/assets/coverage/*
changelog.sh
.DS_Store
.coverage
Expand Down
1 change: 0 additions & 1 deletion caravel/assets/.eslintignore
Expand Up @@ -5,6 +5,5 @@ dist/*
images/*
node_modules/*
node_modules*/*
spec/*
stylesheets/*
vendor/*
16 changes: 5 additions & 11 deletions caravel/assets/javascripts/SqlLab/actions.js
Expand Up @@ -18,8 +18,6 @@ export const QUERY_EDITOR_SET_TITLE = 'QUERY_EDITOR_SET_TITLE';
export const QUERY_EDITOR_SET_AUTORUN = 'QUERY_EDITOR_SET_AUTORUN';
export const QUERY_EDITOR_SET_SQL = 'QUERY_EDITOR_SET_SQL';
export const SET_DATABASES = 'SET_DATABASES';
export const ADD_WORKSPACE_QUERY = 'ADD_WORKSPACE_QUERY';
export const REMOVE_WORKSPACE_QUERY = 'REMOVE_WORKSPACE_QUERY';
export const SET_ACTIVE_QUERY_EDITOR = 'SET_ACTIVE_QUERY_EDITOR';
export const ADD_ALERT = 'ADD_ALERT';
export const REMOVE_ALERT = 'REMOVE_ALERT';
Expand Down Expand Up @@ -141,7 +139,8 @@ export function setDatabases(databases) {
}

export function addQueryEditor(queryEditor) {
return { type: ADD_QUERY_EDITOR, queryEditor };
const newQe = Object.assign({}, queryEditor, { id: shortid.generate() });
return { type: ADD_QUERY_EDITOR, queryEditor: newQe };
}

export function cloneQueryToNewTab(query) {
Expand All @@ -153,7 +152,9 @@ export function setNetworkStatus(networkOn) {
}

export function addAlert(alert) {
return { type: ADD_ALERT, alert };
const o = Object.assign({}, alert);
o.id = shortid.generate();
return { type: ADD_ALERT, o };
}

export function removeAlert(alert) {
Expand Down Expand Up @@ -208,13 +209,6 @@ export function removeTable(table) {
return { type: REMOVE_TABLE, table };
}

export function addWorkspaceQuery(query) {
return { type: ADD_WORKSPACE_QUERY, query };
}

export function removeWorkspaceQuery(query) {
return { type: REMOVE_WORKSPACE_QUERY, query };
}
export function refreshQueries(alteredQueries) {
return { type: REFRESH_QUERIES, alteredQueries };
}
11 changes: 2 additions & 9 deletions caravel/assets/javascripts/SqlLab/components/Alerts.jsx
@@ -1,8 +1,5 @@
import React from 'react';
import { Alert } from 'react-bootstrap';
import { connect } from 'react-redux';
import { bindActionCreators } from 'redux';
import * as Actions from '../actions';

class Alerts extends React.Component {
removeAlert(alert) {
Expand All @@ -11,6 +8,7 @@ class Alerts extends React.Component {
render() {
const alerts = this.props.alerts.map((alert) =>
<Alert
key={alert.id}
bsStyle={alert.bsStyle}
style={{ width: '500px', textAlign: 'midddle', margin: '10px auto' }}
>
Expand All @@ -33,9 +31,4 @@ Alerts.propTypes = {
actions: React.PropTypes.object,
};

function mapDispatchToProps(dispatch) {
return {
actions: bindActionCreators(Actions, dispatch),
};
}
export default connect(null, mapDispatchToProps)(Alerts);
export default Alerts;
4 changes: 3 additions & 1 deletion caravel/assets/javascripts/SqlLab/components/App.jsx
Expand Up @@ -48,7 +48,7 @@ class App extends React.Component {
}
return (
<div className="App SqlLab">
<Alerts alerts={this.props.alerts} />
<Alerts alerts={this.props.alerts} actions={this.props.actions} />
<DataPreviewModal />
<div className="container-fluid">
{content}
Expand All @@ -60,6 +60,7 @@ class App extends React.Component {

App.propTypes = {
alerts: React.PropTypes.array,
actions: React.PropTypes.object,
};

function mapStateToProps(state) {
Expand All @@ -73,4 +74,5 @@ function mapDispatchToProps(dispatch) {
};
}

export { App };
export default connect(mapStateToProps, mapDispatchToProps)(App);
48 changes: 0 additions & 48 deletions caravel/assets/javascripts/SqlLab/components/ButtonWithTooltip.jsx

This file was deleted.

Expand Up @@ -3,11 +3,11 @@ import CopyToClipboard from '../../components/CopyToClipboard';
import { getShortUrl } from '../../../utils/common';

const propTypes = {
qe: React.PropTypes.object,
queryEditor: React.PropTypes.object,
};

const defaultProps = {
qe: null,
queryEditor: null,
};

export default class CopyQueryTabUrl extends React.Component {
Expand All @@ -20,7 +20,7 @@ export default class CopyQueryTabUrl extends React.Component {

componentWillMount() {
const params = [];
const qe = this.props.qe;
const qe = this.props.queryEditor;
if (qe.dbId) params.push('dbid=' + qe.dbId);
if (qe.title) params.push('title=' + encodeURIComponent(qe.title));
if (qe.schema) params.push('schema=' + encodeURIComponent(qe.schema));
Expand Down
Expand Up @@ -32,7 +32,7 @@ class DataPreviewModal extends React.Component {
</Modal.Title>
</Modal.Header>
<Modal.Body>
<ResultSet query={query} visualize={false} csv={false} />
<ResultSet query={query} visualize={false} csv={false} actions={this.props.actions} />
</Modal.Body>
</Modal>
);
Expand Down
16 changes: 1 addition & 15 deletions caravel/assets/javascripts/SqlLab/components/DatabaseSelect.jsx
@@ -1,9 +1,6 @@
const $ = window.$ = require('jquery');
import React from 'react';
import { bindActionCreators } from 'redux';
import Select from 'react-select';
import { connect } from 'react-redux';
import * as Actions from '../actions';

class DatabaseSelect extends React.Component {
constructor(props) {
Expand Down Expand Up @@ -53,15 +50,4 @@ DatabaseSelect.propTypes = {
valueRenderer: React.PropTypes.func,
};

DatabaseSelect.defaultProps = {
onChange: () => {},
databaseId: null,
};

function mapDispatchToProps(dispatch) {
return {
actions: bindActionCreators(Actions, dispatch),
};
}

export default connect(null, mapDispatchToProps)(DatabaseSelect);
export default DatabaseSelect;
36 changes: 20 additions & 16 deletions caravel/assets/javascripts/SqlLab/components/Link.jsx
@@ -1,6 +1,24 @@
import React from 'react';
import { OverlayTrigger, Tooltip } from 'react-bootstrap';

const propTypes = {
children: React.PropTypes.node,
className: React.PropTypes.string,
href: React.PropTypes.string,
onClick: React.PropTypes.func,
placement: React.PropTypes.string,
style: React.PropTypes.object,
tooltip: React.PropTypes.string,
};
const defaultProps = {
className: '',
href: '#',
onClick: () => {},
placement: 'top',
style: {},
tooltip: null,
};


class Link extends React.Component {
render() {
Expand Down Expand Up @@ -34,21 +52,7 @@ class Link extends React.Component {
return link;
}
}
Link.propTypes = {
children: React.PropTypes.object,
className: React.PropTypes.string,
href: React.PropTypes.string,
onClick: React.PropTypes.func,
placement: React.PropTypes.string,
style: React.PropTypes.object,
tooltip: React.PropTypes.string,
};
Link.defaultProps = {
disabled: false,
href: '#',
tooltip: null,
placement: 'top',
onClick: () => {},
};
Link.propTypes = propTypes;
Link.defaultProps = defaultProps;

export default Link;
Expand Up @@ -30,14 +30,10 @@ class QueryAutoRefresh extends React.Component {
if (Object.keys(data).length > 0) {
this.props.actions.refreshQueries(data);
}
if (!this.props.networkOn) {
this.props.actions.setNetworkStatus(true);
}
this.props.actions.setNetworkStatus(true);
})
.fail(() => {
if (this.props.networkOn) {
this.props.actions.setNetworkStatus(false);
}
this.props.actions.setNetworkStatus(false);
});
}
render() {
Expand All @@ -47,7 +43,6 @@ class QueryAutoRefresh extends React.Component {
QueryAutoRefresh.propTypes = {
actions: React.PropTypes.object,
queriesLastUpdate: React.PropTypes.number,
networkOn: React.PropTypes.bool,
};
QueryAutoRefresh.defaultProps = {
// queries: null,
Expand All @@ -56,7 +51,6 @@ QueryAutoRefresh.defaultProps = {
function mapStateToProps(state) {
return {
queriesLastUpdate: state.queriesLastUpdate,
networkOn: state.networkOn,
};
}

Expand Down
46 changes: 10 additions & 36 deletions caravel/assets/javascripts/SqlLab/components/QueryHistory.jsx
@@ -1,28 +1,23 @@
import React from 'react';

import { connect } from 'react-redux';
import { bindActionCreators } from 'redux';
import * as Actions from '../actions';

import QueryTable from './QueryTable';
import { Alert } from 'react-bootstrap';

const propTypes = {
queries: React.PropTypes.array.isRequired,
actions: React.PropTypes.object.isRequired,
};

const QueryHistory = (props) => {
const activeQeId = props.tabHistory[props.tabHistory.length - 1];
const queriesArray = [];
for (const id in props.queries) {
if (props.queries[id].sqlEditorId === activeQeId) {
queriesArray.push(props.queries[id]);
}
}
if (queriesArray.length > 0) {
if (props.queries.length > 0) {
return (
<QueryTable
columns={[
'state', 'started', 'duration', 'progress',
'rows', 'sql', 'output', 'actions',
]}
queries={queriesArray}
queries={props.queries}
actions={props.actions}
/>
);
}
Expand All @@ -32,27 +27,6 @@ const QueryHistory = (props) => {
</Alert>
);
};
QueryHistory.propTypes = propTypes;

QueryHistory.defaultProps = {
queries: {},
};

QueryHistory.propTypes = {
queries: React.PropTypes.object,
tabHistory: React.PropTypes.array,
actions: React.PropTypes.object,
};

function mapStateToProps(state) {
return {
queries: state.queries,
tabHistory: state.tabHistory,
};
}
function mapDispatchToProps(dispatch) {
return {
actions: bindActionCreators(Actions, dispatch),
};
}

export default connect(mapStateToProps, mapDispatchToProps)(QueryHistory);
export default QueryHistory;

0 comments on commit 940659b

Please sign in to comment.