From bd89b11576f75139f47669d369deceb9b94302c6 Mon Sep 17 00:00:00 2001 From: "Quynh Nguyen (Quinn)" <43350163+qn895@users.noreply.github.com> Date: Thu, 16 Feb 2023 14:35:43 -0600 Subject: [PATCH] [ML] Add functional tests for Field stats flyout in Anomaly detection job creation wizards (#151336) --- .../categorization_job.ts | 22 ++++++++++- .../multi_metric_job.ts | 37 +++++++++++++++++-- .../anomaly_detection_jobs/population_job.ts | 24 +++++++++++- .../single_metric_job.ts | 23 ++++++++++-- .../{data_frame_analytics => common}/types.ts | 0 .../classification_creation.ts | 2 +- .../classification_creation_saved_search.ts | 2 +- .../outlier_detection_creation.ts | 2 +- .../regression_creation.ts | 2 +- .../ml/data_frame_analytics_creation.ts | 10 ++--- .../services/ml/field_stats_flyout.ts | 2 +- x-pack/test/functional/services/ml/index.ts | 25 ++++++++++--- .../services/ml/job_wizard_categorization.ts | 21 ++++++++++- .../services/ml/job_wizard_common.ts | 36 ++++++++++++++++-- .../services/ml/job_wizard_multi_metric.ts | 21 ++++++++++- .../services/ml/job_wizard_population.ts | 21 ++++++++++- 16 files changed, 215 insertions(+), 35 deletions(-) rename x-pack/test/functional/apps/ml/{data_frame_analytics => common}/types.ts (100%) diff --git a/x-pack/test/functional/apps/ml/anomaly_detection_jobs/categorization_job.ts b/x-pack/test/functional/apps/ml/anomaly_detection_jobs/categorization_job.ts index 2ee9d226596d8f..2bf433a7d77c38 100644 --- a/x-pack/test/functional/apps/ml/anomaly_detection_jobs/categorization_job.ts +++ b/x-pack/test/functional/apps/ml/anomaly_detection_jobs/categorization_job.ts @@ -6,7 +6,8 @@ */ import { CATEGORY_EXAMPLES_VALIDATION_STATUS } from '@kbn/ml-plugin/common/constants/categorization_job'; -import { FtrProviderContext } from '../../../ftr_provider_context'; +import type { FtrProviderContext } from '../../../ftr_provider_context'; +import type { FieldStatsType } from '../common/types'; export default function ({ getService }: FtrProviderContext) { const esArchiver = getService('esArchiver'); @@ -74,6 +75,13 @@ export default function ({ getService }: FtrProviderContext) { const calendarId = `wizard-test-calendar_${Date.now()}`; + const fieldStatsEntries = [ + { + fieldName: 'field1', + type: 'keyword' as FieldStatsType, + }, + ]; + describe('categorization', function () { this.tags(['ml']); before(async () => { @@ -129,8 +137,18 @@ export default function ({ getService }: FtrProviderContext) { await ml.jobWizardCategorization.assertCategorizationDetectorTypeSelectionExists(); await ml.jobWizardCategorization.selectCategorizationDetectorType(detectorTypeIdentifier); - await ml.testExecution.logTestStep(`job creation selects the categorization field`); + await ml.testExecution.logTestStep( + 'job creation opens field stats flyout from categorization field input' + ); await ml.jobWizardCategorization.assertCategorizationFieldInputExists(); + for (const { fieldName, type: fieldType } of fieldStatsEntries) { + await ml.jobWizardCategorization.assertFieldStatFlyoutContentFromCategorizationFieldInputTrigger( + fieldName, + fieldType + ); + } + + await ml.testExecution.logTestStep(`job creation selects the categorization field`); await ml.jobWizardCategorization.selectCategorizationField(categorizationFieldIdentifier); await ml.jobWizardCategorization.assertCategorizationExamplesCallout( CATEGORY_EXAMPLES_VALIDATION_STATUS.VALID diff --git a/x-pack/test/functional/apps/ml/anomaly_detection_jobs/multi_metric_job.ts b/x-pack/test/functional/apps/ml/anomaly_detection_jobs/multi_metric_job.ts index dcb47b205bb1b9..9bbfdef22ce55c 100644 --- a/x-pack/test/functional/apps/ml/anomaly_detection_jobs/multi_metric_job.ts +++ b/x-pack/test/functional/apps/ml/anomaly_detection_jobs/multi_metric_job.ts @@ -5,7 +5,8 @@ * 2.0. */ -import { FtrProviderContext } from '../../../ftr_provider_context'; +import type { FtrProviderContext } from '../../../ftr_provider_context'; +import type { FieldStatsType } from '../common/types'; export default function ({ getService }: FtrProviderContext) { const esArchiver = getService('esArchiver'); @@ -71,6 +72,14 @@ export default function ({ getService }: FtrProviderContext) { const calendarId = `wizard-test-calendar_${Date.now()}`; + const fieldStatsEntries = [ + { + fieldName: '@version.keyword', + type: 'keyword' as FieldStatsType, + expectedValues: ['1'], + }, + ]; + describe('multi metric', function () { this.tags(['ml']); before(async () => { @@ -129,9 +138,20 @@ export default function ({ getService }: FtrProviderContext) { } await ml.testExecution.logTestStep( - 'job creation inputs the split field and displays split cards' + 'job creation opens field stats flyout from split field input' ); await ml.jobWizardMultiMetric.assertSplitFieldInputExists(); + for (const { fieldName, type: fieldType, expectedValues } of fieldStatsEntries) { + await ml.jobWizardMultiMetric.assertFieldStatFlyoutContentFromSplitFieldInputTrigger( + fieldName, + fieldType, + expectedValues + ); + } + + await ml.testExecution.logTestStep( + 'job creation inputs the split field and displays split cards' + ); await ml.jobWizardMultiMetric.selectSplitField(splitField); await ml.jobWizardMultiMetric.assertDetectorSplitExists(splitField); @@ -140,8 +160,19 @@ export default function ({ getService }: FtrProviderContext) { await ml.jobWizardCommon.assertInfluencerSelection([splitField]); - await ml.testExecution.logTestStep('job creation displays the influencer field'); + await ml.testExecution.logTestStep( + 'job creation opens field stats flyout from influencer field input' + ); await ml.jobWizardCommon.assertInfluencerInputExists(); + for (const { fieldName, type: fieldType, expectedValues } of fieldStatsEntries) { + await ml.jobWizardCommon.assertFieldStatFlyoutContentFromInfluencerInputTrigger( + fieldName, + fieldType, + expectedValues + ); + } + + await ml.testExecution.logTestStep('job creation displays the influencer field'); await ml.jobWizardCommon.assertInfluencerSelection([splitField]); await ml.testExecution.logTestStep('job creation inputs the bucket span'); diff --git a/x-pack/test/functional/apps/ml/anomaly_detection_jobs/population_job.ts b/x-pack/test/functional/apps/ml/anomaly_detection_jobs/population_job.ts index 0d04bb2ff70645..ea02186c45b749 100644 --- a/x-pack/test/functional/apps/ml/anomaly_detection_jobs/population_job.ts +++ b/x-pack/test/functional/apps/ml/anomaly_detection_jobs/population_job.ts @@ -5,7 +5,8 @@ * 2.0. */ -import { FtrProviderContext } from '../../../ftr_provider_context'; +import type { FtrProviderContext } from '../../../ftr_provider_context'; +import type { FieldStatsType } from '../common/types'; export default function ({ getService }: FtrProviderContext) { const esArchiver = getService('esArchiver'); @@ -33,6 +34,14 @@ export default function ({ getService }: FtrProviderContext) { numberOfBackCards: 5, }, ]; + const fieldStatsEntries = [ + { + fieldName: 'currency', + type: 'keyword' as FieldStatsType, + expectedValues: ['EUR'], + }, + ]; + const bucketSpan = '2h'; const memoryLimit = '8mb'; @@ -133,8 +142,19 @@ export default function ({ getService }: FtrProviderContext) { await ml.testExecution.logTestStep('job creation displays the pick fields step'); await ml.jobWizardCommon.advanceToPickFieldsSection(); - await ml.testExecution.logTestStep('job creation selects the population field'); + await ml.testExecution.logTestStep( + 'job creation opens field stats flyout from population field input' + ); await ml.jobWizardPopulation.assertPopulationFieldInputExists(); + for (const { fieldName, type: fieldType, expectedValues } of fieldStatsEntries) { + await ml.jobWizardPopulation.assertFieldStatFlyoutContentFromPopulationFieldInputTrigger( + fieldName, + fieldType, + expectedValues + ); + } + + await ml.testExecution.logTestStep('job creation selects the population field'); await ml.jobWizardPopulation.selectPopulationField(populationField); await ml.testExecution.logTestStep( diff --git a/x-pack/test/functional/apps/ml/anomaly_detection_jobs/single_metric_job.ts b/x-pack/test/functional/apps/ml/anomaly_detection_jobs/single_metric_job.ts index a4b702e7400b62..1b61c36469d602 100644 --- a/x-pack/test/functional/apps/ml/anomaly_detection_jobs/single_metric_job.ts +++ b/x-pack/test/functional/apps/ml/anomaly_detection_jobs/single_metric_job.ts @@ -5,7 +5,8 @@ * 2.0. */ -import { FtrProviderContext } from '../../../ftr_provider_context'; +import type { FtrProviderContext } from '../../../ftr_provider_context'; +import type { FieldStatsType } from '../common/types'; export default function ({ getService }: FtrProviderContext) { const config = getService('config'); @@ -79,6 +80,14 @@ export default function ({ getService }: FtrProviderContext) { ? remoteName + indexPatternName : indexPatternName; + const fieldStatsEntries = [ + { + fieldName: '@version.keyword', + type: 'keyword' as FieldStatsType, + expectedValues: ['1'], + }, + ]; + describe('single metric', function () { this.tags(['ml']); before(async () => { @@ -127,8 +136,17 @@ export default function ({ getService }: FtrProviderContext) { await ml.testExecution.logTestStep('job creation displays the pick fields step'); await ml.jobWizardCommon.advanceToPickFieldsSection(); - await ml.testExecution.logTestStep('job creation selects field and aggregation'); + await ml.testExecution.logTestStep('job creation opens field stats flyout from agg input'); await ml.jobWizardCommon.assertAggAndFieldInputExists(); + for (const { fieldName, type: fieldType, expectedValues } of fieldStatsEntries) { + await ml.jobWizardCommon.assertFieldStatFlyoutContentFromAggSelectionInputTrigger( + fieldName, + fieldType, + expectedValues + ); + } + + await ml.testExecution.logTestStep('job creation selects field and aggregation'); await ml.jobWizardCommon.selectAggAndField(aggAndFieldIdentifier, true); await ml.jobWizardCommon.assertAnomalyChartExists('LINE'); @@ -255,7 +273,6 @@ export default function ({ getService }: FtrProviderContext) { await ml.jobWizardCommon.advanceToPickFieldsSection(); await ml.testExecution.logTestStep('job cloning pre-fills field and aggregation'); - await ml.jobWizardCommon.assertAggAndFieldInputExists(); await ml.jobWizardCommon.assertAggAndFieldSelection([aggAndFieldIdentifier]); await ml.jobWizardCommon.assertAnomalyChartExists('LINE'); diff --git a/x-pack/test/functional/apps/ml/data_frame_analytics/types.ts b/x-pack/test/functional/apps/ml/common/types.ts similarity index 100% rename from x-pack/test/functional/apps/ml/data_frame_analytics/types.ts rename to x-pack/test/functional/apps/ml/common/types.ts diff --git a/x-pack/test/functional/apps/ml/data_frame_analytics/classification_creation.ts b/x-pack/test/functional/apps/ml/data_frame_analytics/classification_creation.ts index df6d53974d8766..4fdf99f8aaf5b5 100644 --- a/x-pack/test/functional/apps/ml/data_frame_analytics/classification_creation.ts +++ b/x-pack/test/functional/apps/ml/data_frame_analytics/classification_creation.ts @@ -7,7 +7,7 @@ import type { AnalyticsTableRowDetails } from '../../../services/ml/data_frame_analytics_table'; import type { FtrProviderContext } from '../../../ftr_provider_context'; -import type { FieldStatsType } from './types'; +import type { FieldStatsType } from '../common/types'; export default function ({ getService }: FtrProviderContext) { const esArchiver = getService('esArchiver'); diff --git a/x-pack/test/functional/apps/ml/data_frame_analytics/classification_creation_saved_search.ts b/x-pack/test/functional/apps/ml/data_frame_analytics/classification_creation_saved_search.ts index 872ffb2294af9e..6eba57e50f448a 100644 --- a/x-pack/test/functional/apps/ml/data_frame_analytics/classification_creation_saved_search.ts +++ b/x-pack/test/functional/apps/ml/data_frame_analytics/classification_creation_saved_search.ts @@ -7,7 +7,7 @@ import type { AnalyticsTableRowDetails } from '../../../services/ml/data_frame_analytics_table'; import type { FtrProviderContext } from '../../../ftr_provider_context'; -import type { FieldStatsType } from './types'; +import type { FieldStatsType } from '../common/types'; export default function ({ getService }: FtrProviderContext) { const esArchiver = getService('esArchiver'); diff --git a/x-pack/test/functional/apps/ml/data_frame_analytics/outlier_detection_creation.ts b/x-pack/test/functional/apps/ml/data_frame_analytics/outlier_detection_creation.ts index 576fcc259315d4..752b6440926150 100644 --- a/x-pack/test/functional/apps/ml/data_frame_analytics/outlier_detection_creation.ts +++ b/x-pack/test/functional/apps/ml/data_frame_analytics/outlier_detection_creation.ts @@ -7,7 +7,7 @@ import type { FtrProviderContext } from '../../../ftr_provider_context'; import type { AnalyticsTableRowDetails } from '../../../services/ml/data_frame_analytics_table'; -import type { FieldStatsType } from './types'; +import type { FieldStatsType } from '../common/types'; export default function ({ getService }: FtrProviderContext) { const esArchiver = getService('esArchiver'); diff --git a/x-pack/test/functional/apps/ml/data_frame_analytics/regression_creation.ts b/x-pack/test/functional/apps/ml/data_frame_analytics/regression_creation.ts index 4f89d5875165d8..cda7617cc18f37 100644 --- a/x-pack/test/functional/apps/ml/data_frame_analytics/regression_creation.ts +++ b/x-pack/test/functional/apps/ml/data_frame_analytics/regression_creation.ts @@ -7,7 +7,7 @@ import type { FtrProviderContext } from '../../../ftr_provider_context'; import type { AnalyticsTableRowDetails } from '../../../services/ml/data_frame_analytics_table'; -import type { FieldStatsType } from './types'; +import type { FieldStatsType } from '../common/types'; export default function ({ getService }: FtrProviderContext) { const esArchiver = getService('esArchiver'); diff --git a/x-pack/test/functional/services/ml/data_frame_analytics_creation.ts b/x-pack/test/functional/services/ml/data_frame_analytics_creation.ts index c20e73d0f51f8d..97d8059a85e8b3 100644 --- a/x-pack/test/functional/services/ml/data_frame_analytics_creation.ts +++ b/x-pack/test/functional/services/ml/data_frame_analytics_creation.ts @@ -16,13 +16,13 @@ import { FtrProviderContext } from '../../ftr_provider_context'; import type { CanvasElementColorStats } from '../canvas_element'; import type { MlCommonUI } from './common_ui'; import type { MlApi } from './api'; -import type { MlFieldStatsFlyout } from './field_stats_flyout'; +import type { MlCommonFieldStatsFlyout } from './field_stats_flyout'; export function MachineLearningDataFrameAnalyticsCreationProvider( { getPageObject, getService }: FtrProviderContext, mlCommonUI: MlCommonUI, mlApi: MlApi, - mlFieldStatsFlyout: MlFieldStatsFlyout + mlCommonFieldStatsFlyout: MlCommonFieldStatsFlyout ) { const headerPage = getPageObject('header'); const commonPage = getPageObject('common'); @@ -209,7 +209,7 @@ export function MachineLearningDataFrameAnalyticsCreationProvider( fieldType: 'keyword' | 'date' | 'number', expectedContent?: string[] ) { - await mlFieldStatsFlyout.assertFieldStatFlyoutContentFromTrigger( + await mlCommonFieldStatsFlyout.assertFieldStatFlyoutContentFromTrigger( 'mlAnalyticsCreateJobWizardIncludesSelect', fieldName, fieldType, @@ -275,7 +275,7 @@ export function MachineLearningDataFrameAnalyticsCreationProvider( fieldType: 'keyword' | 'date' | 'number', expectedContent?: string[] ) { - await mlFieldStatsFlyout.assertFieldStatFlyoutContentFromComboBoxTrigger( + await mlCommonFieldStatsFlyout.assertFieldStatFlyoutContentFromComboBoxTrigger( 'mlAnalyticsCreateJobWizardDependentVariableSelect loaded', fieldName, fieldType, @@ -288,7 +288,7 @@ export function MachineLearningDataFrameAnalyticsCreationProvider( fieldType: 'keyword' | 'date' | 'number', expectedContent: string[] ) { - await mlFieldStatsFlyout.assertTopValuesContent(fieldName, fieldType, expectedContent); + await mlCommonFieldStatsFlyout.assertTopValuesContent(fieldName, fieldType, expectedContent); }, async assertDependentVariableInputMissing() { diff --git a/x-pack/test/functional/services/ml/field_stats_flyout.ts b/x-pack/test/functional/services/ml/field_stats_flyout.ts index 826af0a4e31c79..cca2db70b59140 100644 --- a/x-pack/test/functional/services/ml/field_stats_flyout.ts +++ b/x-pack/test/functional/services/ml/field_stats_flyout.ts @@ -9,7 +9,7 @@ import { ProvidedType } from '@kbn/test'; import expect from '@kbn/expect'; import { FtrProviderContext } from '../../ftr_provider_context'; -export type MlFieldStatsFlyout = ProvidedType; +export type MlCommonFieldStatsFlyout = ProvidedType; export function MachineLearningFieldStatsFlyoutProvider({ getService }: FtrProviderContext) { const browser = getService('browser'); diff --git a/x-pack/test/functional/services/ml/index.ts b/x-pack/test/functional/services/ml/index.ts index ca9698b7813e53..7cab6d61fa792d 100644 --- a/x-pack/test/functional/services/ml/index.ts +++ b/x-pack/test/functional/services/ml/index.ts @@ -115,11 +115,26 @@ export function MachineLearningProvider(context: FtrProviderContext) { const jobTable = MachineLearningJobTableProvider(context, commonUI, customUrls); const jobTypeSelection = MachineLearningJobTypeSelectionProvider(context); const jobWizardAdvanced = MachineLearningJobWizardAdvancedProvider(context, commonUI); - const jobWizardCategorization = MachineLearningJobWizardCategorizationProvider(context); - const jobWizardCommon = MachineLearningJobWizardCommonProvider(context, commonUI, customUrls); - const jobWizardMultiMetric = MachineLearningJobWizardMultiMetricProvider(context); - const jobWizardPopulation = MachineLearningJobWizardPopulationProvider(context); + const jobWizardCategorization = MachineLearningJobWizardCategorizationProvider( + context, + commonFieldStatsFlyout + ); + const jobWizardCommon = MachineLearningJobWizardCommonProvider( + context, + commonUI, + customUrls, + commonFieldStatsFlyout + ); const jobWizardGeo = MachineLearningJobWizardGeoProvider(context); + const jobWizardMultiMetric = MachineLearningJobWizardMultiMetricProvider( + context, + commonFieldStatsFlyout + ); + const jobWizardPopulation = MachineLearningJobWizardPopulationProvider( + context, + commonFieldStatsFlyout + ); + const lensVisualizations = MachineLearningLensVisualizationsProvider(context, commonUI); const navigation = MachineLearningNavigationProvider(context); const overviewPage = MachineLearningOverviewPageProvider(context); @@ -178,9 +193,9 @@ export function MachineLearningProvider(context: FtrProviderContext) { jobWizardAdvanced, jobWizardCategorization, jobWizardCommon, + jobWizardGeo, jobWizardMultiMetric, jobWizardPopulation, - jobWizardGeo, lensVisualizations, mlNodesPanel, navigation, diff --git a/x-pack/test/functional/services/ml/job_wizard_categorization.ts b/x-pack/test/functional/services/ml/job_wizard_categorization.ts index 997720cc45d23a..a646106c422535 100644 --- a/x-pack/test/functional/services/ml/job_wizard_categorization.ts +++ b/x-pack/test/functional/services/ml/job_wizard_categorization.ts @@ -8,9 +8,13 @@ import expect from '@kbn/expect'; import { CATEGORY_EXAMPLES_VALIDATION_STATUS } from '@kbn/ml-plugin/common/constants/categorization_job'; -import { FtrProviderContext } from '../../ftr_provider_context'; +import type { FtrProviderContext } from '../../ftr_provider_context'; +import type { MlCommonFieldStatsFlyout } from './field_stats_flyout'; -export function MachineLearningJobWizardCategorizationProvider({ getService }: FtrProviderContext) { +export function MachineLearningJobWizardCategorizationProvider( + { getService }: FtrProviderContext, + mlCommonFieldStatsFlyout: MlCommonFieldStatsFlyout +) { const comboBox = getService('comboBox'); const testSubjects = getService('testSubjects'); @@ -31,6 +35,19 @@ export function MachineLearningJobWizardCategorizationProvider({ getService }: F await testSubjects.existOrFail('mlCategorizationFieldNameSelect > comboBoxInput'); }, + async assertFieldStatFlyoutContentFromCategorizationFieldInputTrigger( + fieldName: string, + fieldType: 'keyword' | 'date' | 'number', + expectedTopValues?: string[] + ) { + await mlCommonFieldStatsFlyout.assertFieldStatFlyoutContentFromComboBoxTrigger( + 'mlCategorizationFieldNameSelect', + fieldName, + fieldType, + expectedTopValues + ); + }, + async selectCategorizationField(identifier: string) { await comboBox.set('mlCategorizationFieldNameSelect > comboBoxInput', identifier); diff --git a/x-pack/test/functional/services/ml/job_wizard_common.ts b/x-pack/test/functional/services/ml/job_wizard_common.ts index 13b941633be101..5f3c685467c08f 100644 --- a/x-pack/test/functional/services/ml/job_wizard_common.ts +++ b/x-pack/test/functional/services/ml/job_wizard_common.ts @@ -7,9 +7,10 @@ import expect from '@kbn/expect'; -import { FtrProviderContext } from '../../ftr_provider_context'; -import { MlCommonUI } from './common_ui'; -import { MlCustomUrls } from './custom_urls'; +import type { FtrProviderContext } from '../../ftr_provider_context'; +import type { MlCommonUI } from './common_ui'; +import type { MlCustomUrls } from './custom_urls'; +import type { MlCommonFieldStatsFlyout } from './field_stats_flyout'; export interface SectionOptions { withAdvancedSection: boolean; @@ -18,7 +19,8 @@ export interface SectionOptions { export function MachineLearningJobWizardCommonProvider( { getService }: FtrProviderContext, mlCommonUI: MlCommonUI, - customUrls: MlCustomUrls + customUrls: MlCustomUrls, + mlCommonFieldStatsFlyout: MlCommonFieldStatsFlyout ) { const comboBox = getService('comboBox'); const retry = getService('retry'); @@ -99,6 +101,19 @@ export function MachineLearningJobWizardCommonProvider( await testSubjects.existOrFail('mlJobWizardAggSelection > comboBoxInput'); }, + async assertFieldStatFlyoutContentFromAggSelectionInputTrigger( + fieldName: string, + fieldType: 'keyword' | 'date' | 'number', + expectedTopValuesContent: string[] + ) { + await mlCommonFieldStatsFlyout.assertFieldStatFlyoutContentFromComboBoxTrigger( + 'mlJobWizardAggSelection', + fieldName, + fieldType, + expectedTopValuesContent + ); + }, + async assertAggAndFieldSelection(expectedIdentifier: string[]) { const comboBoxSelectedOptions = await comboBox.getComboBoxSelectedOptions( 'mlJobWizardAggSelection > comboBoxInput' @@ -416,6 +431,19 @@ export function MachineLearningJobWizardCommonProvider( await testSubjects.existOrFail('mlInfluencerSelect > comboBoxInput'); }, + async assertFieldStatFlyoutContentFromInfluencerInputTrigger( + fieldName: string, + fieldType: 'keyword' | 'date' | 'number', + expectedTopValuesContent?: string[] + ) { + await mlCommonFieldStatsFlyout.assertFieldStatFlyoutContentFromComboBoxTrigger( + 'mlInfluencerSelect', + fieldName, + fieldType, + expectedTopValuesContent + ); + }, + async getSelectedInfluencers(): Promise { return await comboBox.getComboBoxSelectedOptions('mlInfluencerSelect > comboBoxInput'); }, diff --git a/x-pack/test/functional/services/ml/job_wizard_multi_metric.ts b/x-pack/test/functional/services/ml/job_wizard_multi_metric.ts index d60a5b67c43122..f5c347ad697b2f 100644 --- a/x-pack/test/functional/services/ml/job_wizard_multi_metric.ts +++ b/x-pack/test/functional/services/ml/job_wizard_multi_metric.ts @@ -7,9 +7,13 @@ import expect from '@kbn/expect'; -import { FtrProviderContext } from '../../ftr_provider_context'; +import type { FtrProviderContext } from '../../ftr_provider_context'; +import type { MlCommonFieldStatsFlyout } from './field_stats_flyout'; -export function MachineLearningJobWizardMultiMetricProvider({ getService }: FtrProviderContext) { +export function MachineLearningJobWizardMultiMetricProvider( + { getService }: FtrProviderContext, + mlCommonFieldStatsFlyout: MlCommonFieldStatsFlyout +) { const comboBox = getService('comboBox'); const testSubjects = getService('testSubjects'); @@ -18,6 +22,19 @@ export function MachineLearningJobWizardMultiMetricProvider({ getService }: FtrP await testSubjects.existOrFail('mlSplitFieldSelect > comboBoxInput'); }, + async assertFieldStatFlyoutContentFromSplitFieldInputTrigger( + fieldName: string, + fieldType: 'keyword' | 'date' | 'number', + expectedTopValues?: string[] + ) { + await mlCommonFieldStatsFlyout.assertFieldStatFlyoutContentFromComboBoxTrigger( + 'mlSplitFieldSelect', + fieldName, + fieldType, + expectedTopValues + ); + }, + async assertSplitFieldSelection(expectedIdentifier: string[]) { const comboBoxSelectedOptions = await comboBox.getComboBoxSelectedOptions( 'mlSplitFieldSelect > comboBoxInput' diff --git a/x-pack/test/functional/services/ml/job_wizard_population.ts b/x-pack/test/functional/services/ml/job_wizard_population.ts index fd37c3d7869202..418369bbf905f7 100644 --- a/x-pack/test/functional/services/ml/job_wizard_population.ts +++ b/x-pack/test/functional/services/ml/job_wizard_population.ts @@ -7,9 +7,13 @@ import expect from '@kbn/expect'; -import { FtrProviderContext } from '../../ftr_provider_context'; +import type { FtrProviderContext } from '../../ftr_provider_context'; +import type { MlCommonFieldStatsFlyout } from './field_stats_flyout'; -export function MachineLearningJobWizardPopulationProvider({ getService }: FtrProviderContext) { +export function MachineLearningJobWizardPopulationProvider( + { getService }: FtrProviderContext, + mlCommonFieldStatsFlyout: MlCommonFieldStatsFlyout +) { const comboBox = getService('comboBox'); const testSubjects = getService('testSubjects'); @@ -18,6 +22,19 @@ export function MachineLearningJobWizardPopulationProvider({ getService }: FtrPr await testSubjects.existOrFail('mlPopulationSplitFieldSelect > comboBoxInput'); }, + async assertFieldStatFlyoutContentFromPopulationFieldInputTrigger( + fieldName: string, + fieldType: 'keyword' | 'date' | 'number', + expectedTopValues?: string[] + ) { + await mlCommonFieldStatsFlyout.assertFieldStatFlyoutContentFromComboBoxTrigger( + 'mlPopulationSplitFieldSelect', + fieldName, + fieldType, + expectedTopValues + ); + }, + async assertPopulationFieldSelection(expectedIdentifier: string[]) { const comboBoxSelectedOptions = await comboBox.getComboBoxSelectedOptions( 'mlPopulationSplitFieldSelect > comboBoxInput'