From 019b5f3eca83fa968415a36d9a59ad661109c547 Mon Sep 17 00:00:00 2001 From: Melissa Alvarez Date: Mon, 3 Aug 2020 14:49:12 -0400 Subject: [PATCH] adds edit test service --- .../classification_creation.ts | 33 +++++----- .../outlier_detection_creation.ts | 33 +++++----- .../regression_creation.ts | 33 +++++----- .../ml/data_frame_analytics_creation.ts | 49 -------------- .../services/ml/data_frame_analytics_edit.ts | 64 +++++++++++++++++++ .../services/ml/data_frame_analytics_table.ts | 6 +- x-pack/test/functional/services/ml/index.ts | 7 ++ 7 files changed, 127 insertions(+), 98 deletions(-) create mode 100644 x-pack/test/functional/services/ml/data_frame_analytics_edit.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 18755993210f6e..4f5780562ae49a 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 @@ -168,31 +168,34 @@ export default function ({ getService }: FtrProviderContext) { ); }); + it('displays details for the created job in the analytics table', async () => { + await ml.dataFrameAnalyticsTable.assertAnalyticsRowFields(testData.jobId, { + id: testData.jobId, + description: testData.jobDescription, + sourceIndex: testData.source, + destinationIndex: testData.destinationIndex, + type: testData.expected.row.type, + status: testData.expected.row.status, + progress: testData.expected.row.progress, + }); + }); + it('should open the edit form for the created job in the analytics table', async () => { - await ml.dataFrameAnalyticsTable.filterWithSearchString(testData.jobId); - const rows = await ml.dataFrameAnalyticsTable.parseAnalyticsTable(); - const filteredRows = rows.filter((row) => row.id === testData.jobId); - expect(filteredRows).to.have.length( - 1, - `Filtered analytics table should have 1 row for job id '${testData.jobId}' (got matching items '${filteredRows}')` - ); - if (filteredRows?.length) { - await ml.dataFrameAnalyticsTable.openEditFlyout(); - } + await ml.dataFrameAnalyticsTable.openEditFlyout(testData.jobId); }); it('should input the description in the edit form', async () => { - await ml.dataFrameAnalyticsCreation.assertJobDescriptionEditInputExists(); - await ml.dataFrameAnalyticsCreation.setJobDescriptionEdit(editedDescription); + await ml.dataFrameAnalyticsEdit.assertJobDescriptionEditInputExists(); + await ml.dataFrameAnalyticsEdit.setJobDescriptionEdit(editedDescription); }); it('should input the model memory limit in the edit form', async () => { - await ml.dataFrameAnalyticsCreation.assertJobMmlEditInputExists(); - await ml.dataFrameAnalyticsCreation.setJobMmlEdit('21mb'); + await ml.dataFrameAnalyticsEdit.assertJobMmlEditInputExists(); + await ml.dataFrameAnalyticsEdit.setJobMmlEdit('21mb'); }); it('should submit the edit job form', async () => { - await ml.dataFrameAnalyticsCreation.updateAnalyticsJob(); + await ml.dataFrameAnalyticsEdit.updateAnalyticsJob(); }); it('displays details for the created job in the analytics table', async () => { 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 41e145060a3755..ca1873ab4e1c6c 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 @@ -186,31 +186,34 @@ export default function ({ getService }: FtrProviderContext) { ); }); + it('displays details for the created job in the analytics table', async () => { + await ml.dataFrameAnalyticsTable.assertAnalyticsRowFields(testData.jobId, { + id: testData.jobId, + description: testData.jobDescription, + sourceIndex: testData.source, + destinationIndex: testData.destinationIndex, + type: testData.expected.row.type, + status: testData.expected.row.status, + progress: testData.expected.row.progress, + }); + }); + it('should open the edit form for the created job in the analytics table', async () => { - await ml.dataFrameAnalyticsTable.filterWithSearchString(testData.jobId); - const rows = await ml.dataFrameAnalyticsTable.parseAnalyticsTable(); - const filteredRows = rows.filter((row) => row.id === testData.jobId); - expect(filteredRows).to.have.length( - 1, - `Filtered analytics table should have 1 row for job id '${testData.jobId}' (got matching items '${filteredRows}')` - ); - if (filteredRows?.length) { - await ml.dataFrameAnalyticsTable.openEditFlyout(); - } + await ml.dataFrameAnalyticsTable.openEditFlyout(testData.jobId); }); it('should input the description in the edit form', async () => { - await ml.dataFrameAnalyticsCreation.assertJobDescriptionEditInputExists(); - await ml.dataFrameAnalyticsCreation.setJobDescriptionEdit(editedDescription); + await ml.dataFrameAnalyticsEdit.assertJobDescriptionEditInputExists(); + await ml.dataFrameAnalyticsEdit.setJobDescriptionEdit(editedDescription); }); it('should input the model memory limit in the edit form', async () => { - await ml.dataFrameAnalyticsCreation.assertJobMmlEditInputExists(); - await ml.dataFrameAnalyticsCreation.setJobMmlEdit('21mb'); + await ml.dataFrameAnalyticsEdit.assertJobMmlEditInputExists(); + await ml.dataFrameAnalyticsEdit.setJobMmlEdit('21mb'); }); it('should submit the edit job form', async () => { - await ml.dataFrameAnalyticsCreation.updateAnalyticsJob(); + await ml.dataFrameAnalyticsEdit.updateAnalyticsJob(); }); it('displays details for the created job in the analytics table', async () => { 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 6ddff240e777eb..27284812c38e3b 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 @@ -168,31 +168,34 @@ export default function ({ getService }: FtrProviderContext) { ); }); + it('displays details for the created job in the analytics table', async () => { + await ml.dataFrameAnalyticsTable.assertAnalyticsRowFields(testData.jobId, { + id: testData.jobId, + description: testData.jobDescription, + sourceIndex: testData.source, + destinationIndex: testData.destinationIndex, + type: testData.expected.row.type, + status: testData.expected.row.status, + progress: testData.expected.row.progress, + }); + }); + it('should open the edit form for the created job in the analytics table', async () => { - await ml.dataFrameAnalyticsTable.filterWithSearchString(testData.jobId); - const rows = await ml.dataFrameAnalyticsTable.parseAnalyticsTable(); - const filteredRows = rows.filter((row) => row.id === testData.jobId); - expect(filteredRows).to.have.length( - 1, - `Filtered analytics table should have 1 row for job id '${testData.jobId}' (got matching items '${filteredRows}')` - ); - if (filteredRows?.length) { - await ml.dataFrameAnalyticsTable.openEditFlyout(); - } + await ml.dataFrameAnalyticsTable.openEditFlyout(testData.jobId); }); it('should input the description in the edit form', async () => { - await ml.dataFrameAnalyticsCreation.assertJobDescriptionEditInputExists(); - await ml.dataFrameAnalyticsCreation.setJobDescriptionEdit(editedDescription); + await ml.dataFrameAnalyticsEdit.assertJobDescriptionEditInputExists(); + await ml.dataFrameAnalyticsEdit.setJobDescriptionEdit(editedDescription); }); it('should input the model memory limit in the edit form', async () => { - await ml.dataFrameAnalyticsCreation.assertJobMmlEditInputExists(); - await ml.dataFrameAnalyticsCreation.setJobMmlEdit('21mb'); + await ml.dataFrameAnalyticsEdit.assertJobMmlEditInputExists(); + await ml.dataFrameAnalyticsEdit.setJobMmlEdit('21mb'); }); it('should submit the edit job form', async () => { - await ml.dataFrameAnalyticsCreation.updateAnalyticsJob(); + await ml.dataFrameAnalyticsEdit.updateAnalyticsJob(); }); it('displays details for the created job in the analytics table', async () => { 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 f34e0f3e8ab5d3..a49febfe68f614 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 @@ -88,14 +88,6 @@ export function MachineLearningDataFrameAnalyticsCreationProvider( await testSubjects.existOrFail('mlDFAnalyticsJobCreationJobDescription'); }, - async assertJobDescriptionEditInputExists() { - await testSubjects.existOrFail('mlAnalyticsEditFlyoutDescriptionInput'); - }, - - async assertJobMmlEditInputExists() { - await testSubjects.existOrFail('mlAnalyticsEditFlyoutmodelMemoryLimitInput'); - }, - async assertJobIdValue(expectedValue: string) { const actualJobId = await testSubjects.getAttribute( 'mlAnalyticsCreateJobFlyoutJobIdInput', @@ -118,28 +110,6 @@ export function MachineLearningDataFrameAnalyticsCreationProvider( ); }, - async assertJobDescriptionEditValue(expectedValue: string) { - const actualJobDescription = await testSubjects.getAttribute( - 'mlAnalyticsEditFlyoutDescriptionInput', - 'value' - ); - expect(actualJobDescription).to.eql( - expectedValue, - `Job description edit should be '${expectedValue}' (got '${actualJobDescription}')` - ); - }, - - async assertJobMmlEditValue(expectedValue: string) { - const actualMml = await testSubjects.getAttribute( - 'mlAnalyticsEditFlyoutmodelMemoryLimitInput', - 'value' - ); - expect(actualMml).to.eql( - expectedValue, - `Job model memory limit edit should be '${expectedValue}' (got '${actualMml}')` - ); - }, - async setJobId(jobId: string) { await mlCommon.setValueWithChecks('mlAnalyticsCreateJobFlyoutJobIdInput', jobId, { clearWithKeyboard: true, @@ -154,20 +124,6 @@ export function MachineLearningDataFrameAnalyticsCreationProvider( await this.assertJobDescriptionValue(jobDescription); }, - async setJobDescriptionEdit(jobDescription: string) { - await mlCommon.setValueWithChecks('mlAnalyticsEditFlyoutDescriptionInput', jobDescription, { - clearWithKeyboard: true, - }); - await this.assertJobDescriptionEditValue(jobDescription); - }, - - async setJobMmlEdit(mml: string) { - await mlCommon.setValueWithChecks('mlAnalyticsEditFlyoutmodelMemoryLimitInput', mml, { - clearWithKeyboard: true, - }); - await this.assertJobMmlEditValue(mml); - }, - async assertSourceDataPreviewExists() { await testSubjects.existOrFail('mlAnalyticsCreationDataGrid loaded', { timeout: 5000 }); }, @@ -525,11 +481,6 @@ export function MachineLearningDataFrameAnalyticsCreationProvider( await testSubjects.existOrFail('mlAnalyticsCreateJobWizardCreateButton'); }, - async updateAnalyticsJob() { - await testSubjects.existOrFail('analyticsEditFlyoutUpdateButton'); - await testSubjects.click('analyticsEditFlyoutUpdateButton'); - }, - async isCreateButtonDisabled() { const isEnabled = await testSubjects.isEnabled('mlAnalyticsCreateJobWizardCreateButton'); return !isEnabled; diff --git a/x-pack/test/functional/services/ml/data_frame_analytics_edit.ts b/x-pack/test/functional/services/ml/data_frame_analytics_edit.ts new file mode 100644 index 00000000000000..ea803415f77aeb --- /dev/null +++ b/x-pack/test/functional/services/ml/data_frame_analytics_edit.ts @@ -0,0 +1,64 @@ +/* + * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one + * or more contributor license agreements. Licensed under the Elastic License; + * you may not use this file except in compliance with the Elastic License. + */ +import expect from '@kbn/expect'; + +import { FtrProviderContext } from '../../ftr_provider_context'; +import { MlCommon } from './common'; +import { MlApi } from './api'; + +export function MachineLearningDataFrameAnalyticsEditProvider( + { getService }: FtrProviderContext, + mlCommon: MlCommon, + mlApi: MlApi +) { + const testSubjects = getService('testSubjects'); + + return { + async assertJobDescriptionEditInputExists() { + await testSubjects.existOrFail('mlAnalyticsEditFlyoutDescriptionInput'); + }, + async assertJobDescriptionEditValue(expectedValue: string) { + const actualJobDescription = await testSubjects.getAttribute( + 'mlAnalyticsEditFlyoutDescriptionInput', + 'value' + ); + expect(actualJobDescription).to.eql( + expectedValue, + `Job description edit should be '${expectedValue}' (got '${actualJobDescription}')` + ); + }, + async assertJobMmlEditInputExists() { + await testSubjects.existOrFail('mlAnalyticsEditFlyoutmodelMemoryLimitInput'); + }, + async assertJobMmlEditValue(expectedValue: string) { + const actualMml = await testSubjects.getAttribute( + 'mlAnalyticsEditFlyoutmodelMemoryLimitInput', + 'value' + ); + expect(actualMml).to.eql( + expectedValue, + `Job model memory limit edit should be '${expectedValue}' (got '${actualMml}')` + ); + }, + async setJobDescriptionEdit(jobDescription: string) { + await mlCommon.setValueWithChecks('mlAnalyticsEditFlyoutDescriptionInput', jobDescription, { + clearWithKeyboard: true, + }); + await this.assertJobDescriptionEditValue(jobDescription); + }, + + async setJobMmlEdit(mml: string) { + await mlCommon.setValueWithChecks('mlAnalyticsEditFlyoutmodelMemoryLimitInput', mml, { + clearWithKeyboard: true, + }); + await this.assertJobMmlEditValue(mml); + }, + async updateAnalyticsJob() { + await testSubjects.existOrFail('analyticsEditFlyoutUpdateButton'); + await testSubjects.click('analyticsEditFlyoutUpdateButton'); + }, + }; +} diff --git a/x-pack/test/functional/services/ml/data_frame_analytics_table.ts b/x-pack/test/functional/services/ml/data_frame_analytics_table.ts index e9026ecfaeebdf..cff2eb402630c0 100644 --- a/x-pack/test/functional/services/ml/data_frame_analytics_table.ts +++ b/x-pack/test/functional/services/ml/data_frame_analytics_table.ts @@ -88,10 +88,8 @@ export function MachineLearningDataFrameAnalyticsTableProvider({ getService }: F await testSubjects.existOrFail('mlAnalyticsJobViewButton'); } - public async openEditFlyout() { - await testSubjects.existOrFail('euiCollapsedItemActionsButton', { timeout: 5000 }); - await testSubjects.click('euiCollapsedItemActionsButton'); - await testSubjects.existOrFail('mlAnalyticsJobEditButton', { timeout: 5000 }); + public async openEditFlyout(analyticsId: string) { + await this.openRowActions(analyticsId); await testSubjects.click('mlAnalyticsJobEditButton'); await testSubjects.existOrFail('analyticsEditFlyout', { timeout: 5000 }); } diff --git a/x-pack/test/functional/services/ml/index.ts b/x-pack/test/functional/services/ml/index.ts index fbf31e40a242a2..f112109c1b9130 100644 --- a/x-pack/test/functional/services/ml/index.ts +++ b/x-pack/test/functional/services/ml/index.ts @@ -13,6 +13,7 @@ import { MachineLearningCommonProvider } from './common'; import { MachineLearningCustomUrlsProvider } from './custom_urls'; import { MachineLearningDataFrameAnalyticsProvider } from './data_frame_analytics'; import { MachineLearningDataFrameAnalyticsCreationProvider } from './data_frame_analytics_creation'; +import { MachineLearningDataFrameAnalyticsEditProvider } from './data_frame_analytics_edit'; import { MachineLearningDataFrameAnalyticsTableProvider } from './data_frame_analytics_table'; import { MachineLearningDataVisualizerProvider } from './data_visualizer'; import { MachineLearningDataVisualizerFileBasedProvider } from './data_visualizer_file_based'; @@ -47,6 +48,11 @@ export function MachineLearningProvider(context: FtrProviderContext) { common, api ); + const dataFrameAnalyticsEdit = MachineLearningDataFrameAnalyticsEditProvider( + context, + common, + api + ); const dataFrameAnalyticsTable = MachineLearningDataFrameAnalyticsTableProvider(context); const dataVisualizer = MachineLearningDataVisualizerProvider(context); const dataVisualizerFileBased = MachineLearningDataVisualizerFileBasedProvider(context, common); @@ -76,6 +82,7 @@ export function MachineLearningProvider(context: FtrProviderContext) { customUrls, dataFrameAnalytics, dataFrameAnalyticsCreation, + dataFrameAnalyticsEdit, dataFrameAnalyticsTable, dataVisualizer, dataVisualizerFileBased,