mirror of
https://github.com/elastic/kibana.git
synced 2025-04-23 09:19:04 -04:00
* [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:
parent
9b7dce129a
commit
0f61496666
4 changed files with 156 additions and 1 deletions
|
@ -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'));
|
||||
|
|
|
@ -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);
|
||||
});
|
||||
});
|
||||
}
|
|
@ -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']);
|
||||
|
|
|
@ -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');
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue