From eb406752e13528ba6be6b2665de6153720b500b1 Mon Sep 17 00:00:00 2001 From: Spencer Date: Tue, 3 Dec 2019 14:14:39 -0700 Subject: [PATCH] =?UTF-8?q?[7.x]=20[ftr/visualize]=20continue=20to=20wait?= =?UTF-8?q?=20for=20save=20completion=20by=E2=80=A6=20(#52112)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit * [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 c6b33886a2456a..47c7a1a6bbee8c 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 51c0984c89fed5..f15d51bd110102 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 6cc09621403294..f55c88cb3a4863 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 547ecdd5988118..c1b86d26442c93 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 cbadb7408f9855..f407dd0e16f76b 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 fc040c038afd0d..72fda07d473d68 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 5b435ef29a2688..f104b906909a53 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 6c94753fdf4181..ce8afa67b0618f 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 a884f823764936..712963f07b8772 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 19a7bd25db9c61..0e9a64e736999d 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 49e6bd02d681fc..73424a3df55dae 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 a6792670fdb3fa..1104f60171c9ae 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 f640a34b36ddfb..58ee1668df7012 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() {