From 7c0ae5b64adaff14312b0574469080e00e40e443 Mon Sep 17 00:00:00 2001 From: Quynh Nguyen Date: Thu, 3 Feb 2022 15:31:20 -0600 Subject: [PATCH 1/2] Assert Lens show chart after navigation from data viz --- .../data_visualizer/index_data_visualizer.ts | 51 +++++++++++++++++++ .../services/ml/data_visualizer_table.ts | 12 +++++ 2 files changed, 63 insertions(+) diff --git a/x-pack/test/functional/apps/ml/data_visualizer/index_data_visualizer.ts b/x-pack/test/functional/apps/ml/data_visualizer/index_data_visualizer.ts index a5a0d6d2de6d7..baa6fe3c0d7e4 100644 --- a/x-pack/test/functional/apps/ml/data_visualizer/index_data_visualizer.ts +++ b/x-pack/test/functional/apps/ml/data_visualizer/index_data_visualizer.ts @@ -14,6 +14,7 @@ import { farequoteLuceneSearchTestData, sampleLogTestData, } from './index_test_data'; +import { ML_JOB_FIELD_TYPES } from '../../../../../plugins/ml/common/constants/field_types'; export default function ({ getPageObject, getService }: FtrProviderContext) { const headerPage = getPageObject('header'); @@ -220,5 +221,55 @@ export default function ({ getPageObject, getService }: FtrProviderContext) { }); runTests(sampleLogTestData); }); + + describe('with view in lens action ', function () { + const testData = farequoteDataViewTestData; + // Run tests on full ft_module_sample_logs index. + it(`${testData.suiteTitle} loads the data visualizer selector page`, async () => { + // Start navigation from the base of the ML app. + await ml.navigation.navigateToMl(); + await ml.navigation.navigateToDataVisualizer(); + }); + + it(`${testData.suiteTitle} loads the source data in the data visualizer`, async () => { + await ml.testExecution.logTestStep( + `${testData.suiteTitle} loads the saved search selection page` + ); + await ml.dataVisualizer.navigateToIndexPatternSelection(); + + await ml.testExecution.logTestStep( + `${testData.suiteTitle} loads the index data visualizer page` + ); + await ml.jobSourceSelection.selectSourceForIndexBasedDataVisualizer( + testData.sourceIndexOrSavedSearch + ); + + await ml.testExecution.logTestStep(`${testData.suiteTitle} loads data for full time range`); + await ml.dataVisualizerIndexBased.clickUseFullDataButton( + testData.expected.totalDocCountFormatted + ); + await headerPage.waitUntilLoadingHasFinished(); + + await ml.testExecution.logTestStep('navigate to Lens'); + const lensMetricField = testData.expected.metricFields![0]; + + if (lensMetricField) { + await ml.dataVisualizerTable.assertLensActionShowChart( + lensMetricField.type, + lensMetricField.fieldName + ); + } + const lensNonMetricField = testData.expected.nonMetricFields?.find( + (f) => f.type === ML_JOB_FIELD_TYPES.KEYWORD + ); + + if (lensNonMetricField) { + await ml.dataVisualizerTable.assertLensActionShowChart( + lensNonMetricField.type, + lensNonMetricField.fieldName + ); + } + }); + }); }); } diff --git a/x-pack/test/functional/services/ml/data_visualizer_table.ts b/x-pack/test/functional/services/ml/data_visualizer_table.ts index 24563fe05f6ff..bfd0288184cff 100644 --- a/x-pack/test/functional/services/ml/data_visualizer_table.ts +++ b/x-pack/test/functional/services/ml/data_visualizer_table.ts @@ -565,6 +565,18 @@ export function MachineLearningDataVisualizerTableProvider( } } + public async assertLensActionShowChart(fieldType: string, fieldName: string) { + await retry.tryForTime(10 * 1000, async () => { + await testSubjects.clickWhenNotDisabled( + this.rowSelector(fieldName, 'dataVisualizerActionViewInLensButton') + ); + await testSubjects.existOrFail('lnsVisualizationContainer', { + timeout: 1000, + }); + await browser.goBack(); + }); + } + public async ensureNumRowsPerPage(n: 10 | 25 | 50) { const paginationButton = 'dataVisualizerTable > tablePaginationPopoverButton'; await retry.tryForTime(10000, async () => { From dba069a709bd4532519237e4ed6922dc3545e3eb Mon Sep 17 00:00:00 2001 From: Quynh Nguyen Date: Fri, 4 Feb 2022 09:46:04 -0600 Subject: [PATCH 2/2] Fix tests --- .../ml/data_visualizer/index_data_visualizer.ts | 14 +++++--------- .../services/ml/data_visualizer_table.ts | 7 +++---- x-pack/test/functional/services/ml/navigation.ts | 8 +++++++- 3 files changed, 15 insertions(+), 14 deletions(-) diff --git a/x-pack/test/functional/apps/ml/data_visualizer/index_data_visualizer.ts b/x-pack/test/functional/apps/ml/data_visualizer/index_data_visualizer.ts index baa6fe3c0d7e4..a20962e607af2 100644 --- a/x-pack/test/functional/apps/ml/data_visualizer/index_data_visualizer.ts +++ b/x-pack/test/functional/apps/ml/data_visualizer/index_data_visualizer.ts @@ -231,7 +231,7 @@ export default function ({ getPageObject, getService }: FtrProviderContext) { await ml.navigation.navigateToDataVisualizer(); }); - it(`${testData.suiteTitle} loads the source data in the data visualizer`, async () => { + it(`${testData.suiteTitle} loads lens charts`, async () => { await ml.testExecution.logTestStep( `${testData.suiteTitle} loads the saved search selection page` ); @@ -254,20 +254,16 @@ export default function ({ getPageObject, getService }: FtrProviderContext) { const lensMetricField = testData.expected.metricFields![0]; if (lensMetricField) { - await ml.dataVisualizerTable.assertLensActionShowChart( - lensMetricField.type, - lensMetricField.fieldName - ); + await ml.dataVisualizerTable.assertLensActionShowChart(lensMetricField.fieldName); + await ml.navigation.browserBackTo('dataVisualizerTable'); } const lensNonMetricField = testData.expected.nonMetricFields?.find( (f) => f.type === ML_JOB_FIELD_TYPES.KEYWORD ); if (lensNonMetricField) { - await ml.dataVisualizerTable.assertLensActionShowChart( - lensNonMetricField.type, - lensNonMetricField.fieldName - ); + await ml.dataVisualizerTable.assertLensActionShowChart(lensNonMetricField.fieldName); + await ml.navigation.browserBackTo('dataVisualizerTable'); } }); }); diff --git a/x-pack/test/functional/services/ml/data_visualizer_table.ts b/x-pack/test/functional/services/ml/data_visualizer_table.ts index bfd0288184cff..cf9b1f8fa35a5 100644 --- a/x-pack/test/functional/services/ml/data_visualizer_table.ts +++ b/x-pack/test/functional/services/ml/data_visualizer_table.ts @@ -565,15 +565,14 @@ export function MachineLearningDataVisualizerTableProvider( } } - public async assertLensActionShowChart(fieldType: string, fieldName: string) { - await retry.tryForTime(10 * 1000, async () => { + public async assertLensActionShowChart(fieldName: string) { + await retry.tryForTime(30 * 1000, async () => { await testSubjects.clickWhenNotDisabled( this.rowSelector(fieldName, 'dataVisualizerActionViewInLensButton') ); await testSubjects.existOrFail('lnsVisualizationContainer', { - timeout: 1000, + timeout: 15 * 1000, }); - await browser.goBack(); }); } diff --git a/x-pack/test/functional/services/ml/navigation.ts b/x-pack/test/functional/services/ml/navigation.ts index 4f11f082eb152..c11721453d10f 100644 --- a/x-pack/test/functional/services/ml/navigation.ts +++ b/x-pack/test/functional/services/ml/navigation.ts @@ -17,7 +17,7 @@ export function MachineLearningNavigationProvider({ const browser = getService('browser'); const retry = getService('retry'); const testSubjects = getService('testSubjects'); - const PageObjects = getPageObjects(['common']); + const PageObjects = getPageObjects(['common', 'header']); return { async navigateToMl() { @@ -264,5 +264,11 @@ export function MachineLearningNavigationProvider({ `Expected the current URL "${currentUrl}" to not include ${expectedUrlPart}` ); }, + + async browserBackTo(backTestSubj: string) { + await browser.goBack(); + await PageObjects.header.waitUntilLoadingHasFinished(); + await testSubjects.existOrFail(backTestSubj, { timeout: 10 * 1000 }); + }, }; }