From d0762728e9cb44f6c27df7eb7e3fbbc3df388ed7 Mon Sep 17 00:00:00 2001 From: Spencer Date: Tue, 3 Dec 2019 12:35:39 -0700 Subject: [PATCH] [ftr/visualize] continue to wait for save completion by default (#51413) * [ftr/visualize] continue to wait for save completion by default * capture the toast message when saving the visualization so that it can be inspected if desired * fix/flaky visualize listing tests (#33) * move waitForSaveModalToClose from dashboard_page to common_page * call common_page.waitForSaveModalToClose() * remove extra wait for toast * fix trailing spaces * improve error message of failing test --- test/functional/apps/visualize/_area_chart.js | 2 -- test/functional/apps/visualize/_data_table.js | 4 ++-- .../visualize/_data_table_nontimeindex.js | 2 +- .../apps/visualize/_heatmap_chart.js | 2 +- test/functional/apps/visualize/_line_chart.js | 2 +- test/functional/apps/visualize/_pie_chart.js | 4 ++-- test/functional/apps/visualize/_tag_cloud.js | 2 +- .../apps/visualize/_vertical_bar_chart.js | 2 +- .../_vertical_bar_chart_nontimeindex.js | 2 +- test/functional/page_objects/common_page.ts | 8 ++++++++ .../functional/page_objects/dashboard_page.js | 11 +--------- .../functional/page_objects/visualize_page.js | 20 +++++++++++-------- x-pack/test/functional/apps/graph/graph.ts | 8 +++++--- 13 files changed, 36 insertions(+), 33 deletions(-) diff --git a/test/functional/apps/visualize/_area_chart.js b/test/functional/apps/visualize/_area_chart.js index c6b33886a2456..47c7a1a6bbee8 100644 --- a/test/functional/apps/visualize/_area_chart.js +++ b/test/functional/apps/visualize/_area_chart.js @@ -57,7 +57,6 @@ export default function ({ getService, getPageObjects }) { it('should save and load with special characters', async function () { const vizNamewithSpecialChars = vizName1 + '/?&=%'; await PageObjects.visualize.saveVisualizationExpectSuccessAndBreadcrumb(vizNamewithSpecialChars); - await PageObjects.visualize.waitForVisualizationSavedToastGone(); }); it('should save and load with non-ascii characters', async function () { @@ -67,7 +66,6 @@ export default function ({ getService, getPageObjects }) { it('should save and load', async function () { await PageObjects.visualize.saveVisualizationExpectSuccessAndBreadcrumb(vizName1); - await PageObjects.visualize.waitForVisualizationSavedToastGone(); await PageObjects.visualize.loadSavedVisualization(vizName1); await PageObjects.visualize.waitForVisualization(); }); diff --git a/test/functional/apps/visualize/_data_table.js b/test/functional/apps/visualize/_data_table.js index 51c0984c89fed..f15d51bd11010 100644 --- a/test/functional/apps/visualize/_data_table.js +++ b/test/functional/apps/visualize/_data_table.js @@ -64,7 +64,7 @@ export default function ({ getService, getPageObjects }) { it('should be able to save and load', async function () { await PageObjects.visualize.saveVisualizationExpectSuccessAndBreadcrumb(vizName1); - await PageObjects.visualize.waitForVisualizationSavedToastGone(); + await PageObjects.visualize.loadSavedVisualization(vizName1); await PageObjects.visualize.waitForVisualization(); }); @@ -126,7 +126,7 @@ export default function ({ getService, getPageObjects }) { // check that it works after a save and reload const SAVE_NAME = 'viz w/ percents'; await PageObjects.visualize.saveVisualizationExpectSuccessAndBreadcrumb(SAVE_NAME); - await PageObjects.visualize.waitForVisualizationSavedToastGone(); + await PageObjects.visualize.loadSavedVisualization(SAVE_NAME); await PageObjects.visualize.waitForVisualization(); diff --git a/test/functional/apps/visualize/_data_table_nontimeindex.js b/test/functional/apps/visualize/_data_table_nontimeindex.js index 6cc0962140329..f55c88cb3a486 100644 --- a/test/functional/apps/visualize/_data_table_nontimeindex.js +++ b/test/functional/apps/visualize/_data_table_nontimeindex.js @@ -64,7 +64,7 @@ export default function ({ getService, getPageObjects }) { it('should be able to save and load', async function () { await PageObjects.visualize.saveVisualizationExpectSuccessAndBreadcrumb(vizName1); - await PageObjects.visualize.waitForVisualizationSavedToastGone(); + await PageObjects.visualize.loadSavedVisualization(vizName1); await PageObjects.visualize.waitForVisualization(); }); diff --git a/test/functional/apps/visualize/_heatmap_chart.js b/test/functional/apps/visualize/_heatmap_chart.js index 547ecdd598811..c1b86d26442c9 100644 --- a/test/functional/apps/visualize/_heatmap_chart.js +++ b/test/functional/apps/visualize/_heatmap_chart.js @@ -47,7 +47,7 @@ export default function ({ getService, getPageObjects }) { it('should save and load', async function () { await PageObjects.visualize.saveVisualizationExpectSuccessAndBreadcrumb(vizName1); - await PageObjects.visualize.waitForVisualizationSavedToastGone(); + await PageObjects.visualize.loadSavedVisualization(vizName1); await PageObjects.visualize.waitForVisualization(); }); diff --git a/test/functional/apps/visualize/_line_chart.js b/test/functional/apps/visualize/_line_chart.js index cbadb7408f985..f407dd0e16f76 100644 --- a/test/functional/apps/visualize/_line_chart.js +++ b/test/functional/apps/visualize/_line_chart.js @@ -140,7 +140,7 @@ export default function ({ getService, getPageObjects }) { it('should be able to save and load', async function () { await PageObjects.visualize.saveVisualizationExpectSuccessAndBreadcrumb(vizName1); - await PageObjects.visualize.waitForVisualizationSavedToastGone(); + await PageObjects.visualize.loadSavedVisualization(vizName1); await PageObjects.visualize.waitForVisualization(); }); diff --git a/test/functional/apps/visualize/_pie_chart.js b/test/functional/apps/visualize/_pie_chart.js index fc040c038afd0..72fda07d473d6 100644 --- a/test/functional/apps/visualize/_pie_chart.js +++ b/test/functional/apps/visualize/_pie_chart.js @@ -51,7 +51,7 @@ export default function ({ getService, getPageObjects }) { it('should save and load', async function () { await PageObjects.visualize.saveVisualizationExpectSuccessAndBreadcrumb(vizName1); - await PageObjects.visualize.waitForVisualizationSavedToastGone(); + await PageObjects.visualize.loadSavedVisualization(vizName1); await PageObjects.visualize.waitForVisualization(); }); @@ -156,7 +156,7 @@ export default function ({ getService, getPageObjects }) { it('should correctly save disabled agg', async () => { await PageObjects.visualize.saveVisualizationExpectSuccessAndBreadcrumb(vizName1); - await PageObjects.visualize.waitForVisualizationSavedToastGone(); + await PageObjects.visualize.loadSavedVisualization(vizName1); await PageObjects.visualize.waitForRenderingCount(); diff --git a/test/functional/apps/visualize/_tag_cloud.js b/test/functional/apps/visualize/_tag_cloud.js index 5b435ef29a268..f104b906909a5 100644 --- a/test/functional/apps/visualize/_tag_cloud.js +++ b/test/functional/apps/visualize/_tag_cloud.js @@ -96,7 +96,7 @@ export default function ({ getService, getPageObjects }) { it('should save and load', async function () { await PageObjects.visualize.saveVisualizationExpectSuccessAndBreadcrumb(vizName1); - await PageObjects.visualize.waitForVisualizationSavedToastGone(); + await PageObjects.visualize.loadSavedVisualization(vizName1); await PageObjects.visualize.waitForVisualization(); }); diff --git a/test/functional/apps/visualize/_vertical_bar_chart.js b/test/functional/apps/visualize/_vertical_bar_chart.js index 6c94753fdf418..ce8afa67b0618 100644 --- a/test/functional/apps/visualize/_vertical_bar_chart.js +++ b/test/functional/apps/visualize/_vertical_bar_chart.js @@ -51,7 +51,7 @@ export default function ({ getService, getPageObjects }) { it('should save and load', async function () { await PageObjects.visualize.saveVisualizationExpectSuccessAndBreadcrumb(vizName1); - await PageObjects.visualize.waitForVisualizationSavedToastGone(); + await PageObjects.visualize.loadSavedVisualization(vizName1); await PageObjects.visualize.waitForVisualization(); }); diff --git a/test/functional/apps/visualize/_vertical_bar_chart_nontimeindex.js b/test/functional/apps/visualize/_vertical_bar_chart_nontimeindex.js index a884f82376493..712963f07b877 100644 --- a/test/functional/apps/visualize/_vertical_bar_chart_nontimeindex.js +++ b/test/functional/apps/visualize/_vertical_bar_chart_nontimeindex.js @@ -50,7 +50,7 @@ export default function ({ getService, getPageObjects }) { it('should save and load', async function () { await PageObjects.visualize.saveVisualizationExpectSuccessAndBreadcrumb(vizName1); - await PageObjects.visualize.waitForVisualizationSavedToastGone(); + await PageObjects.visualize.loadSavedVisualization(vizName1); await PageObjects.visualize.waitForVisualization(); }); diff --git a/test/functional/page_objects/common_page.ts b/test/functional/page_objects/common_page.ts index 19a7bd25db9c6..0e9a64e736999 100644 --- a/test/functional/page_objects/common_page.ts +++ b/test/functional/page_objects/common_page.ts @@ -409,6 +409,14 @@ export function CommonPageProvider({ getService, getPageObjects }: FtrProviderCo }); return response.status !== 200; } + async waitForSaveModalToClose() { + log.debug('Waiting for save modal to close'); + await retry.try(async () => { + if (await testSubjects.exists('savedObjectSaveModal')) { + throw new Error('save modal still open'); + } + }); + } } return new CommonPage(); diff --git a/test/functional/page_objects/dashboard_page.js b/test/functional/page_objects/dashboard_page.js index 49e6bd02d681f..73424a3df55da 100644 --- a/test/functional/page_objects/dashboard_page.js +++ b/test/functional/page_objects/dashboard_page.js @@ -322,20 +322,11 @@ export function DashboardPageProvider({ getService, getPageObjects }) { await testSubjects.existOrFail('saveDashboardSuccess'); const message = await PageObjects.common.closeToast(); await PageObjects.header.waitUntilLoadingHasFinished(); - await this.waitForSaveModalToClose(); + await PageObjects.common.waitForSaveModalToClose(); return message; } - async waitForSaveModalToClose() { - log.debug('Waiting for dashboard save modal to close'); - await retry.try(async () => { - if (await testSubjects.exists('savedObjectSaveModal')) { - throw new Error('dashboard save still open'); - } - }); - } - async deleteDashboard(dashboardName, dashboardId) { await this.gotoDashboardLandingPage(); await this.searchForDashboardWithName(dashboardName); diff --git a/test/functional/page_objects/visualize_page.js b/test/functional/page_objects/visualize_page.js index a6792670fdb3f..1104f60171c9a 100644 --- a/test/functional/page_objects/visualize_page.js +++ b/test/functional/page_objects/visualize_page.js @@ -756,19 +756,23 @@ export function VisualizePageProvider({ getService, getPageObjects, updateBaseli await testSubjects.click('saveAsNewCheckbox'); } log.debug('Click Save Visualization button'); + await testSubjects.click('confirmSaveSavedObjectButton'); - // if we wait for this, the success toast message could be gone :-() - // wait for save to complete before completion - // await PageObjects.header.waitUntilLoadingHasFinished(); + // Confirm that the Visualization has actually been saved + await testSubjects.existOrFail('saveVisualizationSuccess'); + const message = await PageObjects.common.closeToast(); + await PageObjects.header.waitUntilLoadingHasFinished(); + await PageObjects.common.waitForSaveModalToClose(); + + return message; } async saveVisualizationExpectSuccess(vizName, { saveAsNew = false } = {}) { - await this.saveVisualization(vizName, { saveAsNew }); - const successToast = await testSubjects.exists('saveVisualizationSuccess', { - timeout: 2 * defaultFindTimeout - }); - expect(successToast).to.be(true); + const saveMessage = await this.saveVisualization(vizName, { saveAsNew }); + if (!saveMessage) { + throw new Error(`Expected saveVisualization to respond with the saveMessage from the toast, got ${saveMessage}`); + } } async saveVisualizationExpectSuccessAndBreadcrumb(vizName, { saveAsNew = false } = {}) { diff --git a/x-pack/test/functional/apps/graph/graph.ts b/x-pack/test/functional/apps/graph/graph.ts index f640a34b36ddf..58ee1668df701 100644 --- a/x-pack/test/functional/apps/graph/graph.ts +++ b/x-pack/test/functional/apps/graph/graph.ts @@ -82,9 +82,11 @@ export default function({ getService, getPageObjects }: FtrProviderContext) { const { nodes } = await PageObjects.graph.getGraphObjects(); const circlesText = nodes.map(({ label }) => label); expect(circlesText.length).to.equal(expectedNodes.length); - circlesText.forEach(circleText => { - expect(expectedNodes.includes(circleText)).to.be(true); - }); + const unexpectedCircleTexts = circlesText.filter(t => !expectedNodes.includes(t)); + + if (unexpectedCircleTexts.length) { + throw new Error(`Find unexpected circle texts: ${unexpectedCircleTexts}`); + } }); it('should show correct connections', async function() {