mirror of
https://github.com/elastic/kibana.git
synced 2025-04-24 01:38:56 -04:00
Fix possible flakiness of saveVisualization action (#22356)
* Updated saveVisualization to wait for toast instead of global indicator * Fix RBAC tests. The saveVisualization now fails directly if the visualization is not correctly saved. * Change editor to use toast for errors * Change saveVisualization method to new saveVisualizationExpectSuccess For RBAC tests used also saveVisualizationExpectFail * Fix wrong exists method call * Fix missing exist function
This commit is contained in:
parent
de846117f9
commit
853d321ea2
20 changed files with 50 additions and 38 deletions
|
@ -26,7 +26,7 @@ import 'ui/collapsible_sidebar';
|
|||
import 'ui/query_bar';
|
||||
import chrome from 'ui/chrome';
|
||||
import angular from 'angular';
|
||||
import { Notifier, toastNotifications } from 'ui/notify';
|
||||
import { toastNotifications } from 'ui/notify';
|
||||
import { VisTypesRegistryProvider } from 'ui/registry/vis_types';
|
||||
import { DocTitleProvider } from 'ui/doc_title';
|
||||
import { FilterBarQueryFilterProvider } from 'ui/filter_bar/query_filter';
|
||||
|
@ -118,10 +118,6 @@ function VisEditor(
|
|||
const queryFilter = Private(FilterBarQueryFilterProvider);
|
||||
const getUnhashableStates = Private(getUnhashableStatesProvider);
|
||||
|
||||
const notify = new Notifier({
|
||||
location: 'Visualization Editor'
|
||||
});
|
||||
|
||||
// Retrieve the resolved SavedVis instance.
|
||||
const savedVis = $route.current.locals.savedVis;
|
||||
// vis is instance of src/ui/public/vis/vis.js.
|
||||
|
@ -387,7 +383,13 @@ function VisEditor(
|
|||
kbnUrl.change(`${VisualizeConstants.EDIT_PATH}/{{id}}`, { id: savedVis.id });
|
||||
}
|
||||
}
|
||||
}, notify.error);
|
||||
}, (err) => {
|
||||
toastNotifications.addDanger({
|
||||
title: `Error on saving '${savedVis.title}'`,
|
||||
text: err.message,
|
||||
'data-test-subj': 'saveVisualizationError',
|
||||
});
|
||||
});
|
||||
};
|
||||
|
||||
$scope.unlink = function () {
|
||||
|
|
|
@ -42,7 +42,7 @@ export default function ({ getService, getPageObjects }) {
|
|||
await dashboardAddPanel.clickAddNewEmbeddableLink();
|
||||
await PageObjects.visualize.clickAreaChart();
|
||||
await PageObjects.visualize.clickNewSearch();
|
||||
await PageObjects.visualize.saveVisualization('visualization from add new link');
|
||||
await PageObjects.visualize.saveVisualizationExpectSuccess('visualization from add new link');
|
||||
|
||||
return retry.try(async () => {
|
||||
const panelCount = await PageObjects.dashboard.getPanelCount();
|
||||
|
|
|
@ -245,7 +245,7 @@ export default function ({ getService, getPageObjects }) {
|
|||
await renderable.waitForRender();
|
||||
await dashboardExpect.pieSliceCount(3);
|
||||
|
||||
await PageObjects.visualize.saveVisualization('Rendering Test: animal sounds pie');
|
||||
await PageObjects.visualize.saveVisualizationExpectSuccess('Rendering Test: animal sounds pie');
|
||||
await PageObjects.header.clickDashboard();
|
||||
await PageObjects.header.waitUntilLoadingHasFinished();
|
||||
await PageObjects.dashboard.waitForRenderComplete();
|
||||
|
@ -260,7 +260,7 @@ export default function ({ getService, getPageObjects }) {
|
|||
await PageObjects.header.waitUntilLoadingHasFinished();
|
||||
await dashboardExpect.pieSliceCount(1);
|
||||
|
||||
await PageObjects.visualize.saveVisualization('animal sounds pie');
|
||||
await PageObjects.visualize.saveVisualizationExpectSuccess('animal sounds pie');
|
||||
await PageObjects.header.clickDashboard();
|
||||
|
||||
await dashboardExpect.pieSliceCount(1);
|
||||
|
|
|
@ -140,7 +140,7 @@ export default function ({ getService, getPageObjects }) {
|
|||
await PageObjects.visualize.clickGo();
|
||||
await PageObjects.header.waitUntilLoadingHasFinished();
|
||||
|
||||
await PageObjects.visualize.saveVisualization('Visualization TileMap');
|
||||
await PageObjects.visualize.saveVisualizationExpectSuccess('Visualization TileMap');
|
||||
|
||||
await PageObjects.header.clickDashboard();
|
||||
|
||||
|
|
|
@ -125,7 +125,7 @@ export default function ({ getService, getPageObjects }) {
|
|||
await dashboardAddPanel.clickAddNewEmbeddableLink();
|
||||
await PageObjects.visualize.clickAreaChart();
|
||||
await PageObjects.visualize.clickNewSearch();
|
||||
await PageObjects.visualize.saveVisualization('new viz panel');
|
||||
await PageObjects.visualize.saveVisualizationExpectSuccess('new viz panel');
|
||||
|
||||
await PageObjects.dashboard.clickCancelOutOfEditMode();
|
||||
|
||||
|
|
|
@ -58,7 +58,7 @@ export default function ({ getService, getPageObjects }) {
|
|||
|
||||
it('should save and load with special characters', async function () {
|
||||
const vizNamewithSpecialChars = vizName1 + '/?&=%';
|
||||
await PageObjects.visualize.saveVisualization(vizNamewithSpecialChars);
|
||||
await PageObjects.visualize.saveVisualizationExpectSuccess(vizNamewithSpecialChars);
|
||||
const pageTitle = await PageObjects.common.getBreadcrumbPageTitle();
|
||||
log.debug(`Save viz page title is ${pageTitle}`);
|
||||
expect(pageTitle).to.contain(vizNamewithSpecialChars);
|
||||
|
@ -67,14 +67,14 @@ export default function ({ getService, getPageObjects }) {
|
|||
|
||||
it('should save and load with non-ascii characters', async function () {
|
||||
const vizNamewithSpecialChars = `${vizName1} with Umlaut ä`;
|
||||
await PageObjects.visualize.saveVisualization(vizNamewithSpecialChars);
|
||||
await PageObjects.visualize.saveVisualizationExpectSuccess(vizNamewithSpecialChars);
|
||||
const pageTitle = await PageObjects.common.getBreadcrumbPageTitle();
|
||||
log.debug(`Saved viz page title with umlaut is ${pageTitle}`);
|
||||
expect(pageTitle).to.contain(vizNamewithSpecialChars);
|
||||
});
|
||||
|
||||
it('should save and load', async function () {
|
||||
await PageObjects.visualize.saveVisualization(vizName1);
|
||||
await PageObjects.visualize.saveVisualizationExpectSuccess(vizName1);
|
||||
const pageTitle = await PageObjects.common.getBreadcrumbPageTitle();
|
||||
log.debug(`Saved viz page title is ${pageTitle}`);
|
||||
expect(pageTitle).to.contain(vizName1);
|
||||
|
|
|
@ -67,7 +67,7 @@ export default function ({ getService, getPageObjects }) {
|
|||
});
|
||||
|
||||
it('should be able to save and load', async function () {
|
||||
await PageObjects.visualize.saveVisualization(vizName1);
|
||||
await PageObjects.visualize.saveVisualizationExpectSuccess(vizName1);
|
||||
const pageTitle = await PageObjects.common.getBreadcrumbPageTitle();
|
||||
log.debug(`Save viz page title is ${pageTitle}`);
|
||||
expect(pageTitle).to.contain(vizName1);
|
||||
|
|
|
@ -62,7 +62,7 @@ export default function ({ getService, getPageObjects }) {
|
|||
});
|
||||
|
||||
it('should be able to save and load', async function () {
|
||||
await PageObjects.visualize.saveVisualization(vizName1);
|
||||
await PageObjects.visualize.saveVisualizationExpectSuccess(vizName1);
|
||||
const pageTitle = await PageObjects.common.getBreadcrumbPageTitle();
|
||||
log.debug(`Save viz page title is ${pageTitle}`);
|
||||
expect(pageTitle).to.contain(vizName1);
|
||||
|
|
|
@ -48,7 +48,7 @@ export default function ({ getService, getPageObjects }) {
|
|||
});
|
||||
|
||||
it('should save and load', async function () {
|
||||
await PageObjects.visualize.saveVisualization(vizName1);
|
||||
await PageObjects.visualize.saveVisualizationExpectSuccess(vizName1);
|
||||
const pageTitle = await PageObjects.common.getBreadcrumbPageTitle();
|
||||
log.debug(`Save viz page title is ${pageTitle}`);
|
||||
expect(pageTitle).to.contain(vizName1);
|
||||
|
@ -58,7 +58,7 @@ export default function ({ getService, getPageObjects }) {
|
|||
});
|
||||
|
||||
it('should save and load', async function () {
|
||||
await PageObjects.visualize.saveVisualization(vizName1);
|
||||
await PageObjects.visualize.saveVisualizationExpectSuccess(vizName1);
|
||||
const pageTitle = await PageObjects.common.getBreadcrumbPageTitle();
|
||||
log.debug(`Save viz page title is ${pageTitle}`);
|
||||
expect(pageTitle).to.contain(vizName1);
|
||||
|
|
|
@ -114,7 +114,7 @@ export default function ({ getService, getPageObjects }) {
|
|||
});
|
||||
|
||||
it('should be able to save and load', async function () {
|
||||
await PageObjects.visualize.saveVisualization(vizName1);
|
||||
await PageObjects.visualize.saveVisualizationExpectSuccess(vizName1);
|
||||
const pageTitle = await PageObjects.common.getBreadcrumbPageTitle();
|
||||
log.debug(`Save viz page title is ${pageTitle}`);
|
||||
expect(pageTitle).to.contain(vizName1);
|
||||
|
|
|
@ -91,7 +91,7 @@ export default function ({ getService, getPageObjects }) {
|
|||
});
|
||||
|
||||
it('should not break when saving after unlinking', async () => {
|
||||
await PageObjects.visualize.saveVisualization('Unlinked before saved');
|
||||
await PageObjects.visualize.saveVisualizationExpectSuccess('Unlinked before saved');
|
||||
await PageObjects.header.waitUntilLoadingHasFinished();
|
||||
await retry.waitFor('wait for count to equal 1,293', async () => {
|
||||
const data = await PageObjects.visualize.getTableVisData();
|
||||
|
|
|
@ -51,7 +51,7 @@ export default function ({ getService, getPageObjects }) {
|
|||
});
|
||||
|
||||
it('should save and load', async function () {
|
||||
await PageObjects.visualize.saveVisualization(vizName1);
|
||||
await PageObjects.visualize.saveVisualizationExpectSuccess(vizName1);
|
||||
const pageTitle = await PageObjects.common.getBreadcrumbPageTitle();
|
||||
log.debug(`Save viz page title is ${pageTitle}`);
|
||||
expect(pageTitle).to.contain(vizName1);
|
||||
|
@ -139,7 +139,7 @@ export default function ({ getService, getPageObjects }) {
|
|||
});
|
||||
|
||||
it('should correctly save disabled agg', async () => {
|
||||
await PageObjects.visualize.saveVisualization(vizName1);
|
||||
await PageObjects.visualize.saveVisualizationExpectSuccess(vizName1);
|
||||
const pageTitle = await PageObjects.common.getBreadcrumbPageTitle();
|
||||
log.debug(`Save viz page title is ${pageTitle}`);
|
||||
expect(pageTitle).to.contain(vizName1);
|
||||
|
|
|
@ -99,7 +99,7 @@ export default function ({ getService, getPageObjects }) {
|
|||
});
|
||||
|
||||
it('should save and load', async function () {
|
||||
await PageObjects.visualize.saveVisualization(vizName1);
|
||||
await PageObjects.visualize.saveVisualizationExpectSuccess(vizName1);
|
||||
const pageTitle = await PageObjects.common.getBreadcrumbPageTitle();
|
||||
log.debug(`Save viz page title is ${pageTitle}`);
|
||||
expect(pageTitle).to.contain(vizName1);
|
||||
|
|
|
@ -183,7 +183,7 @@ export default function ({ getService, getPageObjects }) {
|
|||
const mapBounds = await PageObjects.visualize.getMapBounds();
|
||||
await PageObjects.visualize.closeInspector();
|
||||
|
||||
await PageObjects.visualize.saveVisualization(vizName1);
|
||||
await PageObjects.visualize.saveVisualizationExpectSuccess(vizName1);
|
||||
|
||||
const afterSaveMapBounds = await PageObjects.visualize.getMapBounds();
|
||||
|
||||
|
|
|
@ -53,7 +53,7 @@ export default function ({ getService, getPageObjects }) {
|
|||
before(initBarChart);
|
||||
|
||||
it('should save and load', async function () {
|
||||
await PageObjects.visualize.saveVisualization(vizName1);
|
||||
await PageObjects.visualize.saveVisualizationExpectSuccess(vizName1);
|
||||
const pageTitle = await PageObjects.common.getBreadcrumbPageTitle();
|
||||
log.debug(`Save viz page title is ${pageTitle}`);
|
||||
expect(pageTitle).to.contain(vizName1);
|
||||
|
|
|
@ -50,7 +50,7 @@ export default function ({ getService, getPageObjects }) {
|
|||
before(initBarChart);
|
||||
|
||||
it('should save and load', async function () {
|
||||
await PageObjects.visualize.saveVisualization(vizName1);
|
||||
await PageObjects.visualize.saveVisualizationExpectSuccess(vizName1);
|
||||
const pageTitle = await PageObjects.common.getBreadcrumbPageTitle();
|
||||
log.debug(`Save viz page title is ${pageTitle}`);
|
||||
expect(pageTitle).to.contain(vizName1);
|
||||
|
|
|
@ -18,8 +18,9 @@
|
|||
*/
|
||||
|
||||
import { VisualizeConstants } from '../../../src/core_plugins/kibana/public/visualize/visualize_constants';
|
||||
import Keys from 'leadfoot/keys';
|
||||
import Bluebird from 'bluebird';
|
||||
import expect from 'expect.js';
|
||||
import Keys from 'leadfoot/keys';
|
||||
|
||||
export function VisualizePageProvider({ getService, getPageObjects }) {
|
||||
const remote = getService('remote');
|
||||
|
@ -712,13 +713,24 @@ export function VisualizePageProvider({ getService, getPageObjects }) {
|
|||
async saveVisualization(vizName, { saveAsNew = false } = {}) {
|
||||
await this.ensureSavePanelOpen();
|
||||
await testSubjects.setValue('visTitleInput', vizName);
|
||||
log.debug('click submit button');
|
||||
await testSubjects.click('saveVisualizationButton');
|
||||
if (saveAsNew) {
|
||||
log.debug('Check save as new visualization');
|
||||
await testSubjects.click('saveAsNewCheckbox');
|
||||
}
|
||||
await PageObjects.header.waitUntilLoadingHasFinished();
|
||||
return await testSubjects.exists('saveVisualizationSuccess');
|
||||
log.debug('Click Save Visualization button');
|
||||
await testSubjects.click('saveVisualizationButton');
|
||||
}
|
||||
|
||||
async saveVisualizationExpectSuccess(vizName, { saveAsNew = false } = {}) {
|
||||
await this.saveVisualization(vizName, { saveAsNew });
|
||||
const successToast = await testSubjects.exists('saveVisualizationSuccess', defaultFindTimeout);
|
||||
expect(successToast).to.be(true);
|
||||
}
|
||||
|
||||
async saveVisualizationExpectFail(vizName, { saveAsNew = false } = {}) {
|
||||
await this.saveVisualization(vizName, { saveAsNew });
|
||||
const errorToast = await testSubjects.exists('saveVisualizationError', defaultFindTimeout);
|
||||
expect(errorToast).to.be(true);
|
||||
}
|
||||
|
||||
async clickLoadSavedVisButton() {
|
||||
|
|
|
@ -35,7 +35,7 @@ export function DashboardVisualizationProvider({ getService, getPageObjects }) {
|
|||
await dashboardAddPanel.ensureAddPanelIsShowing();
|
||||
await dashboardAddPanel.clickAddNewEmbeddableLink();
|
||||
await PageObjects.visualize.clickVisualBuilder();
|
||||
await PageObjects.visualize.saveVisualization(name);
|
||||
await PageObjects.visualize.saveVisualizationExpectSuccess(name);
|
||||
}
|
||||
|
||||
async createSavedSearch({ name, query, fields }) {
|
||||
|
@ -84,7 +84,7 @@ export function DashboardVisualizationProvider({ getService, getPageObjects }) {
|
|||
await PageObjects.visualize.clickMarkdownWidget();
|
||||
await PageObjects.visualize.setMarkdownTxt(markdown);
|
||||
await PageObjects.visualize.clickGo();
|
||||
await PageObjects.visualize.saveVisualization(name);
|
||||
await PageObjects.visualize.saveVisualizationExpectSuccess(name);
|
||||
}
|
||||
};
|
||||
}
|
||||
|
|
|
@ -88,8 +88,7 @@ export default function ({ getService, getPageObjects }) {
|
|||
await PageObjects.visualize.clickGo();
|
||||
await PageObjects.header.waitUntilLoadingHasFinished();
|
||||
await PageObjects.visualize.waitForVisualization();
|
||||
const success = await PageObjects.visualize.saveVisualization(vizName1);
|
||||
expect(success).to.be(true);
|
||||
await PageObjects.visualize.saveVisualizationExpectSuccess(vizName1);
|
||||
await PageObjects.security.logout();
|
||||
|
||||
});
|
||||
|
@ -110,8 +109,7 @@ export default function ({ getService, getPageObjects }) {
|
|||
await PageObjects.visualize.clickGo();
|
||||
await PageObjects.header.waitUntilLoadingHasFinished();
|
||||
await PageObjects.visualize.waitForVisualization();
|
||||
const success = await PageObjects.visualize.saveVisualization(vizName1);
|
||||
expect(success).to.be(false);
|
||||
await PageObjects.visualize.saveVisualizationExpectFail(vizName1);
|
||||
await PageObjects.security.logout();
|
||||
|
||||
});
|
||||
|
|
|
@ -226,7 +226,7 @@ export default function ({ getService, getPageObjects }) {
|
|||
await PageObjects.visualize.clickBucket('X-Axis');
|
||||
await PageObjects.visualize.selectAggregation('Date Histogram');
|
||||
await PageObjects.visualize.clickGo();
|
||||
await PageObjects.visualize.saveVisualization('my viz');
|
||||
await PageObjects.visualize.saveVisualizationExpectSuccess('my viz');
|
||||
await expectEnabledGenerateReportButton();
|
||||
});
|
||||
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue