mirror of
https://github.com/apache/superset.git
synced 2026-04-11 12:26:05 +00:00
* Add separate limit setting for SqlLab Use separate param for wrap sql Get query limit from config unit tests for limit control rendering in sql editor py unit test pg tests Add max rows limit Remove concept of infinity, always require defined limits consistency Assert on validation errors instead of tooltip fix unit tests attempt persist state pr comments and linting * load configs in via common param * default to 1k
64 lines
2.4 KiB
JavaScript
64 lines
2.4 KiB
JavaScript
import React from 'react';
|
|
import { shallow } from 'enzyme';
|
|
|
|
import { Label } from 'react-bootstrap';
|
|
import LimitControl from '../../../src/SqlLab/components/LimitControl';
|
|
import ControlHeader from '../../../src/explore/components/ControlHeader';
|
|
|
|
describe('LimitControl', () => {
|
|
const defaultProps = {
|
|
value: 0,
|
|
defaultQueryLimit: 1000,
|
|
maxRow: 100000,
|
|
onChange: () => {},
|
|
};
|
|
let wrapper;
|
|
const factory = o => <LimitControl {...o} />;
|
|
beforeEach(() => {
|
|
wrapper = shallow(factory(defaultProps));
|
|
});
|
|
it('is a valid element', () => {
|
|
expect(React.isValidElement(<LimitControl {...defaultProps} />)).toEqual(true);
|
|
});
|
|
it('renders a Label', () => {
|
|
expect(wrapper.find(Label)).toHaveLength(1);
|
|
});
|
|
it('loads the correct state', () => {
|
|
const value = 100;
|
|
wrapper = shallow(factory({ ...defaultProps, value }));
|
|
expect(wrapper.state().textValue).toEqual(value.toString());
|
|
wrapper.find(Label).first().simulate('click');
|
|
expect(wrapper.state().showOverlay).toBe(true);
|
|
expect(wrapper.find(ControlHeader).props().validationErrors).toHaveLength(0);
|
|
});
|
|
it('handles invalid value', () => {
|
|
wrapper.find(Label).first().simulate('click');
|
|
wrapper.setState({ textValue: 'invalid' });
|
|
expect(wrapper.find(ControlHeader).props().validationErrors).toHaveLength(1);
|
|
});
|
|
it('handles negative value', () => {
|
|
wrapper.find(Label).first().simulate('click');
|
|
wrapper.setState({ textValue: '-1' });
|
|
expect(wrapper.find(ControlHeader).props().validationErrors).toHaveLength(1);
|
|
});
|
|
it('handles value above max row', () => {
|
|
wrapper.find(Label).first().simulate('click');
|
|
wrapper.setState({ textValue: (defaultProps.maxRow + 1).toString() });
|
|
expect(wrapper.find(ControlHeader).props().validationErrors).toHaveLength(1);
|
|
});
|
|
it('opens and closes', () => {
|
|
wrapper.find(Label).first().simulate('click');
|
|
expect(wrapper.state().showOverlay).toBe(true);
|
|
wrapper.find('.ok').first().simulate('click');
|
|
expect(wrapper.state().showOverlay).toBe(false);
|
|
});
|
|
it('resets and closes', () => {
|
|
const value = 100;
|
|
wrapper = shallow(factory({ ...defaultProps, value }));
|
|
wrapper.find(Label).first().simulate('click');
|
|
expect(wrapper.state().textValue).toEqual(value.toString());
|
|
wrapper.find('.reset').simulate('click');
|
|
expect(wrapper.state().textValue).toEqual(defaultProps.defaultQueryLimit.toString());
|
|
});
|
|
});
|