From fbd38a7b22589580d4f65389d7b8c4b0b483979d Mon Sep 17 00:00:00 2001 From: John Dorlus Date: Tue, 12 Apr 2022 21:34:41 -0400 Subject: [PATCH] Paramaterized Discover tests (#129684) * Migrated Discover visualize tests to use CCS. * Fixed. * Forgot to add the config file to the functional tests command, * Fixed nits in PR. * Removed unused references. * Removed unused references. * Removed test file that was removed in the merge. * Added saved_queries test to run when CCS is enabled and put test that wasn't supposed to be removed back. * Used conditional in index pattern. --- scripts/functional_tests.js | 2 +- .../apps/discover/_data_view_editor.ts | 22 +- .../apps/discover/_saved_queries.ts | 50 ++-- test/functional/apps/discover/index.ts | 73 +++--- .../config.ts => functional/config.ccs.ts} | 10 +- .../date_nested.json} | 0 .../{discover_ccs.json => ccs/discover.json} | 0 .../services/remote_es}/remote_es.ts | 2 +- .../services/remote_es}/remote_es_archiver.ts | 4 +- .../apps/discover/data_view_ccs.ts | 70 ------ test/functional_ccs/apps/discover/index.ts | 29 --- .../apps/discover/saved_queries_ccs.ts | 221 ------------------ test/functional_ccs/ftr_provider_context.ts | 13 -- test/functional_ccs/services/index.ts | 17 -- 14 files changed, 102 insertions(+), 411 deletions(-) rename test/{functional_ccs/config.ts => functional/config.ccs.ts} (80%) rename test/functional/fixtures/kbn_archiver/{date_nested_ccs.json => ccs/date_nested.json} (100%) rename test/functional/fixtures/kbn_archiver/{discover_ccs.json => ccs/discover.json} (100%) rename test/{functional_ccs/services => functional/services/remote_es}/remote_es.ts (92%) rename test/{functional_ccs/services => functional/services/remote_es}/remote_es_archiver.ts (85%) delete mode 100644 test/functional_ccs/apps/discover/data_view_ccs.ts delete mode 100644 test/functional_ccs/apps/discover/index.ts delete mode 100644 test/functional_ccs/apps/discover/saved_queries_ccs.ts delete mode 100644 test/functional_ccs/ftr_provider_context.ts delete mode 100644 test/functional_ccs/services/index.ts diff --git a/scripts/functional_tests.js b/scripts/functional_tests.js index b185bcb0ea5d0c..1e963660a1e03b 100644 --- a/scripts/functional_tests.js +++ b/scripts/functional_tests.js @@ -8,8 +8,8 @@ require('../src/setup_node_env'); require('@kbn/test').runTestsCli([ + require.resolve('../test/functional/config.ccs.ts'), require.resolve('../test/functional/config.js'), - require.resolve('../test/functional_ccs/config.ts'), require.resolve('../test/plugin_functional/config.ts'), require.resolve('../test/ui_capabilities/newsfeed_err/config.ts'), require.resolve('../test/new_visualize_flow/config.ts'), diff --git a/test/functional/apps/discover/_data_view_editor.ts b/test/functional/apps/discover/_data_view_editor.ts index c67964fddf93b3..8e0b42469dbbc4 100644 --- a/test/functional/apps/discover/_data_view_editor.ts +++ b/test/functional/apps/discover/_data_view_editor.ts @@ -14,10 +14,22 @@ export default function ({ getService, getPageObjects }: FtrProviderContext) { const kibanaServer = getService('kibanaServer'); const esArchiver = getService('esArchiver'); const security = getService('security'); + const config = getService('config'); const PageObjects = getPageObjects(['common', 'discover', 'header', 'timePicker']); + const defaultIndexPatternString = config.get('esTestCluster.ccs') + ? 'ftr-remote:logstash-*' + : 'logstash-*'; const defaultSettings = { - defaultIndex: 'logstash-*', + defaultIndex: defaultIndexPatternString, }; + const localArchiveDirectory = 'test/functional/fixtures/kbn_archiver/discover'; + const remoteArchiveDirectory = 'test/functional/fixtures/kbn_archiver/ccs/discover'; + const esNode = config.get('esTestCluster.ccs') + ? getService('remoteEsArchiver' as 'esArchiver') + : esArchiver; + const kbnDirectory = config.get('esTestCluster.ccs') + ? remoteArchiveDirectory + : localArchiveDirectory; const createDataView = async (dataViewName: string) => { await PageObjects.discover.clickIndexPatternActions(); @@ -32,9 +44,9 @@ export default function ({ getService, getPageObjects }: FtrProviderContext) { describe('discover integration with data view editor', function describeIndexTests() { before(async function () { await security.testUser.setRoles(['kibana_admin', 'test_logstash_reader']); - await esArchiver.loadIfNeeded('test/functional/fixtures/es_archiver/logstash_functional'); + await esNode.loadIfNeeded('test/functional/fixtures/es_archiver/logstash_functional'); await kibanaServer.savedObjects.clean({ types: ['saved-search', 'index-pattern'] }); - await kibanaServer.importExport.load('test/functional/fixtures/kbn_archiver/discover'); + await kibanaServer.importExport.load(kbnDirectory); await kibanaServer.uiSettings.replace(defaultSettings); await PageObjects.timePicker.setDefaultAbsoluteRangeViaUiSettings(); await PageObjects.common.navigateToApp('discover'); @@ -42,12 +54,12 @@ export default function ({ getService, getPageObjects }: FtrProviderContext) { after(async () => { await security.testUser.restoreDefaults(); - await kibanaServer.importExport.unload('test/functional/fixtures/kbn_archiver/discover'); + await kibanaServer.importExport.unload(kbnDirectory); await kibanaServer.savedObjects.clean({ types: ['saved-search', 'index-pattern'] }); }); it('allows creating a new data view', async function () { - const dataViewToCreate = 'logstash'; + const dataViewToCreate = config.get('esTestCluster.ccs') ? 'ftr-remote:logstash' : 'logstash'; await createDataView(dataViewToCreate); await PageObjects.header.waitUntilLoadingHasFinished(); await retry.waitForWithTimeout( diff --git a/test/functional/apps/discover/_saved_queries.ts b/test/functional/apps/discover/_saved_queries.ts index fd49a03413321a..79d49131df1387 100644 --- a/test/functional/apps/discover/_saved_queries.ts +++ b/test/functional/apps/discover/_saved_queries.ts @@ -13,7 +13,6 @@ import { FtrProviderContext } from '../../ftr_provider_context'; export default function ({ getService, getPageObjects }: FtrProviderContext) { const retry = getService('retry'); const log = getService('log'); - const esArchiver = getService('esArchiver'); const kibanaServer = getService('kibanaServer'); const PageObjects = getPageObjects(['common', 'discover', 'timePicker']); const browser = getService('browser'); @@ -21,9 +20,30 @@ export default function ({ getService, getPageObjects }: FtrProviderContext) { const queryBar = getService('queryBar'); const savedQueryManagementComponent = getService('savedQueryManagementComponent'); const testSubjects = getService('testSubjects'); + const config = getService('config'); + const localArchiveDirectories = { + nested: 'test/functional/fixtures/kbn_archiver/date_nested.json', + discover: 'test/functional/fixtures/kbn_archiver/discover.json', + }; + const remoteArchiveDirectories = { + nested: 'test/functional/fixtures/kbn_archiver/ccs/date_nested.json', + discover: 'test/functional/fixtures/kbn_archiver/ccs/discover.json', + }; + const logstashIndexPatternString = config.get('esTestCluster.ccs') + ? 'ftr-remote:logstash-*' + : 'logstash-*'; + const dateNestedIndexPattern = config.get('esTestCluster.ccs') + ? 'ftr-remote:date-nested' + : 'date-nested'; const defaultSettings = { - defaultIndex: 'logstash-*', + defaultIndex: logstashIndexPatternString, }; + const esNode = config.get('esTestCluster.ccs') + ? getService('remoteEsArchiver' as 'esArchiver') + : getService('esArchiver'); + const kbnArchives = config.get('esTestCluster.ccs') + ? remoteArchiveDirectories + : localArchiveDirectories; const from = 'Sep 20, 2015 @ 08:00:00.000'; const to = 'Sep 21, 2015 @ 08:00:00.000'; @@ -34,7 +54,7 @@ export default function ({ getService, getPageObjects }: FtrProviderContext) { log.debug('set up a query with filters to save'); await PageObjects.common.setTime({ from, to }); await PageObjects.common.navigateToApp('discover'); - await PageObjects.discover.selectIndexPattern('logstash-*'); + await PageObjects.discover.selectIndexPattern(logstashIndexPatternString); await retry.try(async function tryingForTime() { const hitCount = await PageObjects.discover.getHitCount(); expect(hitCount).to.be('4,731'); @@ -59,12 +79,10 @@ export default function ({ getService, getPageObjects }: FtrProviderContext) { log.debug('load kibana index with default index pattern'); await kibanaServer.savedObjects.clean({ types: ['search', 'index-pattern', 'query'] }); - await kibanaServer.importExport.load('test/functional/fixtures/kbn_archiver/discover.json'); - await kibanaServer.importExport.load( - 'test/functional/fixtures/kbn_archiver/date_nested.json' - ); - await esArchiver.load('test/functional/fixtures/es_archiver/date_nested'); - await esArchiver.load('test/functional/fixtures/es_archiver/logstash_functional'); + await kibanaServer.importExport.load(kbnArchives.discover); + await kibanaServer.importExport.load(kbnArchives.nested); + await esNode.load('test/functional/fixtures/es_archiver/date_nested'); + await esNode.load('test/functional/fixtures/es_archiver/logstash_functional'); await kibanaServer.uiSettings.replace(defaultSettings); log.debug('discover'); @@ -72,12 +90,12 @@ export default function ({ getService, getPageObjects }: FtrProviderContext) { }); after(async () => { - await kibanaServer.importExport.unload('test/functional/fixtures/kbn_archiver/discover'); - await kibanaServer.importExport.unload('test/functional/fixtures/kbn_archiver/date_nested'); + await kibanaServer.importExport.unload(kbnArchives.discover); + await kibanaServer.importExport.unload(kbnArchives.nested); await kibanaServer.savedObjects.clean({ types: ['search', 'index-pattern', 'query'] }); await kibanaServer.savedObjects.clean({ types: ['search', 'query'] }); - await esArchiver.unload('test/functional/fixtures/es_archiver/date_nested'); - await esArchiver.unload('test/functional/fixtures/es_archiver/logstash_functional'); + await esNode.unload('test/functional/fixtures/es_archiver/date_nested'); + await esNode.unload('test/functional/fixtures/es_archiver/logstash_functional'); await PageObjects.common.unsetTime(); }); @@ -102,14 +120,14 @@ export default function ({ getService, getPageObjects }: FtrProviderContext) { expect(await filterBar.hasFilter('extension.raw', 'jpg')).to.be(false); expect(await queryBar.getQueryString()).to.eql(''); - await PageObjects.discover.selectIndexPattern('date-nested'); + await PageObjects.discover.selectIndexPattern(dateNestedIndexPattern); expect(await filterBar.hasFilter('extension.raw', 'jpg')).to.be(false); expect(await queryBar.getQueryString()).to.eql(''); - await PageObjects.discover.selectIndexPattern('logstash-*'); + await PageObjects.discover.selectIndexPattern(logstashIndexPatternString); const currentDataView = await PageObjects.discover.getCurrentlySelectedDataView(); - expect(currentDataView).to.be('logstash-*'); + expect(currentDataView).to.be(logstashIndexPatternString); await retry.try(async function tryingForTime() { const hitCount = await PageObjects.discover.getHitCount(); expect(hitCount).to.be('4,731'); diff --git a/test/functional/apps/discover/index.ts b/test/functional/apps/discover/index.ts index 994cfeb8512815..e2895f3ca56b4f 100644 --- a/test/functional/apps/discover/index.ts +++ b/test/functional/apps/discover/index.ts @@ -5,12 +5,12 @@ * in compliance with, at your election, the Elastic License 2.0 or the Server * Side Public License, v 1. */ - import { FtrProviderContext } from '../../ftr_provider_context'; export default function ({ getService, loadTestFile }: FtrProviderContext) { const esArchiver = getService('esArchiver'); const browser = getService('browser'); + const config = getService('config'); describe('discover app', function () { this.tags('ciGroup6'); @@ -23,38 +23,43 @@ export default function ({ getService, loadTestFile }: FtrProviderContext) { await esArchiver.unload('test/functional/fixtures/es_archiver/logstash_functional'); }); - loadTestFile(require.resolve('./_saved_queries')); - loadTestFile(require.resolve('./_discover')); - loadTestFile(require.resolve('./_discover_histogram')); - loadTestFile(require.resolve('./_doc_table')); - loadTestFile(require.resolve('./_doc_table_newline')); - loadTestFile(require.resolve('./_filter_editor')); - loadTestFile(require.resolve('./_errors')); - loadTestFile(require.resolve('./_field_data')); - loadTestFile(require.resolve('./_field_data_with_fields_api')); - loadTestFile(require.resolve('./_shared_links')); - loadTestFile(require.resolve('./_sidebar')); - loadTestFile(require.resolve('./_source_filters')); - loadTestFile(require.resolve('./_large_string')); - loadTestFile(require.resolve('./_inspector')); - loadTestFile(require.resolve('./_classic_table_doc_navigation')); - loadTestFile(require.resolve('./_date_nanos')); - loadTestFile(require.resolve('./_date_nanos_mixed')); - loadTestFile(require.resolve('./_indexpattern_without_timefield')); - loadTestFile(require.resolve('./_discover_fields_api')); - loadTestFile(require.resolve('./_data_grid')); - loadTestFile(require.resolve('./_data_grid_context')); - loadTestFile(require.resolve('./_data_grid_field_data')); - loadTestFile(require.resolve('./_data_grid_doc_navigation')); - loadTestFile(require.resolve('./_data_grid_doc_table')); - loadTestFile(require.resolve('./_indexpattern_with_unmapped_fields')); - loadTestFile(require.resolve('./_runtime_fields_editor')); - loadTestFile(require.resolve('./_huge_fields')); - loadTestFile(require.resolve('./_date_nested')); - loadTestFile(require.resolve('./_search_on_page_load')); - loadTestFile(require.resolve('./_chart_hidden')); - loadTestFile(require.resolve('./_context_encoded_url_param')); - loadTestFile(require.resolve('./_data_view_editor')); - loadTestFile(require.resolve('./_empty_state')); + if (config.get('esTestCluster.ccs')) { + loadTestFile(require.resolve('./_data_view_editor')); + loadTestFile(require.resolve('./_saved_queries')); + } else { + loadTestFile(require.resolve('./_saved_queries')); + loadTestFile(require.resolve('./_discover')); + loadTestFile(require.resolve('./_discover_histogram')); + loadTestFile(require.resolve('./_doc_table')); + loadTestFile(require.resolve('./_doc_table_newline')); + loadTestFile(require.resolve('./_filter_editor')); + loadTestFile(require.resolve('./_errors')); + loadTestFile(require.resolve('./_field_data')); + loadTestFile(require.resolve('./_field_data_with_fields_api')); + loadTestFile(require.resolve('./_shared_links')); + loadTestFile(require.resolve('./_sidebar')); + loadTestFile(require.resolve('./_source_filters')); + loadTestFile(require.resolve('./_large_string')); + loadTestFile(require.resolve('./_inspector')); + loadTestFile(require.resolve('./_classic_table_doc_navigation')); + loadTestFile(require.resolve('./_date_nanos')); + loadTestFile(require.resolve('./_date_nanos_mixed')); + loadTestFile(require.resolve('./_indexpattern_without_timefield')); + loadTestFile(require.resolve('./_discover_fields_api')); + loadTestFile(require.resolve('./_data_grid')); + loadTestFile(require.resolve('./_data_grid_context')); + loadTestFile(require.resolve('./_data_grid_field_data')); + loadTestFile(require.resolve('./_data_grid_doc_navigation')); + loadTestFile(require.resolve('./_data_grid_doc_table')); + loadTestFile(require.resolve('./_indexpattern_with_unmapped_fields')); + loadTestFile(require.resolve('./_runtime_fields_editor')); + loadTestFile(require.resolve('./_huge_fields')); + loadTestFile(require.resolve('./_date_nested')); + loadTestFile(require.resolve('./_search_on_page_load')); + loadTestFile(require.resolve('./_chart_hidden')); + loadTestFile(require.resolve('./_context_encoded_url_param')); + loadTestFile(require.resolve('./_data_view_editor')); + loadTestFile(require.resolve('./_empty_state')); + } }); } diff --git a/test/functional_ccs/config.ts b/test/functional/config.ccs.ts similarity index 80% rename from test/functional_ccs/config.ts rename to test/functional/config.ccs.ts index e99a5310453d93..ecb42758785e52 100644 --- a/test/functional_ccs/config.ts +++ b/test/functional/config.ccs.ts @@ -7,8 +7,10 @@ */ import { FtrConfigProviderContext } from '@kbn/test'; -import { services } from './services'; +import { RemoteEsArchiverProvider } from './services/remote_es/remote_es_archiver'; +import { RemoteEsProvider } from './services/remote_es/remote_es'; +// eslint-disable-next-line import/no-default-export export default async function ({ readConfigFile }: FtrConfigProviderContext) { const functionalConfig = await readConfigFile(require.resolve('../functional/config')); @@ -17,7 +19,11 @@ export default async function ({ readConfigFile }: FtrConfigProviderContext) { testFiles: [require.resolve('./apps/discover')], - services, + services: { + ...functionalConfig.get('services'), + remoteEs: RemoteEsProvider, + remoteEsArchiver: RemoteEsArchiverProvider, + }, junit: { reportName: 'Kibana CCS Tests', diff --git a/test/functional/fixtures/kbn_archiver/date_nested_ccs.json b/test/functional/fixtures/kbn_archiver/ccs/date_nested.json similarity index 100% rename from test/functional/fixtures/kbn_archiver/date_nested_ccs.json rename to test/functional/fixtures/kbn_archiver/ccs/date_nested.json diff --git a/test/functional/fixtures/kbn_archiver/discover_ccs.json b/test/functional/fixtures/kbn_archiver/ccs/discover.json similarity index 100% rename from test/functional/fixtures/kbn_archiver/discover_ccs.json rename to test/functional/fixtures/kbn_archiver/ccs/discover.json diff --git a/test/functional_ccs/services/remote_es.ts b/test/functional/services/remote_es/remote_es.ts similarity index 92% rename from test/functional_ccs/services/remote_es.ts rename to test/functional/services/remote_es/remote_es.ts index 05a10d9e068f03..37ce35cdfefbcf 100644 --- a/test/functional_ccs/services/remote_es.ts +++ b/test/functional/services/remote_es/remote_es.ts @@ -9,7 +9,7 @@ import { Client } from '@elastic/elasticsearch'; import { systemIndicesSuperuser, createRemoteEsClientForFtrConfig } from '@kbn/test'; -import { FtrProviderContext } from '../ftr_provider_context'; +import { FtrProviderContext } from '../../ftr_provider_context'; /** * Kibana-specific @elastic/elasticsearch client instance. diff --git a/test/functional_ccs/services/remote_es_archiver.ts b/test/functional/services/remote_es/remote_es_archiver.ts similarity index 85% rename from test/functional_ccs/services/remote_es_archiver.ts rename to test/functional/services/remote_es/remote_es_archiver.ts index 569792d050a4d5..7e6f4241591e35 100644 --- a/test/functional_ccs/services/remote_es_archiver.ts +++ b/test/functional/services/remote_es/remote_es_archiver.ts @@ -7,10 +7,10 @@ */ import { EsArchiver } from '@kbn/es-archiver'; -import { FtrProviderContext } from '../ftr_provider_context'; +import { FtrProviderContext } from '../../ftr_provider_context'; export function RemoteEsArchiverProvider({ getService }: FtrProviderContext): EsArchiver { - const remoteEs = getService('remoteEs'); + const remoteEs = getService('remoteEs' as 'es'); const log = getService('log'); const kibanaServer = getService('kibanaServer'); diff --git a/test/functional_ccs/apps/discover/data_view_ccs.ts b/test/functional_ccs/apps/discover/data_view_ccs.ts deleted file mode 100644 index 5fc39ff5705df3..00000000000000 --- a/test/functional_ccs/apps/discover/data_view_ccs.ts +++ /dev/null @@ -1,70 +0,0 @@ -/* - * 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 and the Server Side Public License, v 1; you may not use this file except - * in compliance with, at your election, the Elastic License 2.0 or the Server - * Side Public License, v 1. - */ - -import { FtrProviderContext } from '../../ftr_provider_context'; - -export default function ({ getService, getPageObjects }: FtrProviderContext) { - const retry = getService('retry'); - const testSubjects = getService('testSubjects'); - const kibanaServer = getService('kibanaServer'); - const remoteEsArchiver = getService('remoteEsArchiver'); - - const security = getService('security'); - const PageObjects = getPageObjects(['common', 'discover', 'header', 'timePicker']); - - const createDataView = async (dataViewName: string) => { - await PageObjects.discover.clickIndexPatternActions(); - await PageObjects.discover.clickCreateNewDataView(); - await testSubjects.setValue('createIndexPatternNameInput', dataViewName, { - clearWithKeyboard: true, - typeCharByChar: true, - }); - await testSubjects.click('saveIndexPatternButton'); - }; - - describe('discover integration with data view editor', function describeIndexTests() { - before(async function () { - await security.testUser.setRoles([ - 'kibana_admin', - 'test_logstash_reader', - 'ccs_remote_search', - ]); - await remoteEsArchiver.loadIfNeeded( - 'test/functional/fixtures/es_archiver/logstash_functional' - ); - await kibanaServer.savedObjects.clean({ types: ['saved-search', 'index-pattern'] }); - // The test creates the 'ftr-remote:logstash*" data view but we have to load the discover_ccs - // which contains ftr-remote:logstash-* otherwise, discover will redirect us to another page. - await kibanaServer.importExport.load('test/functional/fixtures/kbn_archiver/discover_ccs'); - await PageObjects.timePicker.setDefaultAbsoluteRangeViaUiSettings(); - await PageObjects.common.navigateToApp('discover'); - }); - - after(async () => { - await security.testUser.restoreDefaults(); - await kibanaServer.importExport.unload('test/functional/fixtures/kbn_archiver/discover_ccs'); - await kibanaServer.savedObjects.clean({ types: ['saved-search', 'index-pattern'] }); - }); - - it('use ccs to create a new data view', async function () { - const dataViewToCreate = 'ftr-remote:logstash'; - await createDataView(dataViewToCreate); - await PageObjects.header.waitUntilLoadingHasFinished(); - await retry.waitForWithTimeout( - 'data view selector to include a newly created dataview', - 5000, - async () => { - const dataViewTitle = await PageObjects.discover.getCurrentlySelectedDataView(); - // data view editor will add wildcard symbol by default - // so we need to include it in our original title when comparing - return dataViewTitle === `${dataViewToCreate}*`; - } - ); - }); - }); -} diff --git a/test/functional_ccs/apps/discover/index.ts b/test/functional_ccs/apps/discover/index.ts deleted file mode 100644 index 2e9d428f44c601..00000000000000 --- a/test/functional_ccs/apps/discover/index.ts +++ /dev/null @@ -1,29 +0,0 @@ -/* - * 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 and the Server Side Public License, v 1; you may not use this file except - * in compliance with, at your election, the Elastic License 2.0 or the Server - * Side Public License, v 1. - */ - -import { FtrProviderContext } from '../../ftr_provider_context'; - -export default function ({ getService, loadTestFile }: FtrProviderContext) { - const esArchiver = getService('esArchiver'); - const browser = getService('browser'); - - describe('discover app css', function () { - this.tags('ciGroup6'); - - before(async () => { - await browser.setWindowSize(1300, 800); - }); - - loadTestFile(require.resolve('./data_view_ccs')); - loadTestFile(require.resolve('./saved_queries_ccs')); - - after(async () => { - await esArchiver.unload('test/functional/fixtures/es_archiver/logstash_functional'); - }); - }); -} diff --git a/test/functional_ccs/apps/discover/saved_queries_ccs.ts b/test/functional_ccs/apps/discover/saved_queries_ccs.ts deleted file mode 100644 index 08b6d61368f5d4..00000000000000 --- a/test/functional_ccs/apps/discover/saved_queries_ccs.ts +++ /dev/null @@ -1,221 +0,0 @@ -/* - * 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 and the Server Side Public License, v 1; you may not use this file except - * in compliance with, at your election, the Elastic License 2.0 or the Server - * Side Public License, v 1. - */ - -import expect from '@kbn/expect'; - -import { FtrProviderContext } from '../../ftr_provider_context'; - -export default function ({ getService, getPageObjects }: FtrProviderContext) { - const retry = getService('retry'); - const log = getService('log'); - const remoteEsArchiver = getService('remoteEsArchiver'); - const kibanaServer = getService('kibanaServer'); - const PageObjects = getPageObjects(['common', 'discover', 'timePicker']); - const browser = getService('browser'); - const filterBar = getService('filterBar'); - const queryBar = getService('queryBar'); - const savedQueryManagementComponent = getService('savedQueryManagementComponent'); - const testSubjects = getService('testSubjects'); - const defaultSettings = { - defaultIndex: 'logstash-*', - }; - - const setUpQueriesWithFilters = async () => { - // set up a query with filters and a time filter - log.debug('set up a query with filters to save'); - const from = 'Sep 20, 2015 @ 08:00:00.000'; - const to = 'Sep 21, 2015 @ 08:00:00.000'; - await PageObjects.common.setTime({ from, to }); - await PageObjects.common.navigateToApp('discover'); - await filterBar.addFilter('extension.raw', 'is one of', 'jpg'); - await queryBar.setQuery('response:200'); - }; - - describe('saved queries saved objects', function describeIndexTests() { - before(async function () { - log.debug('load kibana index with default index pattern'); - await kibanaServer.savedObjects.clean({ types: ['search', 'index-pattern'] }); - - await kibanaServer.importExport.load( - 'test/functional/fixtures/kbn_archiver/discover_ccs.json' - ); - await kibanaServer.importExport.load( - 'test/functional/fixtures/kbn_archiver/date_nested_ccs.json' - ); - await remoteEsArchiver.load('test/functional/fixtures/es_archiver/date_nested'); - await remoteEsArchiver.load('test/functional/fixtures/es_archiver/logstash_functional'); - - await kibanaServer.uiSettings.replace(defaultSettings); - log.debug('discover'); - await PageObjects.common.navigateToApp('discover'); - await PageObjects.timePicker.setDefaultAbsoluteRange(); - }); - - after(async () => { - await kibanaServer.importExport.unload('test/functional/fixtures/kbn_archiver/discover_ccs'); - await kibanaServer.importExport.unload( - 'test/functional/fixtures/kbn_archiver/date_nested_ccs' - ); - await remoteEsArchiver.unload('test/functional/fixtures/es_archiver/date_nested'); - await remoteEsArchiver.unload('test/functional/fixtures/es_archiver/logstash_functional'); - await PageObjects.common.unsetTime(); - }); - - describe('saved query selection', () => { - before(async () => await setUpQueriesWithFilters()); - - it(`should unselect saved query when navigating to a 'new'`, async function () { - await savedQueryManagementComponent.saveNewQuery( - 'test-unselect-saved-query', - 'mock', - true, - true - ); - - await queryBar.submitQuery(); - - expect(await filterBar.hasFilter('extension.raw', 'jpg')).to.be(true); - expect(await queryBar.getQueryString()).to.eql('response:200'); - - await PageObjects.discover.clickNewSearchButton(); - - expect(await filterBar.hasFilter('extension.raw', 'jpg')).to.be(false); - expect(await queryBar.getQueryString()).to.eql(''); - - await PageObjects.discover.selectIndexPattern('ftr-remote:date-nested'); - - expect(await filterBar.hasFilter('extension.raw', 'jpg')).to.be(false); - expect(await queryBar.getQueryString()).to.eql(''); - - await PageObjects.discover.selectIndexPattern('ftr-remote:logstash-*'); - - expect(await filterBar.hasFilter('extension.raw', 'jpg')).to.be(false); - expect(await queryBar.getQueryString()).to.eql(''); - - // reset state - await savedQueryManagementComponent.deleteSavedQuery('test-unselect-saved-query'); - }); - }); - - describe('saved query management component functionality', function () { - before(async () => await setUpQueriesWithFilters()); - - it('should show the saved query management component when there are no saved queries', async () => { - await savedQueryManagementComponent.openSavedQueryManagementComponent(); - const descriptionText = await testSubjects.getVisibleText('saved-query-management-popover'); - expect(descriptionText).to.eql( - 'Saved Queries\nThere are no saved queries. Save query text and filters that you want to use again.\nSave current query' - ); - }); - - it('should allow a query to be saved via the saved objects management component', async () => { - await savedQueryManagementComponent.saveNewQuery( - 'OkResponse', - '200 responses for .jpg over 24 hours', - true, - true - ); - await savedQueryManagementComponent.savedQueryExistOrFail('OkResponse'); - await savedQueryManagementComponent.savedQueryTextExist('response:200'); - }); - - it('reinstates filters and the time filter when a saved query has filters and a time filter included', async () => { - await PageObjects.timePicker.setDefaultAbsoluteRange(); - await savedQueryManagementComponent.clearCurrentlyLoadedQuery(); - await savedQueryManagementComponent.loadSavedQuery('OkResponse'); - const timePickerValues = await PageObjects.timePicker.getTimeConfigAsAbsoluteTimes(); - expect(await filterBar.hasFilter('extension.raw', 'jpg')).to.be(true); - expect(timePickerValues.start).to.not.eql(PageObjects.timePicker.defaultStartTime); - expect(timePickerValues.end).to.not.eql(PageObjects.timePicker.defaultEndTime); - }); - - it('preserves the currently loaded query when the page is reloaded', async () => { - await browser.refresh(); - const timePickerValues = await PageObjects.timePicker.getTimeConfigAsAbsoluteTimes(); - expect(await filterBar.hasFilter('extension.raw', 'jpg')).to.be(true); - expect(timePickerValues.start).to.not.eql(PageObjects.timePicker.defaultStartTime); - expect(timePickerValues.end).to.not.eql(PageObjects.timePicker.defaultEndTime); - await retry.waitFor( - 'the right hit count', - async () => (await PageObjects.discover.getHitCount()) === '2,792' - ); - expect(await savedQueryManagementComponent.getCurrentlyLoadedQueryID()).to.be('OkResponse'); - }); - - it('allows saving changes to a currently loaded query via the saved query management component', async () => { - await queryBar.setQuery('response:404'); - await savedQueryManagementComponent.updateCurrentlyLoadedQuery('OkResponse', false, false); - await savedQueryManagementComponent.savedQueryExistOrFail('OkResponse'); - await savedQueryManagementComponent.clearCurrentlyLoadedQuery(); - expect(await queryBar.getQueryString()).to.eql(''); - await savedQueryManagementComponent.loadSavedQuery('OkResponse'); - expect(await queryBar.getQueryString()).to.eql('response:404'); - }); - - it('allows saving the currently loaded query as a new query', async () => { - await savedQueryManagementComponent.saveCurrentlyLoadedAsNewQuery( - 'OkResponseCopy', - '200 responses', - false, - false - ); - await savedQueryManagementComponent.savedQueryExistOrFail('OkResponseCopy'); - }); - - it('allows deleting the currently loaded saved query in the saved query management component and clears the query', async () => { - await savedQueryManagementComponent.deleteSavedQuery('OkResponseCopy'); - await savedQueryManagementComponent.savedQueryMissingOrFail('OkResponseCopy'); - expect(await queryBar.getQueryString()).to.eql(''); - }); - - it('does not allow saving a query with a non-unique name', async () => { - // this check allows this test to run stand alone, also should fix occacional flakiness - const savedQueryExists = await savedQueryManagementComponent.savedQueryExist('OkResponse'); - if (!savedQueryExists) { - await savedQueryManagementComponent.saveNewQuery( - 'OkResponse', - '200 responses for .jpg over 24 hours', - true, - true - ); - await savedQueryManagementComponent.clearCurrentlyLoadedQuery(); - } - await savedQueryManagementComponent.saveNewQueryWithNameError('OkResponse'); - }); - - it('resets any changes to a loaded query on reloading the same saved query', async () => { - await savedQueryManagementComponent.loadSavedQuery('OkResponse'); - await queryBar.setQuery('response:503'); - await savedQueryManagementComponent.loadSavedQuery('OkResponse'); - expect(await queryBar.getQueryString()).to.eql('response:404'); - }); - - it('allows clearing the currently loaded saved query', async () => { - await savedQueryManagementComponent.loadSavedQuery('OkResponse'); - await savedQueryManagementComponent.clearCurrentlyLoadedQuery(); - expect(await queryBar.getQueryString()).to.eql(''); - }); - - it('allows clearing if non default language was remembered in localstorage', async () => { - await queryBar.switchQueryLanguage('lucene'); - await PageObjects.common.navigateToApp('discover'); // makes sure discovered is reloaded without any state in url - await queryBar.expectQueryLanguageOrFail('lucene'); // make sure lucene is remembered after refresh (comes from localstorage) - await savedQueryManagementComponent.loadSavedQuery('OkResponse'); - await queryBar.expectQueryLanguageOrFail('kql'); - await savedQueryManagementComponent.clearCurrentlyLoadedQuery(); - await queryBar.expectQueryLanguageOrFail('lucene'); - }); - - it('changing language removes saved query', async () => { - await savedQueryManagementComponent.loadSavedQuery('OkResponse'); - await queryBar.switchQueryLanguage('lucene'); - expect(await queryBar.getQueryString()).to.eql(''); - }); - }); - }); -} diff --git a/test/functional_ccs/ftr_provider_context.ts b/test/functional_ccs/ftr_provider_context.ts deleted file mode 100644 index 8fa82b46ac4063..00000000000000 --- a/test/functional_ccs/ftr_provider_context.ts +++ /dev/null @@ -1,13 +0,0 @@ -/* - * 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 and the Server Side Public License, v 1; you may not use this file except - * in compliance with, at your election, the Elastic License 2.0 or the Server - * Side Public License, v 1. - */ - -import { GenericFtrProviderContext } from '@kbn/test'; -import { services } from './services'; -import { pageObjects } from '../functional/page_objects'; - -export type FtrProviderContext = GenericFtrProviderContext; diff --git a/test/functional_ccs/services/index.ts b/test/functional_ccs/services/index.ts deleted file mode 100644 index dcdffa077fe083..00000000000000 --- a/test/functional_ccs/services/index.ts +++ /dev/null @@ -1,17 +0,0 @@ -/* - * 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 and the Server Side Public License, v 1; you may not use this file except - * in compliance with, at your election, the Elastic License 2.0 or the Server - * Side Public License, v 1. - */ - -import { services as functionalServices } from '../../functional/services'; -import { RemoteEsProvider } from './remote_es'; -import { RemoteEsArchiverProvider } from './remote_es_archiver'; - -export const services = { - ...functionalServices, - remoteEs: RemoteEsProvider, - remoteEsArchiver: RemoteEsArchiverProvider, -};