From 2521f8328576a03b8bd24a68787820f01c34b629 Mon Sep 17 00:00:00 2001 From: Matt Bargar Date: Tue, 1 Aug 2017 13:47:04 -0400 Subject: [PATCH] Add some functional tests for query language switching (#13036) (#13256) * Add some functional tests for query language switching --- .../public/query_bar/directive/query_bar.html | 1 + test/functional/apps/discover/_discover.js | 82 ++++++++++++++++++- test/functional/config.js | 2 + test/functional/services/index.js | 1 + test/functional/services/query_bar.js | 37 +++++++++ 5 files changed, 119 insertions(+), 4 deletions(-) create mode 100644 test/functional/services/query_bar.js diff --git a/src/ui/public/query_bar/directive/query_bar.html b/src/ui/public/query_bar/directive/query_bar.html index a955403f47d6..caac42da1e08 100644 --- a/src/ui/public/query_bar/directive/query_bar.html +++ b/src/ui/public/query_bar/directive/query_bar.html @@ -55,6 +55,7 @@ ng-model="queryBar.localQuery.language" ng-change="queryBar.selectLanguage()" ng-if="queryBar.showLanguageSwitcher" + data-test-subj="queryBarLanguageSwitcher" > diff --git a/test/functional/apps/discover/_discover.js b/test/functional/apps/discover/_discover.js index aa70c7fe2f24..90636becb209 100644 --- a/test/functional/apps/discover/_discover.js +++ b/test/functional/apps/discover/_discover.js @@ -7,7 +7,13 @@ export default function ({ getService, getPageObjects }) { const remote = getService('remote'); const kibanaServer = getService('kibanaServer'); const screenshots = getService('screenshots'); + const queryBar = getService('queryBar'); + const filterBar = getService('filterBar'); const PageObjects = getPageObjects(['common', 'discover', 'header']); + const defaultSettings = { + 'dateFormat:tz': 'UTC', + 'defaultIndex': 'logstash-*' + }; describe('discover app', function describeIndexTests() { const fromTime = '2015-09-19 06:31:44.000'; @@ -17,10 +23,7 @@ export default function ({ getService, getPageObjects }) { before(async function () { // delete .kibana index and update configDoc - await kibanaServer.uiSettings.replace({ - 'dateFormat:tz':'UTC', - 'defaultIndex':'logstash-*' - }); + await kibanaServer.uiSettings.replace(defaultSettings); log.debug('load kibana index with default index pattern'); await esArchiver.load('discover'); @@ -229,6 +232,77 @@ export default function ({ getService, getPageObjects }) { }); }); + describe('query language switching', function () { + + after(async function () { + await kibanaServer.uiSettings.replace(defaultSettings); + + log.debug('discover'); + await PageObjects.common.navigateToApp('discover'); + }); + + it('should not show a language switcher by default', async function () { + const languageSwitcherExists = await queryBar.hasLanguageSwitcher(); + expect(languageSwitcherExists).to.be(false); + }); + + it('should show a language switcher after it has been enabled in the advanced settings', async function () { + await kibanaServer.uiSettings.update({ + 'search:queryLanguage:switcher:enable': true + }); + await PageObjects.common.navigateToApp('discover'); + const languageSwitcherExists = await queryBar.hasLanguageSwitcher(); + expect(languageSwitcherExists).to.be(true); + }); + + it('should use lucene by default', async function () { + const currentLanguage = await queryBar.getCurrentLanguage(); + expect(currentLanguage).to.be('lucene'); + }); + + it('should allow changing the default language in advanced settings', async function () { + await kibanaServer.uiSettings.update({ + 'search:queryLanguage': 'kuery' + }); + await PageObjects.common.navigateToApp('discover'); + + const languageSwitcherExists = await queryBar.hasLanguageSwitcher(); + expect(languageSwitcherExists).to.be(true); + + const currentLanguage = await queryBar.getCurrentLanguage(); + expect(currentLanguage).to.be('kuery'); + }); + + it('should reset the query and filters when the language is switched', async function () { + await PageObjects.header.setAbsoluteRange(fromTime, toTime); + await PageObjects.discover.clickFieldListItem('response'); + await PageObjects.discover.clickFieldListPlusFilter('response', 200); + await PageObjects.header.waitUntilLoadingHasFinished(); + + let queryString = await queryBar.getQueryString(); + expect(queryString).to.not.be.empty(); + + await queryBar.setLanguage('lucene'); + await PageObjects.header.waitUntilLoadingHasFinished(); + queryString = await queryBar.getQueryString(); + expect(queryString).to.be.empty(); + expect(await filterBar.hasFilter('response', 200)).to.be(false); + + await PageObjects.discover.clickFieldListPlusFilter('response', 200); + await PageObjects.header.waitUntilLoadingHasFinished(); + queryString = await queryBar.getQueryString(); + expect(queryString).to.be.empty(); + expect(await filterBar.hasFilter('response', 200)).to.be(true); + + await queryBar.setLanguage('kuery'); + await PageObjects.header.waitUntilLoadingHasFinished(); + queryString = await queryBar.getQueryString(); + expect(queryString).to.be.empty(); + expect(await filterBar.hasFilter('response', 200)).to.be(false); + }); + + }); + describe('data-shared-item', function () { it('should have correct data-shared-item title and description', async () => { const expected = { diff --git a/test/functional/config.js b/test/functional/config.js index e48a07642df1..996699ca65e8 100644 --- a/test/functional/config.js +++ b/test/functional/config.js @@ -15,6 +15,7 @@ import { import { RemoteProvider, FilterBarProvider, + QueryBarProvider, FindProvider, TestSubjectsProvider, DocTableProvider, @@ -56,6 +57,7 @@ export default async function ({ readConfigFile }) { retry: commonConfig.get('services.retry'), remote: RemoteProvider, filterBar: FilterBarProvider, + queryBar: QueryBarProvider, find: FindProvider, testSubjects: TestSubjectsProvider, docTable: DocTableProvider, diff --git a/test/functional/services/index.js b/test/functional/services/index.js index 9cd9c86167d1..1785c27c572d 100644 --- a/test/functional/services/index.js +++ b/test/functional/services/index.js @@ -1,3 +1,4 @@ +export { QueryBarProvider } from './query_bar'; export { FilterBarProvider } from './filter_bar'; export { FindProvider } from './find'; export { TestSubjectsProvider } from './test_subjects'; diff --git a/test/functional/services/query_bar.js b/test/functional/services/query_bar.js new file mode 100644 index 000000000000..96dabd876c36 --- /dev/null +++ b/test/functional/services/query_bar.js @@ -0,0 +1,37 @@ +export function QueryBarProvider({ getService }) { + const testSubjects = getService('testSubjects'); + const find = getService('find'); + + class QueryBar { + + async getQueryString() { + const queryInput = await testSubjects.find('queryInput'); + return await queryInput.getProperty('value'); + } + + async hasLanguageSwitcher() { + return await testSubjects.exists('queryBarLanguageSwitcher'); + } + + async getLanguageSwitcher() { + return await testSubjects.find('queryBarLanguageSwitcher'); + } + + async getCurrentLanguage() { + const languageSwitcher = await this.getLanguageSwitcher(); + const selectedOption = await languageSwitcher.findByCssSelector('option[selected="selected"]'); + return await selectedOption.getVisibleText(); + } + + async setLanguage(language) { + const languageSwitcher = await this.getLanguageSwitcher(); + await languageSwitcher.click(); + + const requestedOption = await find.byCssSelector(`option[label="${language}"]`); + await requestedOption.click(); + } + + } + + return new QueryBar(); +}