import React from 'react';
import expect, { createSpy, restoreSpies } from 'expect';
import { mount } from 'enzyme';
import { noop } from 'lodash';
import { createAceSpy, fillInFormInput } from 'test/helpers';
import QueryComposer from './index';
describe('QueryComposer - component', () => {
beforeEach(() => {
createAceSpy();
});
afterEach(restoreSpies);
it('does not render the SaveQueryForm by default', () => {
const component = mount(
);
expect(component.find('SaveQueryForm').length).toEqual(0);
});
it('renders the QueryForm when the query prop is present', () => {
const query = {
id: 1,
query: 'SELECT * FROM users',
name: 'Get all users',
description: 'This gets all of the users',
};
const component = mount(
);
const form = component.find('QueryForm');
expect(component.text()).toInclude('New Query');
expect(form.length).toEqual(1);
expect(form.find('InputField').length).toEqual(2);
});
it('calls onSaveQueryFormSubmit with appropriate data when "Save as New" is clicked', () => {
const onSaveQueryFormSubmitSpy = createSpy();
const queryText = 'SELECT * FROM users';
const selectedTargets = [{ name: 'my target' }];
const component = mount(
);
const form = component.find('QueryForm');
fillInFormInput(form.find({ name: 'name' }), 'My query name');
fillInFormInput(form.find({ name: 'description' }), 'My query description');
form.find('.query-form__save-as-new-btn').simulate('click');
expect(onSaveQueryFormSubmitSpy).toHaveBeenCalledWith({
description: 'My query description',
name: 'My query name',
query: queryText,
});
});
it('calls onRunQuery when "Run Query" is clicked', () => {
const onRunQuerySpy = createSpy();
const query = 'SELECT * FROM users';
const selectedTargets = [{ name: 'my target' }];
const component = mount(
);
component.find('.query-form__run-query-btn').simulate('click');
expect(onRunQuerySpy).toHaveBeenCalled();
});
it('calls onSaveChanges when "Save Changes" is clicked', () => {
const onSaveChangesSpy = createSpy();
const query = {
name: 'my query',
description: 'my description',
query: 'SELECT * FROM users',
};
const component = mount(
);
const form = component.find('QueryForm');
fillInFormInput(form.find({ name: 'name' }), 'My new query name');
form.find('.query-form__save-changes-btn').simulate('click');
expect(onSaveChangesSpy).toHaveBeenCalledWith({
description: query.description,
name: 'My new query name',
query: query.query,
});
});
});