2019-01-15 18:53:27 -05:00
|
|
|
/**
|
|
|
|
* Licensed to the Apache Software Foundation (ASF) under one
|
|
|
|
* or more contributor license agreements. See the NOTICE file
|
|
|
|
* distributed with this work for additional information
|
|
|
|
* regarding copyright ownership. The ASF licenses this file
|
|
|
|
* to you under the Apache License, Version 2.0 (the
|
|
|
|
* "License"); you may not use this file except in compliance
|
|
|
|
* with the License. You may obtain a copy of the License at
|
|
|
|
*
|
|
|
|
* http://www.apache.org/licenses/LICENSE-2.0
|
|
|
|
*
|
|
|
|
* Unless required by applicable law or agreed to in writing,
|
|
|
|
* software distributed under the License is distributed on an
|
|
|
|
* "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
|
|
|
|
* KIND, either express or implied. See the License for the
|
|
|
|
* specific language governing permissions and limitations
|
|
|
|
* under the License.
|
|
|
|
*/
|
2018-09-06 17:55:48 -04:00
|
|
|
// ***********************************************
|
|
|
|
// Tests for setting controls in the UI
|
|
|
|
// ***********************************************
|
2018-11-19 14:29:46 -05:00
|
|
|
import { FORM_DATA_DEFAULTS, NUM_METRIC } from './visualizations/shared.helper';
|
2018-09-06 17:55:48 -04:00
|
|
|
|
2020-07-10 15:46:25 -04:00
|
|
|
describe('Datasource control', () => {
|
|
|
|
const newMetricName = `abc${Date.now()}`;
|
|
|
|
|
|
|
|
before(() => {
|
2018-09-06 17:55:48 -04:00
|
|
|
cy.server();
|
|
|
|
cy.login();
|
2020-07-10 15:46:25 -04:00
|
|
|
cy.route('GET', '/superset/explore_json/**').as('getJson');
|
|
|
|
cy.route('POST', '/superset/explore_json/**').as('postJson');
|
|
|
|
});
|
2018-09-06 17:55:48 -04:00
|
|
|
|
2020-07-10 15:46:25 -04:00
|
|
|
it('should allow edit datasource', () => {
|
|
|
|
cy.visitChartByName('Num Births Trend');
|
|
|
|
cy.verifySliceSuccess({ waitAlias: '@postJson' });
|
|
|
|
cy.get('#datasource_menu').click();
|
|
|
|
cy.get('a').contains('Edit Datasource').click();
|
|
|
|
// create new metric
|
|
|
|
cy.get('button').contains('Add Item').click();
|
|
|
|
cy.get('input[value="<new metric>"]').click();
|
|
|
|
cy.get('input[value="<new metric>"]')
|
|
|
|
.focus()
|
|
|
|
.clear()
|
|
|
|
.type(`${newMetricName}{enter}`);
|
|
|
|
cy.get('.modal-footer button').contains('Save').click();
|
|
|
|
cy.get('.modal-footer button').contains('OK').click();
|
|
|
|
// select new metric
|
2020-07-29 21:49:32 -04:00
|
|
|
cy.get('[data-test=metrics]')
|
|
|
|
.find('.Select__control input')
|
2020-07-10 15:46:25 -04:00
|
|
|
.focus()
|
2020-07-29 21:49:32 -04:00
|
|
|
.type(newMetricName, { force: true });
|
2020-07-10 15:46:25 -04:00
|
|
|
// delete metric
|
|
|
|
cy.get('#datasource_menu').click();
|
|
|
|
cy.get('a').contains('Edit Datasource').click();
|
|
|
|
cy.get(`input[value="${newMetricName}"]`)
|
|
|
|
.closest('tr')
|
2020-08-04 14:52:35 -04:00
|
|
|
.find('.fa-trash')
|
2020-07-10 15:46:25 -04:00
|
|
|
.click();
|
|
|
|
cy.get('.modal-footer button').contains('Save').click();
|
|
|
|
cy.get('.modal-footer button').contains('OK').click();
|
|
|
|
cy.get('.Select__multi-value__label')
|
|
|
|
.contains(newMetricName)
|
|
|
|
.should('not.exist');
|
|
|
|
});
|
|
|
|
});
|
|
|
|
|
|
|
|
describe('Groupby control', () => {
|
|
|
|
it('Set groupby', () => {
|
|
|
|
cy.server();
|
|
|
|
cy.login();
|
2019-04-03 15:11:08 -04:00
|
|
|
cy.route('GET', '/superset/explore_json/**').as('getJson');
|
|
|
|
cy.route('POST', '/superset/explore_json/**').as('postJson');
|
2018-09-06 17:55:48 -04:00
|
|
|
cy.visitChartByName('Num Births Trend');
|
Fix control validation handling (#7231)
Fixes a series of unexpected things around control validation.
* when a chart opens in a state where a control is invalid, it still
runs the query, and sometimes gets stuck in what appears to be a 'running'
state. After this change, no query is run, and a warning is displayed
in the chart panel body, just like any other error would
* validation used to be done in the <Control> component and alter the
redux store as it went. Clearly this is not the right approach, now
validation occurs on loading the initial redux state, as well as in
the reducer when controls are changed
* currently, when going from a invalid control state to a valid one
(user addresses what is needed), it auto-triggers a query which can be
unexpected. After this change, the error message disappears, and the
"Run Query" overlay gets displayed
* when changing viz type, it's common to get new validation
errors, and currently when that occurs it will still go ahead and run
a query with invalid inputs, which often results in errors
that are not well handled, since much of the logic
assumes control-validated input.
* prettier control validation messages
(cherry picked from commit a3212eba5df95bca834d8d6d98c11d522d9172f3)
2019-04-18 14:36:38 -04:00
|
|
|
cy.verifySliceSuccess({ waitAlias: '@postJson' });
|
2018-09-06 17:55:48 -04:00
|
|
|
|
|
|
|
cy.get('[data-test=groupby]').within(() => {
|
2020-05-19 19:59:49 -04:00
|
|
|
cy.get('.Select__control').click();
|
|
|
|
cy.get('input[type=text]').type('state{enter}');
|
2018-09-06 17:55:48 -04:00
|
|
|
});
|
|
|
|
cy.get('button.query').click();
|
2019-04-03 15:11:08 -04:00
|
|
|
cy.verifySliceSuccess({ waitAlias: '@postJson', chartSelector: 'svg' });
|
2018-09-06 17:55:48 -04:00
|
|
|
});
|
|
|
|
});
|
|
|
|
|
2018-11-19 14:29:46 -05:00
|
|
|
describe('Time range filter', () => {
|
|
|
|
beforeEach(() => {
|
|
|
|
cy.login();
|
|
|
|
cy.server();
|
2019-04-03 15:11:08 -04:00
|
|
|
cy.route('GET', '/superset/explore_json/**').as('getJson');
|
|
|
|
cy.route('POST', '/superset/explore_json/**').as('postJson');
|
2018-11-19 14:29:46 -05:00
|
|
|
});
|
|
|
|
|
|
|
|
it('Defaults to the correct tab for time_range params', () => {
|
|
|
|
const formData = {
|
|
|
|
...FORM_DATA_DEFAULTS,
|
|
|
|
metrics: [NUM_METRIC],
|
|
|
|
viz_type: 'line',
|
|
|
|
time_range: '100 years ago : now',
|
|
|
|
};
|
|
|
|
|
|
|
|
cy.visitChartByParams(JSON.stringify(formData));
|
2019-04-03 15:11:08 -04:00
|
|
|
cy.verifySliceSuccess({ waitAlias: '@postJson' });
|
2018-11-19 14:29:46 -05:00
|
|
|
|
|
|
|
cy.get('[data-test=time_range]').within(() => {
|
|
|
|
cy.get('span.label').click();
|
|
|
|
});
|
|
|
|
|
|
|
|
cy.get('#filter-popover').within(() => {
|
|
|
|
cy.get('div.tab-pane.active').within(() => {
|
|
|
|
cy.get('div.PopoverSection :not(.dimmed)').within(() => {
|
|
|
|
cy.get('input[value="100 years ago"]');
|
|
|
|
cy.get('input[value="now"]');
|
|
|
|
});
|
|
|
|
});
|
|
|
|
});
|
2020-07-10 15:46:25 -04:00
|
|
|
cy.get('#filter-popover button').contains('Ok').click();
|
|
|
|
cy.get('#filter-popover').should('not.exist');
|
2018-11-19 14:29:46 -05:00
|
|
|
});
|
|
|
|
});
|