[8.4] [ML] Data Visualizer: Add functional tests for pinned filters (#138539) (#138738)

* [ML] Data Visualizer: Add functional tests for pinned filters (#138539)

* [ML] Add test

* [ML] Remove sample log, fix lucene

Co-authored-by: Kibana Machine <42973632+kibanamachine@users.noreply.github.com>
(cherry picked from commit 6fc0ffa3d4)

* Add time picker to absolute range so it shows

* Fix navigation issue with Discover hard refresh

Co-authored-by: Quynh Nguyen <43350163+qn895@users.noreply.github.com>
Co-authored-by: Quynh Nguyen <quynh.nguyen@elastic.co>
This commit is contained in:
Kibana Machine 2022-08-17 11:29:54 -04:00 committed by GitHub
parent 9b7dce129a
commit 0f61496666
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
4 changed files with 156 additions and 1 deletions

View file

@ -33,6 +33,7 @@ export default function ({ getService, loadTestFile }: FtrProviderContext) {
});
loadTestFile(require.resolve('./index_data_visualizer'));
loadTestFile(require.resolve('./index_data_visualizer_filters'));
loadTestFile(require.resolve('./index_data_visualizer_grid_in_discover'));
loadTestFile(require.resolve('./index_data_visualizer_grid_in_dashboard'));
loadTestFile(require.resolve('./index_data_visualizer_actions_panel'));

View file

@ -0,0 +1,143 @@
/*
* Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one
* or more contributor license agreements. Licensed under the Elastic License
* 2.0; you may not use this file except in compliance with the Elastic License
* 2.0.
*/
import { FtrProviderContext } from '../../../ftr_provider_context';
import {
farequoteKQLFiltersSearchTestData,
farequoteLuceneFiltersSearchTestData,
farequoteDataViewTestData,
} from './index_test_data';
import { TestData } from './types';
const PINNED_FILTER = {
key: 'type.keyword',
value: 'farequote',
enabled: true,
pinned: true,
negated: false,
};
export default function ({ getService, getPageObjects }: FtrProviderContext) {
const esArchiver = getService('esArchiver');
const ml = getService('ml');
const PageObjects = getPageObjects(['common', 'discover', 'timePicker', 'settings', 'header']);
const filterBar = getService('filterBar');
const startTime = 'Jan 1, 2016 @ 00:00:00.000';
const endTime = 'Nov 1, 2020 @ 00:00:00.000';
function runTests(testData: TestData) {
afterEach(async function () {
await filterBar.removeFilter(PINNED_FILTER.key);
});
it(`retains pinned filters from other plugins`, async () => {
await ml.navigation.navigateToDiscoverViaAppsMenu();
await ml.dashboardEmbeddables.selectDiscoverIndexPattern('ft_farequote');
await PageObjects.timePicker.setAbsoluteRange(startTime, endTime);
await filterBar.addFilter(PINNED_FILTER.key, 'is', PINNED_FILTER.value);
await filterBar.toggleFilterPinned(PINNED_FILTER.key);
await PageObjects.header.waitUntilLoadingHasFinished();
await ml.testExecution.logTestStep(`${testData.suiteTitle} navigates to ML`);
await ml.navigation.navigateToMlViaAppsMenu();
await ml.navigation.navigateToDataVisualizer();
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
);
if (Array.isArray(testData.expected?.filters)) {
await PageObjects.header.waitUntilLoadingHasFinished();
for (const filter of testData.expected?.filters) {
await ml.dataVisualizerIndexBased.assertFilterBarFilterContent({
key: filter.key,
value: filter.value,
enabled: true,
pinned: false,
negated: false,
});
}
}
await ml.dataVisualizerIndexBased.assertFilterBarFilterContent(PINNED_FILTER);
});
it(`retains pinned filters to other plugins`, async () => {
await ml.testExecution.logTestStep(`${testData.suiteTitle} navigates to ML`);
await ml.navigation.navigateToDataVisualizer();
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 PageObjects.header.waitUntilLoadingHasFinished();
await ml.testExecution.logTestStep(`${testData.suiteTitle} adds a pinned filter`);
await filterBar.addFilter(PINNED_FILTER.key, 'is', PINNED_FILTER.value);
await filterBar.toggleFilterPinned(PINNED_FILTER.key);
await PageObjects.header.waitUntilLoadingHasFinished();
await ml.testExecution.logTestStep(`${testData.suiteTitle} navigates to Discover`);
await ml.navigation.navigateToDiscoverViaAppsMenu();
await PageObjects.timePicker.setAbsoluteRange(startTime, endTime);
await PageObjects.header.waitUntilLoadingHasFinished();
await ml.dataVisualizerIndexBased.assertFilterBarFilterContent(PINNED_FILTER);
});
}
describe('data visualizer with pinned global filters', function () {
before(async function () {
await esArchiver.loadIfNeeded('x-pack/test/functional/es_archives/ml/farequote');
await ml.testResources.createIndexPatternIfNeeded('ft_farequote', '@timestamp');
await ml.testResources.createSavedSearchFarequoteFilterAndLuceneIfNeeded();
await ml.testResources.createSavedSearchFarequoteFilterAndKueryIfNeeded();
await ml.securityUI.loginAsMlPowerUser();
});
after(async function () {
await ml.testResources.deleteSavedSearches();
await ml.testResources.deleteIndexPatternByTitle('ft_farequote');
});
describe(`with ${farequoteDataViewTestData.suiteTitle}`, function () {
runTests(farequoteDataViewTestData);
});
describe(`with ${farequoteLuceneFiltersSearchTestData.suiteTitle}`, function () {
runTests(farequoteLuceneFiltersSearchTestData);
});
describe(`with ${farequoteKQLFiltersSearchTestData.suiteTitle}`, function () {
runTests(farequoteKQLFiltersSearchTestData);
});
});
}

View file

@ -17,6 +17,7 @@ import {
farequoteLuceneSearchTestData,
sampleLogTestData,
} from './index_test_data';
export default function ({ getService, getPageObjects }: FtrProviderContext) {
const esArchiver = getService('esArchiver');
const PageObjects = getPageObjects(['common', 'discover', 'timePicker', 'settings']);

View file

@ -17,7 +17,7 @@ export function MachineLearningNavigationProvider({
const browser = getService('browser');
const retry = getService('retry');
const testSubjects = getService('testSubjects');
const PageObjects = getPageObjects(['common', 'header']);
const PageObjects = getPageObjects(['common', 'header', 'discover']);
return {
async navigateToMl() {
@ -45,6 +45,16 @@ export function MachineLearningNavigationProvider({
});
},
async navigateToDiscoverViaAppsMenu() {
await retry.tryForTime(60 * 1000, async () => {
await appsMenu.clickLink('Discover');
await testSubjects.existOrFail('discover-dataView-switch-link', { timeout: 5000 });
if (await testSubjects.exists('dataViewPickerTourLink', { timeout: 1000 })) {
await testSubjects.click('dataViewPickerTourLink');
}
});
},
async navigateToStackManagementViaAppsMenu() {
await retry.tryForTime(60 * 1000, async () => {
await appsMenu.clickLink('Stack Management');